Contract
0xdd839b26B9d5c10b8744832192EF9971300Ee4BA
12
Contract Overview
My Name Tag:
Not Available
TokenTracker:
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
AFFITRUM
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2023-07-11 */ /* ░█████╗░███████╗███████╗██╗ ██╗░██████╗ ░██████╗░█████╗░███████╗██╗░░░██╗ ██╔══██╗██╔════╝██╔════╝██║ ██║██╔════╝ ██╔════╝██╔══██╗██╔════╝██║░░░██║ ███████║█████╗░░█████╗░░██║ ██║╚█████╗░ ╚█████╗░███████║█████╗░░██║░░░██║ ██╔══██║██╔══╝░░██╔══╝░░██║ ██║░╚═══██╗ ░╚═══██╗██╔══██║██╔══╝░░██║░░░██║ ██║░░██║██║░░░░░██║░░░░░██║ ██║██████╔╝ ██████╔╝██║░░██║██║░░░░░╚██████╔╝ ##CONTRACT FEATURES FOR SAFUU *Owner can not modify tax *Owner can not mint tokens *Owner can not recover own token *Owner can not edit balance *Owner can not blacklist users *Owner can not suspend trading *Owner can not set max wallet or tx amount *Permanently fixed 9% Buy and Sell tax *Ownership Renounced after Airdrop. ##Socials## twitter: https://twitter.com/affitrum telegram: https://t.me/affitrum telegram channel: https://t.me/affitrumprotocol facebook: https://facebook.com/affitrum youtube: https://www.youtube.com/channel/UClPL3Ff4xfY2z18rBC1Xjtg medium: https://medium.com/@affitrum */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead 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}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override 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 this function is * overridden; * * 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 virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); 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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @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 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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"); (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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/structs/EnumerableSet.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/structs/EnumerableSet.sol) // This file was procedurally generated from scripts/generate/templates/EnumerableSet.js. pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. * * [WARNING] * ==== * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure * unusable. * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. * * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an * array of EnumerableSet. * ==== */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { bytes32[] memory store = _values(set._inner); bytes32[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values in the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } // File: contracts/interfaces/ICamelotFactory.sol pragma solidity >=0.5.0; interface ICamelotFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function owner() external view returns (address); function feePercentOwner() external view returns (address); function setStableOwner() external view returns (address); function feeTo() external view returns (address); function ownerFeeShare() external view returns (uint256); function referrersFeeShare(address) external view returns (uint256); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function feeInfo() external view returns (uint _ownerFeeShare, address _feeTo); } // File: contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { 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 quote( uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: contracts/interfaces/ICamelotRouter.sol pragma solidity >=0.6.2; interface ICamelotRouter is IUniswapV2Router01 { 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, address referrer, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, address referrer, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, address referrer, uint deadline ) external; function getAmountsOut( uint amountIn, address[] calldata path ) external view returns (uint[] memory amounts); } // File: contracts/interfaces/IJackpot.sol pragma solidity >=0.5.0; interface IJackpot { function lottery(address sender, uint256 amount) external; } interface IAutoliquidityTreasury { function autoAddLiquidity(address contractA, address contractB, uint256 tokenAmountA) external; } interface readDistributor { function getPresale(address _address) external view returns (uint256); } // File: contracts/interfaces/IWETH.sol pragma solidity >=0.5.0; interface IWETH { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } pragma solidity >=0.5.0; interface IAffiBonusPool { function deposit(uint256 _pid, uint256 _amount) external; function withdraw(uint256 _pid, uint256 _amount) external; function emergencyWithdraw(uint256 _pid) external; function injectRewards(uint256 amount) external; function injectRewardsWithTime(uint256 amount, uint256 rewardsSeconds) external; } // File: contracts/token/AFFITRUM.sol pragma solidity =0.8.19; contract AFFITRUM is ERC20, Ownable { using SafeERC20 for IERC20; using EnumerableSet for EnumerableSet.AddressSet; event SwapBack(uint256 burn, uint256 liquidity, uint256 jackpot, uint256 bonus, uint256 dev, uint timestamp); event Trade(address user, address pair, uint256 amount, uint side, uint256 circulatingSupply, uint timestamp); event AddLiquidity(uint256 tokenAmount, uint256 ethAmount, uint256 timestamp); event BuyBack(uint256 ethAmount, uint256 timestamp); bool public swapEnabled = true; bool public addLiquidityEnabled = true; bool public autoBuyBackEnabled = true; bool public RecordBuyEnabled = false; bool public inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } mapping(address => bool) public isFeeExempt; mapping(address => bool) public canAddLiquidityBeforeLaunch; mapping(address => address) public referrers; mapping(address => uint256) public totalCoinsBought; uint256 private burnFee; uint256 private liquidityFee; uint256 private jackpotFee; uint256 private bonusFee; uint256 private referralFee; uint256 private devFee; uint256 private totalFee; uint256 public feeDenominator = 10000; uint256 public mintokenswapback; // Buy Fees uint256 public burnFeeBuy = 100; uint256 public liquidityFeeBuy = 100; uint256 public jackpotFeeBuy = 100; uint256 public bonusFeeBuy = 300; uint256 public referralFeeBuy = 100; uint256 public devFeeBuy = 200; uint256 public totalFeeBuy = 900; // Sell Fees uint256 public burnFeeSell = 100; uint256 public liquidityFeeSell = 100; uint256 public jackpotFeeSell = 100; uint256 public bonusFeeSell = 300; uint256 public referralFeeSell = 100; uint256 public devFeeSell = 200; uint256 public totalFeeSell = 900; // Fees receivers address public bonusWallet; IJackpot public jackpotWallet; IAutoliquidityTreasury public AutoLiquidityTreasury; address private devWallet; address public eventWallet; address public distributor; address public refererRegistrar; IERC20 public backToken; IERC20 public USDT; uint256 public launchedAt; uint256 public launchedAtTimestamp; bool private initialized; ICamelotFactory private immutable factory; ICamelotRouter private immutable swapRouter; IWETH private immutable WETH; address private constant DEAD = 0x000000000000000000000000000000000000dEaD; address private constant ZERO = 0x0000000000000000000000000000000000000000; EnumerableSet.AddressSet private _pairs; constructor( IERC20 _backToken, address _factory, address _swapRouter, address _weth, IERC20 _usdt ) ERC20("AFFITRUM", "AFFI") { uint256 _totalSupply = 100_000_000 * 1e6; backToken = _backToken; USDT = _usdt; canAddLiquidityBeforeLaunch[_msgSender()] = true; canAddLiquidityBeforeLaunch[address(this)] = true; isFeeExempt[msg.sender] = true; isFeeExempt[address(this)] = true; factory = ICamelotFactory(_factory); swapRouter = ICamelotRouter(_swapRouter); WETH = IWETH(_weth); _mint(_msgSender(), _totalSupply); } function setReferrer(address _user, address _referrer) external { require(refererRegistrar != address(0) && msg.sender == refererRegistrar, "Only registrar can set referrer"); referrers[_user] = _referrer; } function initializePair(address _pair) external onlyOwner { require(!initialized, "Already initialized"); address pair = factory.createPair(_pair, address(this)); _pairs.add(pair); initialized = true; } function decimals() public view virtual override returns (uint8) { return 6; } function transfer(address to, uint256 amount) public virtual override returns (bool) { return _AffiTransfer(_msgSender(), to, amount); } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(sender, spender, amount); return _AffiTransfer(sender, recipient, amount); } function _AffiTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { if (inSwap) { _transfer(sender, recipient, amount); return true; } if (!canAddLiquidityBeforeLaunch[sender]) { require(launched(), "Project not yet launched!!"); } if (distributor != address(0)) { uint256 PresaleairdAmount = readDistributor(distributor).getPresale(sender); require((balanceOf(sender) - amount) >= PresaleairdAmount, "AFFI:You can only transfer presale/airdrop tokens at the end of the presale/airdrop"); } bool shouldTakeFee = (!isFeeExempt[sender] && !isFeeExempt[recipient]) && launched(); uint side = 0; address user_ = sender; address pair_ = recipient; // Set Fees if (isPair(sender)) { buyFees(); side = 1; user_ = recipient; pair_ = sender; try jackpotWallet.lottery(recipient, amount) {} catch {} } else if (isPair(recipient)) { sellFees(); side = 2; } else { shouldTakeFee = false; } if (shouldSwapBack(address(sender))) { swapBack(); } uint256 amountReceived = shouldTakeFee ? takeFee(sender, amount, user_) : amount; _transfer(sender, recipient, amountReceived); if (side > 0) { emit Trade(user_, pair_, amount, side, getCirculatingSupply(), block.timestamp); } if (side == 1 && RecordBuyEnabled) { totalCoinsBought[recipient] += amount; } return true; } function shouldSwapBack(address sender) internal view returns (bool) { return !inSwap && swapEnabled && launched() && balanceOf(address(this)) > mintokenswapback && !isPair(_msgSender()) && sender != distributor && sender != bonusWallet; } function swapBack() internal swapping { uint256 txAmount = balanceOf(address(this)); uint256 ethbalance = address(this).balance; _approve(address(this), address(swapRouter), txAmount); uint256 _totalFee = totalFee - referralFee; uint256 amountAffiBurn = (txAmount * burnFee) / (_totalFee); uint256 amountAffiLp = (txAmount * liquidityFee) / (_totalFee); uint256 amountAffiBonus = (txAmount * bonusFee) / (_totalFee); txAmount -= amountAffiBurn; txAmount -= amountAffiLp; txAmount -= amountAffiBonus; //SWAP BACK TOKEN > USDT(LP) address[] memory path = new address[](3); path[0] = address(this); path[1] = address(USDT); path[2] = address(backToken); bool success = false; uint256 balanceBefore = backToken.balanceOf(address(this)); try swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(txAmount,0,path,address(this),address(0),block.timestamp) { success = true; } catch {} if (!success) { return; } _transfer(address(this), DEAD, amountAffiBurn); _transfer(address(this), address(bonusWallet), amountAffiBonus); uint256 amountBackToken = backToken.balanceOf(address(this)) - balanceBefore; uint256 backTokenTotalFee = _totalFee - burnFee - liquidityFee - bonusFee; uint256 amountBackTokenJackpot = (amountBackToken * jackpotFee) / backTokenTotalFee; uint256 amountBackTokenDev = amountBackToken - amountBackTokenJackpot; backToken.transfer(address(jackpotWallet), amountBackTokenJackpot); backToken.transfer(devWallet, amountBackTokenDev); if (addLiquidityEnabled) { _doAddLp(); } if (autoBuyBackEnabled && ethbalance > 0) { _buybackToken(); } emit SwapBack(amountAffiBurn, amountAffiLp, amountBackTokenJackpot, amountAffiBonus, amountBackTokenDev, block.timestamp); } function _doAddLp() internal { //swap half tokens to usdt to add LP address[] memory pathEth = new address[](2); pathEth[0] = address(this); pathEth[1] = address(USDT); uint256 tokenAmount = balanceOf(address(this)); uint256 half = tokenAmount / 2; if(half < 1000) return; //swap leftover to usdt bool success = false; try swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(half,0, pathEth,address(AutoLiquidityTreasury),address(0),block.timestamp) { success = true; } catch {} if (!success) { return; } //add liquidity _transfer(address(this), address(AutoLiquidityTreasury), half); _approve(address(AutoLiquidityTreasury), address(swapRouter), half); try AutoLiquidityTreasury.autoAddLiquidity(address(this), address(USDT), half) {} catch {} } function _buybackToken() internal swapping { address[] memory path = new address[](3); path[0] = address(WETH); path[1] = address(USDT); path[2] = address(this); uint256 ethAmountBefore = address(this).balance; try swapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountBefore}(0, path, bonusWallet, address(0), block.timestamp) {} catch {} emit BuyBack(ethAmountBefore, block.timestamp); } function doSwapBack() public onlyOwner { swapBack(); } function launched() internal view returns (bool) { return launchedAt != 0; } function buyFees() internal { burnFee = burnFeeBuy; liquidityFee = liquidityFeeBuy; jackpotFee = jackpotFeeBuy; bonusFee = bonusFeeBuy; referralFee = referralFeeBuy; devFee = devFeeBuy; totalFee = totalFeeBuy; } function sellFees() internal { burnFee = burnFeeSell; liquidityFee = liquidityFeeSell; jackpotFee = jackpotFeeSell; bonusFee = bonusFeeSell; referralFee = referralFeeSell; devFee = devFeeSell; totalFee = totalFeeSell; } function takeFee(address sender, uint256 amount, address user) internal returns (uint256) { uint256 feeAmount = (amount * totalFee) / feeDenominator; uint256 refAmount = (feeAmount * referralFee) / totalFee; address refFeeTo = referrers[user] != address(0) ? referrers[user] : eventWallet; _transfer(sender, refFeeTo, refAmount); _transfer(sender, address(this), feeAmount - refAmount); return amount - feeAmount; } function getCirculatingSupply() public view returns (uint256) { return totalSupply() - balanceOf(DEAD) - balanceOf(ZERO); } /*** ADMIN FUNCTIONS ***/ function launch() public onlyOwner { require(launchedAt == 0, "Already launched"); launchedAt = block.number; launchedAtTimestamp = block.timestamp; } function rescueToken(address tokenAddress) external onlyOwner { require(tokenAddress != address(this), "CANT RESQUE OWN TOKEN"); IERC20(tokenAddress).safeTransfer(msg.sender,IERC20(tokenAddress).balanceOf(address(this))); } function clearStuckEthBalance() external onlyOwner { uint256 amountETH = address(this).balance; (bool success, ) = payable(_msgSender()).call{value: amountETH}(new bytes(0)); require(success, "ETH_TRANSFER_FAILED"); } function setFeeReceivers( address _bonusWallet, address _jackpotWallet, address _devWallet, address _eventWallet ) external onlyOwner { bonusWallet = _bonusWallet; jackpotWallet = IJackpot(_jackpotWallet); devWallet = _devWallet; eventWallet = _eventWallet; } function setAutoLiquidityTreasury(address _AutoLiquidityTreasury) external onlyOwner { require(_AutoLiquidityTreasury != address(0), "Zero address"); AutoLiquidityTreasury = IAutoliquidityTreasury(_AutoLiquidityTreasury); } function setDistributor(address _distributor) external onlyOwner { //require(_distributor != address(0), "Zero address"); [owner should be able to revert back to zero address before token renounce!] distributor = _distributor; } function setRefererRegistrar(address _registrar) external onlyOwner { //require(_registrar != address(0), "Zero address"); [owner should be able to revert back to zero address before token renounce!] refererRegistrar = _registrar; } function setMinSwapbackAmount(uint256 _minimumswapbackamount) external onlyOwner { mintokenswapback = _minimumswapbackamount; } function setIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function setSwapBackSettings(bool _enabled) external onlyOwner { swapEnabled = _enabled; } function setAddLiquidityEnabled(bool _enabled) external onlyOwner { addLiquidityEnabled = _enabled; } function setAutoBuyBackEnabled(bool _enabled) external onlyOwner { autoBuyBackEnabled = _enabled; } function setRecordBuyEnabled(bool _enabled) external onlyOwner { RecordBuyEnabled = _enabled; } function isPair(address account) public view returns (bool) { return _pairs.contains(account); } function addPair(address pair) public onlyOwner returns (bool) { require(pair != address(0), "pair is the zero address"); return _pairs.add(pair); } function delPair(address pair) public onlyOwner returns (bool) { require(pair != address(0), "pair is the zero address"); return _pairs.remove(pair); } function getMinterLength() public view returns (uint256) { return _pairs.length(); } function getPair(uint256 index) public view returns (address) { require(index <= _pairs.length() - 1, "index out of bounds"); return _pairs.at(index); } receive() external payable {} }
[{"inputs":[{"internalType":"contract IERC20","name":"_backToken","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_swapRouter","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"contract IERC20","name":"_usdt","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"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":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"BuyBack","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":"burn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"jackpot","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonus","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dev","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"side","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"circulatingSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Trade","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":"AutoLiquidityTreasury","outputs":[{"internalType":"contract IAutoliquidityTreasury","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RecordBuyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"addPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[],"name":"autoBuyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"backToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canAddLiquidityBeforeLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckEthBalance","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":"pair","type":"address"}],"name":"delPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eventWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinterLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"_pair","type":"address"}],"name":"initializePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotWallet","outputs":[{"internalType":"contract IJackpot","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintokenswapback","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":"refererRegistrar","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAddLiquidityEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAutoBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_AutoLiquidityTreasury","type":"address"}],"name":"setAutoLiquidityTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_distributor","type":"address"}],"name":"setDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bonusWallet","type":"address"},{"internalType":"address","name":"_jackpotWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_eventWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumswapbackamount","type":"uint256"}],"name":"setMinSwapbackAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setRecordBuyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_registrar","type":"address"}],"name":"setRefererRegistrar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"setReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"address","name":"","type":"address"}],"name":"totalCoinsBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeSell","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":"to","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040526001600560146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff0219169083151502179055506001600560166101000a81548160ff0219169083151502179055506000600560176101000a81548160ff02191690831515021790555061271060115560646013556064601455606460155561012c601655606460175560c86018556103846019556064601a556064601b556064601c5561012c601d556064601e5560c8601f55610384602055348015620000cd57600080fd5b506040516200662b3803806200662b8339818101604052810190620000f391906200075e565b6040518060400160405280600881526020017f414646495452554d0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4146464900000000000000000000000000000000000000000000000000000000815250816003908162000170919062000a60565b50806004908162000182919062000a60565b505050620001a5620001996200046a60201b60201c565b6200047260201b60201c565b6000655af3107a4000905085602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000620002486200046a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508373ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508273ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250506200045e620004516200046a60201b60201c565b826200053860201b60201c565b50505050505062000c62565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620005aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005a19062000ba8565b60405180910390fd5b620005be60008383620006a560201b60201c565b8060026000828254620005d2919062000bf9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000685919062000c45565b60405180910390a3620006a160008383620006aa60201b60201c565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006e182620006b4565b9050919050565b6000620006f582620006d4565b9050919050565b6200070781620006e8565b81146200071357600080fd5b50565b6000815190506200072781620006fc565b92915050565b6200073881620006d4565b81146200074457600080fd5b50565b60008151905062000758816200072d565b92915050565b600080600080600060a086880312156200077d576200077c620006af565b5b60006200078d8882890162000716565b9550506020620007a08882890162000747565b9450506040620007b38882890162000747565b9350506060620007c68882890162000747565b9250506080620007d98882890162000716565b9150509295509295909350565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200086857607f821691505b6020821081036200087e576200087d62000820565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008a9565b620008f48683620008a9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009416200093b62000935846200090c565b62000916565b6200090c565b9050919050565b6000819050919050565b6200095d8362000920565b620009756200096c8262000948565b848454620008b6565b825550505050565b600090565b6200098c6200097d565b6200099981848462000952565b505050565b5b81811015620009c157620009b560008262000982565b6001810190506200099f565b5050565b601f82111562000a1057620009da8162000884565b620009e58462000899565b81016020851015620009f5578190505b62000a0d62000a048562000899565b8301826200099e565b50505b505050565b600082821c905092915050565b600062000a356000198460080262000a15565b1980831691505092915050565b600062000a50838362000a22565b9150826002028217905092915050565b62000a6b82620007e6565b67ffffffffffffffff81111562000a875762000a86620007f1565b5b62000a9382546200084f565b62000aa0828285620009c5565b600060209050601f83116001811462000ad8576000841562000ac3578287015190505b62000acf858262000a42565b86555062000b3f565b601f19841662000ae88662000884565b60005b8281101562000b125784890151825560018201915060208501945060208101905062000aeb565b8683101562000b32578489015162000b2e601f89168262000a22565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000b90601f8362000b47565b915062000b9d8262000b58565b602082019050919050565b6000602082019050818103600083015262000bc38162000b81565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c06826200090c565b915062000c13836200090c565b925082820190508082111562000c2e5762000c2d62000bca565b5b92915050565b62000c3f816200090c565b82525050565b600060208201905062000c5c600083018462000c34565b92915050565b60805160a05160c05161597d62000cae6000396000613d44015260008181612b2001528181612dfc01528181613ae301528181613c000152613e78015260006112b5015261597d6000f3fe6080604052600436106104145760003560e01c80638072250b1161021e578063bf56b37111610123578063d4fac9f3116100ab578063e0ad8f111161007a578063e0ad8f1114610fca578063e3df003414610ff5578063e5e31b131461101e578063f2fde38b1461105b578063fb5f27fb146110845761041b565b8063d4fac9f314610f0e578063d830678614610f37578063dc5bcbdd14610f62578063dd62ed3e14610f8d5761041b565b8063c54e44eb116100f2578063c54e44eb14610e39578063c6d2577d14610e64578063c91d8f3c14610e8f578063cc27172c14610eb8578063cdba31fd14610ee35761041b565b8063bf56b37114610d8f578063bfa382b514610dba578063bfe1092814610dd1578063c2b7bbb614610dfc5761041b565b8063a457c2d7116101a6578063ace1880111610175578063ace1880114610caa578063b7eed4c414610cd5578063b8c6113014610d00578063bbddaca314610d29578063bdf391cc14610d525761041b565b8063a457c2d714610bca578063a5bc508514610c07578063a9059cbb14610c44578063aac46c9514610c815761041b565b806386c8782f116101ed57806386c8782f14610af55780638da5cb5b14610b205780638fbbd75014610b4b57806395d89b4114610b62578063979f166c14610b8d5761041b565b80638072250b14610a3757806382d2011614610a745780638601394014610a9f578063861faf5f14610aca5761041b565b80632d2f244b11610324578063658d4b7f116102ac578063715018a61161027b578063715018a61461097a57806371e59c0f1461099157806375552ea8146109ba57806375619ab5146109e55780637c117a6214610a0e5761041b565b8063658d4b7f146108be5780636c470595146108e75780636ddd17131461091257806370a082311461093d5761041b565b80633f4218e0116102f35780633f4218e0146107c55780634460d3cf146108025780634a3b68cc1461082b578063531484161461086857806356320fb1146108935761041b565b80632d2f244b14610709578063313ce56714610734578063395093511461075f5780633c8e556d1461079c5761041b565b806315674e8e116103a7578063234a2daa11610376578063234a2daa1461062257806323b872dd1461064d5780632a55fc2a1461068a5780632ad79e16146106b35780632b112e49146106de5761041b565b806315674e8e14610576578063180b0d7e146105a157806318160ddd146105cc57806318c1d9b2146105f75761041b565b806306fdde03116103e357806306fdde03146104b8578063095ea7b3146104e35780631107b3a51461052057806312835c5e1461054b5761041b565b806301339c21146104205780630190b7a6146104375780630323aac714610462578063035b9d9f1461048d5761041b565b3661041b57005b600080fd5b34801561042c57600080fd5b506104356110af565b005b34801561044357600080fd5b5061044c61110c565b60405161045991906142d2565b60405180910390f35b34801561046e57600080fd5b50610477611112565b60405161048491906142d2565b60405180910390f35b34801561049957600080fd5b506104a2611123565b6040516104af91906142d2565b60405180910390f35b3480156104c457600080fd5b506104cd611129565b6040516104da919061437d565b60405180910390f35b3480156104ef57600080fd5b5061050a6004803603810190610505919061442e565b6111bb565b6040516105179190614489565b60405180910390f35b34801561052c57600080fd5b506105356111de565b60405161054291906142d2565b60405180910390f35b34801561055757600080fd5b506105606111e4565b60405161056d91906142d2565b60405180910390f35b34801561058257600080fd5b5061058b6111ea565b60405161059891906142d2565b60405180910390f35b3480156105ad57600080fd5b506105b66111f0565b6040516105c391906142d2565b60405180910390f35b3480156105d857600080fd5b506105e16111f6565b6040516105ee91906142d2565b60405180910390f35b34801561060357600080fd5b5061060c611200565b60405161061991906144b3565b60405180910390f35b34801561062e57600080fd5b50610637611226565b60405161064491906142d2565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f91906144ce565b61122c565b6040516106819190614489565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac9190614521565b611259565b005b3480156106bf57600080fd5b506106c8611387565b6040516106d591906144b3565b60405180910390f35b3480156106ea57600080fd5b506106f36113ad565b60405161070091906142d2565b60405180910390f35b34801561071557600080fd5b5061071e6113e5565b60405161072b91906145ad565b60405180910390f35b34801561074057600080fd5b5061074961140b565b60405161075691906145e4565b60405180910390f35b34801561076b57600080fd5b506107866004803603810190610781919061442e565b611414565b6040516107939190614489565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be91906145ff565b61144b565b005b3480156107d157600080fd5b506107ec60048036038101906107e79190614521565b61155d565b6040516107f99190614489565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190614521565b61157d565b005b34801561083757600080fd5b50610852600480360381019061084d9190614521565b61169a565b60405161085f91906144b3565b60405180910390f35b34801561087457600080fd5b5061087d6116cd565b60405161088a91906142d2565b60405180910390f35b34801561089f57600080fd5b506108a86116d3565b6040516108b59190614687565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e091906146ce565b6116f9565b005b3480156108f357600080fd5b506108fc61175c565b60405161090991906142d2565b60405180910390f35b34801561091e57600080fd5b50610927611762565b6040516109349190614489565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f9190614521565b611775565b60405161097191906142d2565b60405180910390f35b34801561098657600080fd5b5061098f6117bd565b005b34801561099d57600080fd5b506109b860048036038101906109b39190614521565b6117d1565b005b3480156109c657600080fd5b506109cf61181d565b6040516109dc9190614489565b60405180910390f35b3480156109f157600080fd5b50610a0c6004803603810190610a079190614521565b611830565b005b348015610a1a57600080fd5b50610a356004803603810190610a309190614521565b61187c565b005b348015610a4357600080fd5b50610a5e6004803603810190610a599190614521565b611937565b604051610a6b9190614489565b60405180910390f35b348015610a8057600080fd5b50610a89611957565b604051610a9691906142d2565b60405180910390f35b348015610aab57600080fd5b50610ab461195d565b604051610ac19190614489565b60405180910390f35b348015610ad657600080fd5b50610adf611970565b604051610aec919061472f565b60405180910390f35b348015610b0157600080fd5b50610b0a611996565b604051610b1791906142d2565b60405180910390f35b348015610b2c57600080fd5b50610b3561199c565b604051610b4291906144b3565b60405180910390f35b348015610b5757600080fd5b50610b606119c6565b005b348015610b6e57600080fd5b50610b776119d8565b604051610b84919061437d565b60405180910390f35b348015610b9957600080fd5b50610bb46004803603810190610baf9190614521565b611a6a565b604051610bc191906142d2565b60405180910390f35b348015610bd657600080fd5b50610bf16004803603810190610bec919061442e565b611a82565b604051610bfe9190614489565b60405180910390f35b348015610c1357600080fd5b50610c2e6004803603810190610c299190614521565b611af9565b604051610c3b9190614489565b60405180910390f35b348015610c5057600080fd5b50610c6b6004803603810190610c66919061442e565b611b8d565b604051610c789190614489565b60405180910390f35b348015610c8d57600080fd5b50610ca86004803603810190610ca3919061474a565b611ba9565b005b348015610cb657600080fd5b50610cbf611bce565b604051610ccc91906142d2565b60405180910390f35b348015610ce157600080fd5b50610cea611bd4565b604051610cf791906142d2565b60405180910390f35b348015610d0c57600080fd5b50610d276004803603810190610d22919061474a565b611bda565b005b348015610d3557600080fd5b50610d506004803603810190610d4b9190614777565b611bff565b005b348015610d5e57600080fd5b50610d796004803603810190610d7491906147b7565b611d6c565b604051610d8691906144b3565b60405180910390f35b348015610d9b57600080fd5b50610da4611de1565b604051610db191906142d2565b60405180910390f35b348015610dc657600080fd5b50610dcf611de7565b005b348015610ddd57600080fd5b50610de6611efa565b604051610df391906144b3565b60405180910390f35b348015610e0857600080fd5b50610e236004803603810190610e1e9190614521565b611f20565b604051610e309190614489565b60405180910390f35b348015610e4557600080fd5b50610e4e611fb4565b604051610e5b919061472f565b60405180910390f35b348015610e7057600080fd5b50610e79611fda565b604051610e8691906142d2565b60405180910390f35b348015610e9b57600080fd5b50610eb66004803603810190610eb191906147b7565b611fe0565b005b348015610ec457600080fd5b50610ecd611ff2565b604051610eda9190614489565b60405180910390f35b348015610eef57600080fd5b50610ef8612005565b604051610f0591906142d2565b60405180910390f35b348015610f1a57600080fd5b50610f356004803603810190610f30919061474a565b61200b565b005b348015610f4357600080fd5b50610f4c612030565b604051610f599190614489565b60405180910390f35b348015610f6e57600080fd5b50610f77612043565b604051610f8491906144b3565b60405180910390f35b348015610f9957600080fd5b50610fb46004803603810190610faf9190614777565b612069565b604051610fc191906142d2565b60405180910390f35b348015610fd657600080fd5b50610fdf6120f0565b604051610fec91906142d2565b60405180910390f35b34801561100157600080fd5b5061101c6004803603810190611017919061474a565b6120f6565b005b34801561102a57600080fd5b5061104560048036038101906110409190614521565b61211b565b6040516110529190614489565b60405180910390f35b34801561106757600080fd5b50611082600480360381019061107d9190614521565b612138565b005b34801561109057600080fd5b506110996121bb565b6040516110a691906142d2565b60405180910390f35b6110b76121c1565b6000602a54146110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614830565b60405180910390fd5b43602a8190555042602b81905550565b60125481565b600061111e602d61223f565b905090565b60175481565b6060600380546111389061487f565b80601f01602080910402602001604051908101604052809291908181526020018280546111649061487f565b80156111b15780601f10611186576101008083540402835291602001916111b1565b820191906000526020600020905b81548152906001019060200180831161119457829003601f168201915b5050505050905090565b6000806111c6612254565b90506111d381858561225c565b600191505092915050565b601b5481565b601f5481565b60135481565b60115481565b6000600254905090565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b600080611237612254565b9050611244858285612425565b61124f8585856124b1565b9150509392505050565b6112616121c1565b602c60009054906101000a900460ff16156112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a8906148fc565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c9c6539683306040518363ffffffff1660e01b815260040161130e92919061491c565b6020604051808303816000875af115801561132d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611351919061495a565b905061136781602d61297190919063ffffffff16565b506001602c60006101000a81548160ff0219169083151502179055505050565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006113b96000611775565b6113c461dead611775565b6113cc6111f6565b6113d691906149b6565b6113e091906149b6565b905090565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006006905090565b60008061141f612254565b90506114408185856114318589612069565b61143b91906149ea565b61225c565b600191505092915050565b6114536121c1565b83602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60066020528060005260406000206000915054906101000a900460ff1681565b6115856121c1565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90614a6a565b60405180910390fd5b611697338273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161163091906144b3565b602060405180830381865afa15801561164d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116719190614a9f565b8373ffffffffffffffffffffffffffffffffffffffff166129a19092919063ffffffff16565b50565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60205481565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117016121c1565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b600560149054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117c56121c1565b6117cf6000612a27565b565b6117d96121c1565b80602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560169054906101000a900460ff1681565b6118386121c1565b80602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118846121c1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614b18565b60405180910390fd5b80602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60076020528060005260406000206000915054906101000a900460ff1681565b60145481565b600560159054906101000a900460ff1681565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119ce6121c1565b6119d6612aed565b565b6060600480546119e79061487f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a139061487f565b8015611a605780601f10611a3557610100808354040283529160200191611a60565b820191906000526020600020905b815481529060010190602001808311611a4357829003601f168201915b5050505050905090565b60096020528060005260406000206000915090505481565b600080611a8d612254565b90506000611a9b8286612069565b905083811015611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790614baa565b60405180910390fd5b611aed828686840361225c565b60019250505092915050565b6000611b036121c1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614c16565b60405180910390fd5b611b8682602d61321f90919063ffffffff16565b9050919050565b6000611ba1611b9a612254565b84846124b1565b905092915050565b611bb16121c1565b80600560156101000a81548160ff02191690831515021790555050565b601d5481565b601c5481565b611be26121c1565b80600560146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff16602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611cab5750602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce190614c82565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006001611d7a602d61223f565b611d8491906149b6565b821115611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614cee565b60405180910390fd5b611dda82602d61324f90919063ffffffff16565b9050919050565b602a5481565b611def6121c1565b60004790506000611dfe612254565b73ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff811115611e3057611e2f614d0e565b5b6040519080825280601f01601f191660200182016040528015611e625781602001600182028036833780820191505090505b50604051611e709190614d84565b60006040518083038185875af1925050503d8060008114611ead576040519150601f19603f3d011682016040523d82523d6000602084013e611eb2565b606091505b5050905080611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed90614de7565b60405180910390fd5b5050565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f2a6121c1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9090614c16565b60405180910390fd5b611fad82602d61297190919063ffffffff16565b9050919050565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602b5481565b611fe86121c1565b8060128190555050565b600560179054906101000a900460ff1681565b60185481565b6120136121c1565b80600560176101000a81548160ff02191690831515021790555050565b600560189054906101000a900460ff1681565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601e5481565b6120fe6121c1565b80600560166101000a81548160ff02191690831515021790555050565b600061213182602d61326990919063ffffffff16565b9050919050565b6121406121c1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690614e79565b60405180910390fd5b6121b881612a27565b50565b60195481565b6121c9612254565b73ffffffffffffffffffffffffffffffffffffffff166121e761199c565b73ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614ee5565b60405180910390fd5b565b600061224d82600001613299565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c290614f77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361233a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233190615009565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161241891906142d2565b60405180910390a3505050565b60006124318484612069565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124ab578181101561249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490615075565b60405180910390fd5b6124aa848484840361225c565b5b50505050565b6000600560189054906101000a900460ff16156124dc576124d38484846132aa565b6001905061296a565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661257557612535613520565b612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b906150e1565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126c3576000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166377ce88eb866040518263ffffffff1660e01b815260040161262891906144b3565b602060405180830381865afa158015612645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126699190614a9f565b9050808361267687611775565b61268091906149b6565b10156126c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b890615199565b60405180910390fd5b505b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127695750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127795750612778613520565b5b9050600080869050600086905061278f8861211b565b156128345761279c61352d565b60019250869150879050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab35127088886040518363ffffffff1660e01b81526004016128039291906151b9565b600060405180830381600087803b15801561281d57600080fd5b505af192505050801561282e575060015b50612859565b61283d8761211b565b156128535761284a61356e565b60029250612858565b600093505b5b612862886135af565b156128705761286f612aed565b5b60008461287d5786612889565b6128888988856136d3565b5b90506128968989836132aa565b60008411156128e8577fe6f814da7244d1ae6c61b54b5684858ba39cad7b9a91884be10060664987d754838389876128cc6113ad565b426040516128df969594939291906151e2565b60405180910390a15b6001841480156129045750600560179054906101000a900460ff165b156129605786600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461295891906149ea565b925050819055505b6001955050505050505b9392505050565b6000612999836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61386a565b905092915050565b612a228363a9059cbb60e01b84846040516024016129c09291906151b9565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506138da565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600560186101000a81548160ff0219169083151502179055506000612b1330611775565b90506000479050612b45307f00000000000000000000000000000000000000000000000000000000000000008461225c565b6000600e54601054612b5791906149b6565b9050600081600a5485612b6a9190615243565b612b7491906152b4565b9050600082600b5486612b879190615243565b612b9191906152b4565b9050600083600d5487612ba49190615243565b612bae91906152b4565b90508286612bbc91906149b6565b95508186612bca91906149b6565b95508086612bd891906149b6565b95506000600367ffffffffffffffff811115612bf757612bf6614d0e565b5b604051908082528060200260200182016040528015612c255781602001602082028036833780820191505090505b5090503081600081518110612c3d57612c3c6152e5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612cae57612cad6152e5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600281518110612d1f57612d1e6152e5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600080602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612db791906144b3565b602060405180830381865afa158015612dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df89190614a9f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ac3893ba8a600086306000426040518763ffffffff1660e01b8152600401612e5f9695949392919061540d565b600060405180830381600087803b158015612e7957600080fd5b505af1925050508015612e8a575060015b15612e9457600191505b81612ea757505050505050505050613202565b612eb43061dead886132aa565b612ee130602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866132aa565b600081602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612f3f91906144b3565b602060405180830381865afa158015612f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f809190614a9f565b612f8a91906149b6565b90506000600d54600b54600a548b612fa291906149b6565b612fac91906149b6565b612fb691906149b6565b9050600081600c5484612fc99190615243565b612fd391906152b4565b905060008184612fe391906149b6565b9050602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016130649291906151b9565b6020604051808303816000875af1158015613083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a7919061548a565b50602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016131279291906151b9565b6020604051808303816000875af1158015613146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316a919061548a565b50600560159054906101000a900460ff1615613189576131886139a1565b5b600560169054906101000a900460ff1680156131a5575060008c115b156131b3576131b2613cd9565b5b7ffc18969df35ccba802c14035d6d6273bf5bb4d8b9de8faa7aba1044c813b13008a8a848b85426040516131ec969594939291906154b7565b60405180910390a1505050505050505050505050505b6000600560186101000a81548160ff021916908315150217905550565b6000613247836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613f80565b905092915050565b600061325e8360000183614094565b60001c905092915050565b6000613291836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6140bf565b905092915050565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613319576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133109061558a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337f9061561c565b60405180910390fd5b6133938383836140e2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613410906156ae565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161350791906142d2565b60405180910390a361351a8484846140e7565b50505050565b600080602a541415905090565b601354600a81905550601454600b81905550601554600c81905550601654600d81905550601754600e81905550601854600f81905550601954601081905550565b601a54600a81905550601b54600b81905550601c54600c81905550601d54600d81905550601e54600e81905550601f54600f81905550602054601081905550565b6000600560189054906101000a900460ff161580156135da5750600560149054906101000a900460ff165b80156135ea57506135e9613520565b5b80156135ff57506012546135fd30611775565b115b80156136185750613616613611612254565b61211b565b155b80156136725750602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156136cc5750602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600080601154601054856136e79190615243565b6136f191906152b4565b90506000601054600e54836137069190615243565b61371091906152b4565b905060008073ffffffffffffffffffffffffffffffffffffffff16600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036137ce57602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661382f565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905061383c8782846132aa565b6138528730848661384d91906149b6565b6132aa565b828661385e91906149b6565b93505050509392505050565b600061387683836140bf565b6138cf5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506138d4565b600090505b92915050565b600061393c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166140ec9092919063ffffffff16565b905060008151111561399c578080602001905181019061395c919061548a565b61399b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399290615740565b60405180910390fd5b5b505050565b6000600267ffffffffffffffff8111156139be576139bd614d0e565b5b6040519080825280602002602001820160405280156139ec5781602001602082028036833780820191505090505b5090503081600081518110613a0457613a036152e5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613a7557613a746152e5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000613aba30611775565b90506000600282613acb91906152b4565b90506103e8811015613adf57505050613cd7565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ac3893ba83600087602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000426040518763ffffffff1660e01b8152600401613b689695949392919061540d565b600060405180830381600087803b158015613b8257600080fd5b505af1925050508015613b93575060015b15613b9d57600190505b80613bab5750505050613cd7565b613bd830602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846132aa565b613c25602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000000000000000000000000000000000000000000008461225c565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d1217cf30602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b8152600401613ca693929190615760565b600060405180830381600087803b158015613cc057600080fd5b505af1925050508015613cd1575060015b50505050505b565b6001600560186101000a81548160ff0219169083151502179055506000600367ffffffffffffffff811115613d1157613d10614d0e565b5b604051908082528060200260200182016040528015613d3f5781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000081600081518110613d7757613d766152e5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613de857613de76152e5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600281518110613e3757613e366152e5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4822be382600085602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000426040518763ffffffff1660e01b8152600401613efc959493929190615797565b6000604051808303818588803b158015613f1557600080fd5b505af193505050508015613f27575060015b507f8cdedd0db303ea9c88fd5b41969d212021edaf8efc5982d62a426e273145273a8142604051613f599291906157f1565b60405180910390a150506000600560186101000a81548160ff021916908315150217905550565b60008083600101600084815260200190815260200160002054905060008114614088576000600182613fb291906149b6565b9050600060018660000180549050613fca91906149b6565b9050818114614039576000866000018281548110613feb57613fea6152e5565b5b906000526020600020015490508087600001848154811061400f5761400e6152e5565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061404d5761404c61581a565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061408e565b60009150505b92915050565b60008260000182815481106140ac576140ab6152e5565b5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b505050565b505050565b60606140fb8484600085614104565b90509392505050565b606082471015614149576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614140906158bb565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516141729190614d84565b60006040518083038185875af1925050503d80600081146141af576040519150601f19603f3d011682016040523d82523d6000602084013e6141b4565b606091505b50915091506141c5878383876141d1565b92505050949350505050565b6060831561423357600083510361422b576141eb85614246565b61422a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161422190615927565b60405180910390fd5b5b82905061423e565b61423d8383614269565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561427c5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142b0919061437d565b60405180910390fd5b6000819050919050565b6142cc816142b9565b82525050565b60006020820190506142e760008301846142c3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561432757808201518184015260208101905061430c565b60008484015250505050565b6000601f19601f8301169050919050565b600061434f826142ed565b61435981856142f8565b9350614369818560208601614309565b61437281614333565b840191505092915050565b600060208201905081810360008301526143978184614344565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143cf826143a4565b9050919050565b6143df816143c4565b81146143ea57600080fd5b50565b6000813590506143fc816143d6565b92915050565b61440b816142b9565b811461441657600080fd5b50565b60008135905061442881614402565b92915050565b600080604083850312156144455761444461439f565b5b6000614453858286016143ed565b925050602061446485828601614419565b9150509250929050565b60008115159050919050565b6144838161446e565b82525050565b600060208201905061449e600083018461447a565b92915050565b6144ad816143c4565b82525050565b60006020820190506144c860008301846144a4565b92915050565b6000806000606084860312156144e7576144e661439f565b5b60006144f5868287016143ed565b9350506020614506868287016143ed565b925050604061451786828701614419565b9150509250925092565b6000602082840312156145375761453661439f565b5b6000614545848285016143ed565b91505092915050565b6000819050919050565b600061457361456e614569846143a4565b61454e565b6143a4565b9050919050565b600061458582614558565b9050919050565b60006145978261457a565b9050919050565b6145a78161458c565b82525050565b60006020820190506145c2600083018461459e565b92915050565b600060ff82169050919050565b6145de816145c8565b82525050565b60006020820190506145f960008301846145d5565b92915050565b600080600080608085870312156146195761461861439f565b5b6000614627878288016143ed565b9450506020614638878288016143ed565b9350506040614649878288016143ed565b925050606061465a878288016143ed565b91505092959194509250565b60006146718261457a565b9050919050565b61468181614666565b82525050565b600060208201905061469c6000830184614678565b92915050565b6146ab8161446e565b81146146b657600080fd5b50565b6000813590506146c8816146a2565b92915050565b600080604083850312156146e5576146e461439f565b5b60006146f3858286016143ed565b9250506020614704858286016146b9565b9150509250929050565b60006147198261457a565b9050919050565b6147298161470e565b82525050565b60006020820190506147446000830184614720565b92915050565b6000602082840312156147605761475f61439f565b5b600061476e848285016146b9565b91505092915050565b6000806040838503121561478e5761478d61439f565b5b600061479c858286016143ed565b92505060206147ad858286016143ed565b9150509250929050565b6000602082840312156147cd576147cc61439f565b5b60006147db84828501614419565b91505092915050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b600061481a6010836142f8565b9150614825826147e4565b602082019050919050565b600060208201905081810360008301526148498161480d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061489757607f821691505b6020821081036148aa576148a9614850565b5b50919050565b7f416c726561647920696e697469616c697a656400000000000000000000000000600082015250565b60006148e66013836142f8565b91506148f1826148b0565b602082019050919050565b60006020820190508181036000830152614915816148d9565b9050919050565b600060408201905061493160008301856144a4565b61493e60208301846144a4565b9392505050565b600081519050614954816143d6565b92915050565b6000602082840312156149705761496f61439f565b5b600061497e84828501614945565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149c1826142b9565b91506149cc836142b9565b92508282039050818111156149e4576149e3614987565b5b92915050565b60006149f5826142b9565b9150614a00836142b9565b9250828201905080821115614a1857614a17614987565b5b92915050565b7f43414e5420524553515545204f574e20544f4b454e0000000000000000000000600082015250565b6000614a546015836142f8565b9150614a5f82614a1e565b602082019050919050565b60006020820190508181036000830152614a8381614a47565b9050919050565b600081519050614a9981614402565b92915050565b600060208284031215614ab557614ab461439f565b5b6000614ac384828501614a8a565b91505092915050565b7f5a65726f20616464726573730000000000000000000000000000000000000000600082015250565b6000614b02600c836142f8565b9150614b0d82614acc565b602082019050919050565b60006020820190508181036000830152614b3181614af5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b946025836142f8565b9150614b9f82614b38565b604082019050919050565b60006020820190508181036000830152614bc381614b87565b9050919050565b7f7061697220697320746865207a65726f20616464726573730000000000000000600082015250565b6000614c006018836142f8565b9150614c0b82614bca565b602082019050919050565b60006020820190508181036000830152614c2f81614bf3565b9050919050565b7f4f6e6c79207265676973747261722063616e2073657420726566657272657200600082015250565b6000614c6c601f836142f8565b9150614c7782614c36565b602082019050919050565b60006020820190508181036000830152614c9b81614c5f565b9050919050565b7f696e646578206f7574206f6620626f756e647300000000000000000000000000600082015250565b6000614cd86013836142f8565b9150614ce382614ca2565b602082019050919050565b60006020820190508181036000830152614d0781614ccb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600081905092915050565b6000614d5e82614d3d565b614d688185614d48565b9350614d78818560208601614309565b80840191505092915050565b6000614d908284614d53565b915081905092915050565b7f4554485f5452414e534645525f4641494c454400000000000000000000000000600082015250565b6000614dd16013836142f8565b9150614ddc82614d9b565b602082019050919050565b60006020820190508181036000830152614e0081614dc4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e636026836142f8565b9150614e6e82614e07565b604082019050919050565b60006020820190508181036000830152614e9281614e56565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ecf6020836142f8565b9150614eda82614e99565b602082019050919050565b60006020820190508181036000830152614efe81614ec2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f616024836142f8565b9150614f6c82614f05565b604082019050919050565b60006020820190508181036000830152614f9081614f54565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ff36022836142f8565b9150614ffe82614f97565b604082019050919050565b6000602082019050818103600083015261502281614fe6565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061505f601d836142f8565b915061506a82615029565b602082019050919050565b6000602082019050818103600083015261508e81615052565b9050919050565b7f50726f6a656374206e6f7420796574206c61756e636865642121000000000000600082015250565b60006150cb601a836142f8565b91506150d682615095565b602082019050919050565b600060208201905081810360008301526150fa816150be565b9050919050565b7f414646493a596f752063616e206f6e6c79207472616e7366657220707265736160008201527f6c652f61697264726f7020746f6b656e732061742074686520656e64206f662060208201527f7468652070726573616c652f61697264726f7000000000000000000000000000604082015250565b60006151836053836142f8565b915061518e82615101565b606082019050919050565b600060208201905081810360008301526151b281615176565b9050919050565b60006040820190506151ce60008301856144a4565b6151db60208301846142c3565b9392505050565b600060c0820190506151f760008301896144a4565b61520460208301886144a4565b61521160408301876142c3565b61521e60608301866142c3565b61522b60808301856142c3565b61523860a08301846142c3565b979650505050505050565b600061524e826142b9565b9150615259836142b9565b9250828202615267816142b9565b9150828204841483151761527e5761527d614987565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006152bf826142b9565b91506152ca836142b9565b9250826152da576152d9615285565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061533961533461532f84615314565b61454e565b6142b9565b9050919050565b6153498161531e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615384816143c4565b82525050565b6000615396838361537b565b60208301905092915050565b6000602082019050919050565b60006153ba8261534f565b6153c4818561535a565b93506153cf8361536b565b8060005b838110156154005781516153e7888261538a565b97506153f2836153a2565b9250506001810190506153d3565b5085935050505092915050565b600060c08201905061542260008301896142c3565b61542f6020830188615340565b818103604083015261544181876153af565b905061545060608301866144a4565b61545d60808301856144a4565b61546a60a08301846142c3565b979650505050505050565b600081519050615484816146a2565b92915050565b6000602082840312156154a05761549f61439f565b5b60006154ae84828501615475565b91505092915050565b600060c0820190506154cc60008301896142c3565b6154d960208301886142c3565b6154e660408301876142c3565b6154f360608301866142c3565b61550060808301856142c3565b61550d60a08301846142c3565b979650505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155746025836142f8565b915061557f82615518565b604082019050919050565b600060208201905081810360008301526155a381615567565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156066023836142f8565b9150615611826155aa565b604082019050919050565b60006020820190508181036000830152615635816155f9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006156986026836142f8565b91506156a38261563c565b604082019050919050565b600060208201905081810360008301526156c78161568b565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b600061572a602a836142f8565b9150615735826156ce565b604082019050919050565b600060208201905081810360008301526157598161571d565b9050919050565b600060608201905061577560008301866144a4565b61578260208301856144a4565b61578f60408301846142c3565b949350505050565b600060a0820190506157ac6000830188615340565b81810360208301526157be81876153af565b90506157cd60408301866144a4565b6157da60608301856144a4565b6157e760808301846142c3565b9695505050505050565b600060408201905061580660008301856142c3565b61581360208301846142c3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006158a56026836142f8565b91506158b082615849565b604082019050919050565b600060208201905081810360008301526158d481615898565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000615911601d836142f8565b915061591c826158db565b602082019050919050565b6000602082019050818103600083015261594081615904565b905091905056fea26469706673582212200d1c04dc19fea49b385949ce08414b4d0aebf5d03426fdb99d08960b40c3a2fa64736f6c63430008130033000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc80000000000000000000000006eccab422d763ac031210895c81787e87b43a652000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc80000000000000000000000006eccab422d763ac031210895c81787e87b43a652000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9
-----Decoded View---------------
Arg [0] : _backToken (address): 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8
Arg [1] : _factory (address): 0x6EcCab422D763aC031210895C81787E87B43A652
Arg [2] : _swapRouter (address): 0xc873fEcbd354f5A56E00E710B90EF4201db2448d
Arg [3] : _weth (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
Arg [4] : _usdt (address): 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc8
Arg [1] : 0000000000000000000000006eccab422d763ac031210895c81787e87b43a652
Arg [2] : 000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d
Arg [3] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [4] : 000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9
Deployed ByteCode Sourcemap
58705:14747:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70067:182;;;;;;;;;;;;;:::i;:::-;;59992:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;73131:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60210:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8362:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10713:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60385:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60554:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60049;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59951:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9482:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60657:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60346:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62852:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62343:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60818:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;69891:137;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60690:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62594:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12198:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70771:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59503:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70257:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59619:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60592:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60726:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;72049:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60130:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59213:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9653:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37718:103;;;;;;;;;;;;;:::i;:::-;;71638:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59292:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;71378:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;71120:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59553:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60087:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59250:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60924:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60171:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37070:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;68653:68;;;;;;;;;;;;;:::i;:::-;;8581:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59668:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12939:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;72949:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62694:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;72288:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60471:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60429:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;72176:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62105:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;73237:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60979:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70511:249;;;;;;;;;;;;;:::i;:::-;;60851:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;72770:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60954:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61011:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;71900:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59336:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60252:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;72534:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59381:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60884:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10242:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60511:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;72412:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;72652:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37976:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60289:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70067:182;36956:13;:11;:13::i;:::-;70135:1:::1;70121:10;;:15;70113:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;70181:12;70168:10;:25;;;;70226:15;70204:19;:37;;;;70067:182::o:0;59992:31::-;;;;:::o;73131:98::-;73179:7;73206:15;:6;:13;:15::i;:::-;73199:22;;73131:98;:::o;60210:35::-;;;;:::o;8362:100::-;8416:13;8449:5;8442:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8362:100;:::o;10713:201::-;10796:4;10813:13;10829:12;:10;:12::i;:::-;10813:28;;10852:32;10861:5;10868:7;10877:6;10852:8;:32::i;:::-;10902:4;10895:11;;;10713:201;;;;:::o;60385:37::-;;;;:::o;60554:31::-;;;;:::o;60049:::-;;;;:::o;59951:37::-;;;;:::o;9482:108::-;9543:7;9570:12;;9563:19;;9482:108;:::o;60657:26::-;;;;;;;;;;;;;:::o;60346:32::-;;;;:::o;62852:270::-;62958:4;62975:15;62993:12;:10;:12::i;:::-;62975:30;;63016:40;63032:6;63040:7;63049:6;63016:15;:40::i;:::-;63074;63088:6;63096:9;63107:6;63074:13;:40::i;:::-;63067:47;;;62852:270;;;;;:::o;62343:243::-;36956:13;:11;:13::i;:::-;62421:11:::1;;;;;;;;;;;62420:12;62412:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;62467:12;62482:7;:18;;;62501:5;62516:4;62482:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62467:55;;62533:16;62544:4;62533:6;:10;;:16;;;;:::i;:::-;;62574:4;62560:11;;:18;;;;;;;;;;;;;;;;;;62401:185;62343:243:::0;:::o;60818:26::-;;;;;;;;;;;;;:::o;69891:137::-;69944:7;70005:15;61331:42;70005:9;:15::i;:::-;69987;61250:42;69987:9;:15::i;:::-;69971:13;:11;:13::i;:::-;:31;;;;:::i;:::-;:49;;;;:::i;:::-;69964:56;;69891:137;:::o;60690:29::-;;;;;;;;;;;;;:::o;62594:92::-;62652:5;62677:1;62670:8;;62594:92;:::o;12198:238::-;12286:4;12303:13;12319:12;:10;:12::i;:::-;12303:28;;12342:64;12351:5;12358:7;12395:10;12367:25;12377:5;12384:7;12367:9;:25::i;:::-;:38;;;;:::i;:::-;12342:8;:64::i;:::-;12424:4;12417:11;;;12198:238;;;;:::o;70771:341::-;36956:13;:11;:13::i;:::-;70971:12:::1;70957:11;;:26;;;;;;;;;;;;;;;;;;71019:14;70994:13;;:40;;;;;;;;;;;;;;;;;;71057:10;71045:9;;:22;;;;;;;;;;;;;;;;;;71092:12;71078:11;;:26;;;;;;;;;;;;;;;;;;70771:341:::0;;;;:::o;59503:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;70257:246::-;36956:13;:11;:13::i;:::-;70362:4:::1;70338:29;;:12;:29;;::::0;70330:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;70404:91;70438:10;70456:12;70449:30;;;70488:4;70449:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;70411:12;70404:33;;;;:91;;;;;:::i;:::-;70257:246:::0;:::o;59619:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;60592:33::-;;;;:::o;60726:51::-;;;;;;;;;;;;;:::o;72049:119::-;36956:13;:11;:13::i;:::-;72154:6:::1;72132:11;:19;72144:6;72132:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;72049:119:::0;;:::o;60130:34::-;;;;:::o;59213:30::-;;;;;;;;;;;;;:::o;9653:127::-;9727:7;9754:9;:18;9764:7;9754:18;;;;;;;;;;;;;;;;9747:25;;9653:127;;;:::o;37718:103::-;36956:13;:11;:13::i;:::-;37783:30:::1;37810:1;37783:18;:30::i;:::-;37718:103::o:0;71638:255::-;36956:13;:11;:13::i;:::-;71875:10:::1;71856:16;;:29;;;;;;;;;;;;;;;;;;71638:255:::0;:::o;59292:37::-;;;;;;;;;;;;;:::o;71378:251::-;36956:13;:11;:13::i;:::-;71609:12:::1;71595:11;;:26;;;;;;;;;;;;;;;;;;71378:251:::0;:::o;71120:246::-;36956:13;:11;:13::i;:::-;71258:1:::1;71224:36;;:22;:36;;::::0;71216:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;71335:22;71288:21;;:70;;;;;;;;;;;;;;;;;;71120:246:::0;:::o;59553:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;60087:36::-;;;;:::o;59250:38::-;;;;;;;;;;;;;:::o;60924:23::-;;;;;;;;;;;;;:::o;60171:32::-;;;;:::o;37070:87::-;37116:7;37143:6;;;;;;;;;;;37136:13;;37070:87;:::o;68653:68::-;36956:13;:11;:13::i;:::-;68703:10:::1;:8;:10::i;:::-;68653:68::o:0;8581:104::-;8637:13;8670:7;8663:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8581:104;:::o;59668:51::-;;;;;;;;;;;;;;;;;:::o;12939:436::-;13032:4;13049:13;13065:12;:10;:12::i;:::-;13049:28;;13088:24;13115:25;13125:5;13132:7;13115:9;:25::i;:::-;13088:52;;13179:15;13159:16;:35;;13151:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13272:60;13281:5;13288:7;13316:15;13297:16;:34;13272:8;:60::i;:::-;13363:4;13356:11;;;;12939:436;;;;:::o;72949:174::-;73006:4;36956:13;:11;:13::i;:::-;73047:1:::1;73031:18;;:4;:18;;::::0;73023:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;73096:19;73110:4;73096:6;:13;;:19;;;;:::i;:::-;73089:26;;72949:174:::0;;;:::o;62694:150::-;62773:4;62797:39;62811:12;:10;:12::i;:::-;62825:2;62829:6;62797:13;:39::i;:::-;62790:46;;62694:150;;;;:::o;72288:115::-;36956:13;:11;:13::i;:::-;72387:8:::1;72365:19;;:30;;;;;;;;;;;;;;;;;;72288:115:::0;:::o;60471:33::-;;;;:::o;60429:35::-;;;;:::o;72176:104::-;36956:13;:11;:13::i;:::-;72264:8:::1;72250:11;;:22;;;;;;;;;;;;;;;;;;72176:104:::0;:::o;62105:230::-;62216:1;62188:30;;:16;;;;;;;;;;;:30;;;;:64;;;;;62236:16;;;;;;;;;;;62222:30;;:10;:30;;;62188:64;62180:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;62318:9;62299;:16;62309:5;62299:16;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;62105:230;;:::o;73237:175::-;73290:7;73345:1;73327:15;:6;:13;:15::i;:::-;:19;;;;:::i;:::-;73318:5;:28;;73310:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;73388:16;73398:5;73388:6;:9;;:16;;;;:::i;:::-;73381:23;;73237:175;;;:::o;60979:25::-;;;;:::o;70511:249::-;36956:13;:11;:13::i;:::-;70573:17:::1;70593:21;70573:41;;70626:12;70652;:10;:12::i;:::-;70644:26;;70678:9;70699:1;70689:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70644:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70625:77;;;70721:7;70713:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;70562:198;;70511:249::o:0;60851:26::-;;;;;;;;;;;;;:::o;72770:171::-;72827:4;36956:13;:11;:13::i;:::-;72868:1:::1;72852:18;;:4;:18;;::::0;72844:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;72917:16;72928:4;72917:6;:10;;:16;;;;:::i;:::-;72910:23;;72770:171:::0;;;:::o;60954:18::-;;;;;;;;;;;;;:::o;61011:34::-;;;;:::o;71900:141::-;36956:13;:11;:13::i;:::-;72011:22:::1;71992:16;:41;;;;71900:141:::0;:::o;59336:36::-;;;;;;;;;;;;;:::o;60252:30::-;;;;:::o;72534:109::-;36956:13;:11;:13::i;:::-;72627:8:::1;72608:16;;:27;;;;;;;;;;;;;;;;;;72534:109:::0;:::o;59381:18::-;;;;;;;;;;;;;:::o;60884:31::-;;;;;;;;;;;;;:::o;10242:151::-;10331:7;10358:11;:18;10370:5;10358:18;;;;;;;;;;;;;;;:27;10377:7;10358:27;;;;;;;;;;;;;;;;10351:34;;10242:151;;;;:::o;60511:36::-;;;;:::o;72412:113::-;36956:13;:11;:13::i;:::-;72509:8:::1;72488:18;;:29;;;;;;;;;;;;;;;;;;72412:113:::0;:::o;72652:110::-;72706:4;72730:24;72746:7;72730:6;:15;;:24;;;;:::i;:::-;72723:31;;72652:110;;;:::o;37976:201::-;36956:13;:11;:13::i;:::-;38085:1:::1;38065:22;;:8;:22;;::::0;38057:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38141:28;38160:8;38141:18;:28::i;:::-;37976:201:::0;:::o;60289:32::-;;;;:::o;37235:132::-;37310:12;:10;:12::i;:::-;37299:23;;:7;:5;:7::i;:::-;:23;;;37291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37235:132::o;47934:117::-;47997:7;48024:19;48032:3;:10;;48024:7;:19::i;:::-;48017:26;;47934:117;;;:::o;6008:98::-;6061:7;6088:10;6081:17;;6008:98;:::o;16966:380::-;17119:1;17102:19;;:5;:19;;;17094:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17200:1;17181:21;;:7;:21;;;17173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17284:6;17254:11;:18;17266:5;17254:18;;;;;;;;;;;;;;;:27;17273:7;17254:27;;;;;;;;;;;;;;;:36;;;;17322:7;17306:32;;17315:5;17306:32;;;17331:6;17306:32;;;;;;:::i;:::-;;;;;;;;16966:380;;;:::o;17637:453::-;17772:24;17799:25;17809:5;17816:7;17799:9;:25::i;:::-;17772:52;;17859:17;17839:16;:37;17835:248;;17921:6;17901:16;:26;;17893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18005:51;18014:5;18021:7;18049:6;18030:16;:25;18005:8;:51::i;:::-;17835:248;17761:329;17637:453;;;:::o;63130:1715::-;63222:4;63243:6;;;;;;;;;;;63239:101;;;63266:36;63276:6;63284:9;63295:6;63266:9;:36::i;:::-;63324:4;63317:11;;;;63239:101;63355:27;:35;63383:6;63355:35;;;;;;;;;;;;;;;;;;;;;;;;;63350:118;;63415:10;:8;:10::i;:::-;63407:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;63350:118;63499:1;63476:25;;:11;;;;;;;;;;;:25;;;63472:305;;63522:25;63566:11;;;;;;;;;;;63550:39;;;63590:6;63550:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63522:75;;63656:17;63645:6;63625:17;63635:6;63625:9;:17::i;:::-;:26;;;;:::i;:::-;63624:49;;63616:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;63503:274;63472:305;63789:18;63812:11;:19;63824:6;63812:19;;;;;;;;;;;;;;;;;;;;;;;;;63811:20;:47;;;;;63836:11;:22;63848:9;63836:22;;;;;;;;;;;;;;;;;;;;;;;;;63835:23;63811:47;63810:63;;;;;63863:10;:8;:10::i;:::-;63810:63;63789:84;;63884:9;63908:13;63924:6;63908:22;;63941:13;63957:9;63941:25;;64002:14;64009:6;64002;:14::i;:::-;63998:349;;;64033:9;:7;:9::i;:::-;64064:1;64057:8;;64088:9;64080:17;;64120:6;64112:14;;64145:13;;;;;;;;;;;:21;;;64167:9;64178:6;64145:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64141:56;63998:349;;;64214:17;64221:9;64214:6;:17::i;:::-;64210:137;;;64248:10;:8;:10::i;:::-;64280:1;64273:8;;64210:137;;;64330:5;64314:21;;64210:137;63998:349;64363:31;64386:6;64363:14;:31::i;:::-;64359:74;;;64411:10;:8;:10::i;:::-;64359:74;64445:22;64470:13;:55;;64519:6;64470:55;;;64486:30;64494:6;64502;64510:5;64486:7;:30::i;:::-;64470:55;64445:80;;64536:44;64546:6;64554:9;64565:14;64536:9;:44::i;:::-;64604:1;64597:4;:8;64593:120;;;64627:74;64633:5;64640;64647:6;64655:4;64661:22;:20;:22::i;:::-;64685:15;64627:74;;;;;;;;;;;:::i;:::-;;;;;;;;64593:120;64729:1;64721:4;:9;:29;;;;;64734:16;;;;;;;;;;;64721:29;64717:99;;;64798:6;64767:16;:27;64784:9;64767:27;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;64717:99;64833:4;64826:11;;;;;;;63130:1715;;;;;;:::o;47109:152::-;47179:4;47203:50;47208:3;:10;;47244:5;47228:23;;47220:32;;47203:4;:50::i;:::-;47196:57;;47109:152;;;;:::o;32049:211::-;32166:86;32186:5;32216:23;;;32241:2;32245:5;32193:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32166:19;:86::i;:::-;32049:211;;;:::o;38337:191::-;38411:16;38430:6;;;;;;;;;;;38411:25;;38456:8;38447:6;;:17;;;;;;;;;;;;;;;;;;38511:8;38480:40;;38501:8;38480:40;;;;;;;;;;;;38400:128;38337:191;:::o;65114:2082::-;59446:4;59437:6;;:13;;;;;;;;;;;;;;;;;;65163:16:::1;65182:24;65200:4;65182:9;:24::i;:::-;65163:43;;65217:18;65238:21;65217:42;;65270:54;65287:4;65302:10;65315:8;65270;:54::i;:::-;65337:17;65368:11;;65357:8;;:22;;;;:::i;:::-;65337:42;;65392:22;65441:9;65429:7;;65418:8;:18;;;;:::i;:::-;65417:34;;;;:::i;:::-;65392:59;;65462:20;65514:9;65497:12;;65486:8;:23;;;;:::i;:::-;65485:39;;;;:::i;:::-;65462:62;;65535:23;65586:9;65573:8;;65562;:19;;;;:::i;:::-;65561:35;;;;:::i;:::-;65535:61;;65619:14;65607:26;;;;;:::i;:::-;;;65656:12;65644:24;;;;;:::i;:::-;;;65691:15;65679:27;;;;;:::i;:::-;;;65759:21;65797:1;65783:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65759:40;;65828:4;65810;65815:1;65810:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;65862:4;;;;;;;;;;;65844;65849:1;65844:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;65896:9;;;;;;;;;;;65878:4;65883:1;65878:7;;;;;;;;:::i;:::-;;;;;;;:28;;;;;;;;;::::0;::::1;65927:12;65958:21:::0;65982:9:::1;;;;;;;;;;;:19;;;66010:4;65982:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65958:58;;66031:10;:64;;;66096:8;66105:1;66107:4;66120;66134:1;66137:15;66031:122;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;66027:177:::0;::::1;;66179:4;66169:14;;66027:177;66219:7;66214:47;;66243:7;;;;;;;;;;;66214:47;66273:46;66291:4;61250:42;66304:14;66273:9;:46::i;:::-;66330:63;66348:4;66363:11;;;;;;;;;;;66377:15;66330:9;:63::i;:::-;66414:23;66477:13;66440:9;;;;;;;;;;;:19;;;66468:4;66440:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;66414:76;;66501:25;66566:8;;66551:12;;66541:7;;66529:9;:19;;;;:::i;:::-;:34;;;;:::i;:::-;:45;;;;:::i;:::-;66501:73;;66585:30;66651:17;66637:10;;66619:15;:28;;;;:::i;:::-;66618:50;;;;:::i;:::-;66585:83;;66679:26;66726:22;66708:15;:40;;;;:::i;:::-;66679:69;;66761:9;;;;;;;;;;;:18;;;66788:13;;;;;;;;;;;66804:22;66761:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;66838:9;;;;;;;;;;;:18;;;66857:9;;;;;;;;;;;66868:18;66838:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;66904:19;;;;;;;;;;;66900:62;;;66940:10;:8;:10::i;:::-;66900:62;66974:18;;;;;;;;;;;:36;;;;;67009:1;66996:10;:14;66974:36;66970:83;;;67026:15;:13;:15::i;:::-;66970:83;67072:116;67081:14;67097:12;67111:22;67135:15;67152:18;67172:15;67072:116;;;;;;;;;;;:::i;:::-;;;;;;;;65152:2044;;;;;;;;;;;;;59461:1;59482:5:::0;59473:6;;:14;;;;;;;;;;;;;;;;;;65114:2082::o;47437:158::-;47510:4;47534:53;47542:3;:10;;47578:5;47562:23;;47554:32;;47534:7;:53::i;:::-;47527:60;;47437:158;;;;:::o;48405:::-;48479:7;48530:22;48534:3;:10;;48546:5;48530:3;:22::i;:::-;48522:31;;48499:56;;48405:158;;;;:::o;47681:167::-;47761:4;47785:55;47795:3;:10;;47831:5;47815:23;;47807:32;;47785:9;:55::i;:::-;47778:62;;47681:167;;;;:::o;43151:109::-;43207:7;43234:3;:11;;:18;;;;43227:25;;43151:109;;;:::o;13845:840::-;13992:1;13976:18;;:4;:18;;;13968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14069:1;14055:16;;:2;:16;;;14047:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14124:38;14145:4;14151:2;14155:6;14124:20;:38::i;:::-;14175:19;14197:9;:15;14207:4;14197:15;;;;;;;;;;;;;;;;14175:37;;14246:6;14231:11;:21;;14223:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14363:6;14349:11;:20;14331:9;:15;14341:4;14331:15;;;;;;;;;;;;;;;:38;;;;14566:6;14549:9;:13;14559:2;14549:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;14616:2;14601:26;;14610:4;14601:26;;;14620:6;14601:26;;;;;;:::i;:::-;;;;;;;;14640:37;14660:4;14666:2;14670:6;14640:19;:37::i;:::-;13957:728;13845:840;;;:::o;68729:90::-;68772:4;68810:1;68796:10;;:15;;68789:22;;68729:90;:::o;68827:279::-;68876:10;;68866:7;:20;;;;68912:15;;68897:12;:30;;;;68951:13;;68938:10;:26;;;;68986:11;;68975:8;:22;;;;69022:14;;69008:11;:28;;;;69056:9;;69047:6;:18;;;;69087:11;;69076:8;:22;;;;68827:279::o;69114:287::-;69164:11;;69154:7;:21;;;;69201:16;;69186:12;:31;;;;69241:14;;69228:10;:27;;;;69277:12;;69266:8;:23;;;;69314:15;;69300:11;:29;;;;69349:10;;69340:6;:19;;;;69381:12;;69370:8;:23;;;;69114:287::o;64853:253::-;64916:4;64941:6;;;;;;;;;;;64940:7;:22;;;;;64951:11;;;;;;;;;;;64940:22;:36;;;;;64966:10;:8;:10::i;:::-;64940:36;:83;;;;;65007:16;;64980:24;64998:4;64980:9;:24::i;:::-;:43;64940:83;:108;;;;;65028:20;65035:12;:10;:12::i;:::-;65028:6;:20::i;:::-;65027:21;64940:108;:133;;;;;65062:11;;;;;;;;;;;65052:21;;:6;:21;;;;64940:133;:158;;;;;65087:11;;;;;;;;;;;65077:21;;:6;:21;;;;64940:158;64933:165;;64853:253;;;:::o;69409:474::-;69490:7;69510:17;69552:14;;69540:8;;69531:6;:17;;;;:::i;:::-;69530:36;;;;:::i;:::-;69510:56;;69577:17;69625:8;;69610:11;;69598:9;:23;;;;:::i;:::-;69597:36;;;;:::i;:::-;69577:56;;69644:16;69690:1;69663:29;;:9;:15;69673:4;69663:15;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;:61;;69713:11;;;;;;;;;;;69663:61;;;69695:9;:15;69705:4;69695:15;;;;;;;;;;;;;;;;;;;;;;;;;69663:61;69644:80;;69735:38;69745:6;69753:8;69763:9;69735;:38::i;:::-;69784:55;69794:6;69810:4;69829:9;69817;:21;;;;:::i;:::-;69784:9;:55::i;:::-;69866:9;69857:6;:18;;;;:::i;:::-;69850:25;;;;;69409:474;;;;;:::o;40840:414::-;40903:4;40925:21;40935:3;40940:5;40925:9;:21::i;:::-;40920:327;;40963:3;:11;;40980:5;40963:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41146:3;:11;;:18;;;;41124:3;:12;;:19;41137:5;41124:19;;;;;;;;;;;:40;;;;41186:4;41179:11;;;;40920:327;41230:5;41223:12;;40840:414;;;;;:::o;35116:716::-;35540:23;35566:69;35594:4;35566:69;;;;;;;;;;;;;;;;;35574:5;35566:27;;;;:69;;;;;:::i;:::-;35540:95;;35670:1;35650:10;:17;:21;35646:179;;;35747:10;35736:30;;;;;;;;;;;;:::i;:::-;35728:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35646:179;35186:646;35116:716;;:::o;67204:958::-;67290:24;67331:1;67317:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67290:43;;67365:4;67344:7;67352:1;67344:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;67402:4;;;;;;;;;;;67381:7;67389:1;67381:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;67420:19;67442:24;67460:4;67442:9;:24::i;:::-;67420:46;;67477:12;67506:1;67492:11;:15;;;;:::i;:::-;67477:30;;67528:4;67521;:11;67518:23;;;67534:7;;;;;67518:23;67586:12;67621:10;:64;;;67686:4;67691:1;67694:7;67710:21;;;;;;;;;;;67741:1;67744:15;67621:139;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67617:203;;;67795:4;67785:14;;67617:203;67835:7;67830:47;;67859:7;;;;;;67830:47;67914:62;67932:4;67947:21;;;;;;;;;;;67971:4;67914:9;:62::i;:::-;67987:67;68004:21;;;;;;;;;;;68036:10;68049:4;67987:8;:67::i;:::-;68069:21;;;;;;;;;;;:38;;;68116:4;68131;;;;;;;;;;;68138;68069:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68065:90;67233:929;;;;67204:958;:::o;68168:477::-;59446:4;59437:6;;:13;;;;;;;;;;;;;;;;;;68223:21:::1;68261:1;68247:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68223:40;;68292:4;68274;68279:1;68274:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;68326:4;;;;;;;;;;;68308;68313:1;68308:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;68354:4;68336;68341:1;68336:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;68374;68400:21;68374:47;;68434:10;:61;;;68503:15;68520:1;68523:4;68529:11;;;;;;;;;;;68550:1;68554:15;68434:136;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;68430:152:::0;68596:41:::1;68604:15;68621;68596:41;;;;;;;:::i;:::-;;;;;;;;68211:434;;59482:5:::0;59473:6;;:14;;;;;;;;;;;;;;;;;;68168:477::o;41430:1420::-;41496:4;41614:18;41635:3;:12;;:19;41648:5;41635:19;;;;;;;;;;;;41614:40;;41685:1;41671:10;:15;41667:1176;;42046:21;42083:1;42070:10;:14;;;;:::i;:::-;42046:38;;42099:17;42140:1;42119:3;:11;;:18;;;;:22;;;;:::i;:::-;42099:42;;42175:13;42162:9;:26;42158:405;;42209:17;42229:3;:11;;42241:9;42229:22;;;;;;;;:::i;:::-;;;;;;;;;;42209:42;;42383:9;42354:3;:11;;42366:13;42354:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;42494:10;42468:3;:12;;:23;42481:9;42468:23;;;;;;;;;;;:36;;;;42190:373;42158:405;42644:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42739:3;:12;;:19;42752:5;42739:19;;;;;;;;;;;42732:26;;;42782:4;42775:11;;;;;;;41667:1176;42826:5;42819:12;;;41430:1420;;;;;:::o;43614:120::-;43681:7;43708:3;:11;;43720:5;43708:18;;;;;;;;:::i;:::-;;;;;;;;;;43701:25;;43614:120;;;;:::o;42936:129::-;43009:4;43056:1;43033:3;:12;;:19;43046:5;43033:19;;;;;;;;;;;;:24;;43026:31;;42936:129;;;;:::o;18690:125::-;;;;:::o;19419:124::-;;;;:::o;25901:229::-;26038:12;26070:52;26092:6;26100:4;26106:1;26109:12;26070:21;:52::i;:::-;26063:59;;25901:229;;;;;:::o;27021:455::-;27191:12;27249:5;27224:21;:30;;27216:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27309:12;27323:23;27350:6;:11;;27369:5;27376:4;27350:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27308:73;;;;27399:69;27426:6;27434:7;27443:10;27455:12;27399:26;:69::i;:::-;27392:76;;;;27021:455;;;;;;:::o;29594:644::-;29779:12;29808:7;29804:427;;;29857:1;29836:10;:17;:22;29832:290;;30054:18;30065:6;30054:10;:18::i;:::-;30046:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29832:290;30143:10;30136:17;;;;29804:427;30186:33;30194:10;30206:12;30186:7;:33::i;:::-;29594:644;;;;;;;:::o;23144:326::-;23204:4;23461:1;23439:7;:19;;;:23;23432:30;;23144:326;;;:::o;30780:552::-;30961:1;30941:10;:17;:21;30937:388;;;31173:10;31167:17;31230:15;31217:10;31213:2;31209:19;31202:44;30937:388;31300:12;31293:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:77:1;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:222::-;4015:4;4053:2;4042:9;4038:18;4030:26;;4066:71;4134:1;4123:9;4119:17;4110:6;4066:71;:::i;:::-;3922:222;;;;:::o;4150:619::-;4227:6;4235;4243;4292:2;4280:9;4271:7;4267:23;4263:32;4260:119;;;4298:79;;:::i;:::-;4260:119;4418:1;4443:53;4488:7;4479:6;4468:9;4464:22;4443:53;:::i;:::-;4433:63;;4389:117;4545:2;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4516:118;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4150:619;;;;;:::o;4775:329::-;4834:6;4883:2;4871:9;4862:7;4858:23;4854:32;4851:119;;;4889:79;;:::i;:::-;4851:119;5009:1;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4980:117;4775:329;;;;:::o;5110:60::-;5138:3;5159:5;5152:12;;5110:60;;;:::o;5176:142::-;5226:9;5259:53;5277:34;5286:24;5304:5;5286:24;:::i;:::-;5277:34;:::i;:::-;5259:53;:::i;:::-;5246:66;;5176:142;;;:::o;5324:126::-;5374:9;5407:37;5438:5;5407:37;:::i;:::-;5394:50;;5324:126;;;:::o;5456:143::-;5523:9;5556:37;5587:5;5556:37;:::i;:::-;5543:50;;5456:143;;;:::o;5605:165::-;5709:54;5757:5;5709:54;:::i;:::-;5704:3;5697:67;5605:165;;:::o;5776:256::-;5886:4;5924:2;5913:9;5909:18;5901:26;;5937:88;6022:1;6011:9;6007:17;5998:6;5937:88;:::i;:::-;5776:256;;;;:::o;6038:86::-;6073:7;6113:4;6106:5;6102:16;6091:27;;6038:86;;;:::o;6130:112::-;6213:22;6229:5;6213:22;:::i;:::-;6208:3;6201:35;6130:112;;:::o;6248:214::-;6337:4;6375:2;6364:9;6360:18;6352:26;;6388:67;6452:1;6441:9;6437:17;6428:6;6388:67;:::i;:::-;6248:214;;;;:::o;6468:765::-;6554:6;6562;6570;6578;6627:3;6615:9;6606:7;6602:23;6598:33;6595:120;;;6634:79;;:::i;:::-;6595:120;6754:1;6779:53;6824:7;6815:6;6804:9;6800:22;6779:53;:::i;:::-;6769:63;;6725:117;6881:2;6907:53;6952:7;6943:6;6932:9;6928:22;6907:53;:::i;:::-;6897:63;;6852:118;7009:2;7035:53;7080:7;7071:6;7060:9;7056:22;7035:53;:::i;:::-;7025:63;;6980:118;7137:2;7163:53;7208:7;7199:6;7188:9;7184:22;7163:53;:::i;:::-;7153:63;;7108:118;6468:765;;;;;;;:::o;7239:157::-;7320:9;7353:37;7384:5;7353:37;:::i;:::-;7340:50;;7239:157;;;:::o;7402:193::-;7520:68;7582:5;7520:68;:::i;:::-;7515:3;7508:81;7402:193;;:::o;7601:284::-;7725:4;7763:2;7752:9;7748:18;7740:26;;7776:102;7875:1;7864:9;7860:17;7851:6;7776:102;:::i;:::-;7601:284;;;;:::o;7891:116::-;7961:21;7976:5;7961:21;:::i;:::-;7954:5;7951:32;7941:60;;7997:1;7994;7987:12;7941:60;7891:116;:::o;8013:133::-;8056:5;8094:6;8081:20;8072:29;;8110:30;8134:5;8110:30;:::i;:::-;8013:133;;;;:::o;8152:468::-;8217:6;8225;8274:2;8262:9;8253:7;8249:23;8245:32;8242:119;;;8280:79;;:::i;:::-;8242:119;8400:1;8425:53;8470:7;8461:6;8450:9;8446:22;8425:53;:::i;:::-;8415:63;;8371:117;8527:2;8553:50;8595:7;8586:6;8575:9;8571:22;8553:50;:::i;:::-;8543:60;;8498:115;8152:468;;;;;:::o;8626:139::-;8689:9;8722:37;8753:5;8722:37;:::i;:::-;8709:50;;8626:139;;;:::o;8771:157::-;8871:50;8915:5;8871:50;:::i;:::-;8866:3;8859:63;8771:157;;:::o;8934:248::-;9040:4;9078:2;9067:9;9063:18;9055:26;;9091:84;9172:1;9161:9;9157:17;9148:6;9091:84;:::i;:::-;8934:248;;;;:::o;9188:323::-;9244:6;9293:2;9281:9;9272:7;9268:23;9264:32;9261:119;;;9299:79;;:::i;:::-;9261:119;9419:1;9444:50;9486:7;9477:6;9466:9;9462:22;9444:50;:::i;:::-;9434:60;;9390:114;9188:323;;;;:::o;9517:474::-;9585:6;9593;9642:2;9630:9;9621:7;9617:23;9613:32;9610:119;;;9648:79;;:::i;:::-;9610:119;9768:1;9793:53;9838:7;9829:6;9818:9;9814:22;9793:53;:::i;:::-;9783:63;;9739:117;9895:2;9921:53;9966:7;9957:6;9946:9;9942:22;9921:53;:::i;:::-;9911:63;;9866:118;9517:474;;;;;:::o;9997:329::-;10056:6;10105:2;10093:9;10084:7;10080:23;10076:32;10073:119;;;10111:79;;:::i;:::-;10073:119;10231:1;10256:53;10301:7;10292:6;10281:9;10277:22;10256:53;:::i;:::-;10246:63;;10202:117;9997:329;;;;:::o;10332:166::-;10472:18;10468:1;10460:6;10456:14;10449:42;10332:166;:::o;10504:366::-;10646:3;10667:67;10731:2;10726:3;10667:67;:::i;:::-;10660:74;;10743:93;10832:3;10743:93;:::i;:::-;10861:2;10856:3;10852:12;10845:19;;10504:366;;;:::o;10876:419::-;11042:4;11080:2;11069:9;11065:18;11057:26;;11129:9;11123:4;11119:20;11115:1;11104:9;11100:17;11093:47;11157:131;11283:4;11157:131;:::i;:::-;11149:139;;10876:419;;;:::o;11301:180::-;11349:77;11346:1;11339:88;11446:4;11443:1;11436:15;11470:4;11467:1;11460:15;11487:320;11531:6;11568:1;11562:4;11558:12;11548:22;;11615:1;11609:4;11605:12;11636:18;11626:81;;11692:4;11684:6;11680:17;11670:27;;11626:81;11754:2;11746:6;11743:14;11723:18;11720:38;11717:84;;11773:18;;:::i;:::-;11717:84;11538:269;11487:320;;;:::o;11813:169::-;11953:21;11949:1;11941:6;11937:14;11930:45;11813:169;:::o;11988:366::-;12130:3;12151:67;12215:2;12210:3;12151:67;:::i;:::-;12144:74;;12227:93;12316:3;12227:93;:::i;:::-;12345:2;12340:3;12336:12;12329:19;;11988:366;;;:::o;12360:419::-;12526:4;12564:2;12553:9;12549:18;12541:26;;12613:9;12607:4;12603:20;12599:1;12588:9;12584:17;12577:47;12641:131;12767:4;12641:131;:::i;:::-;12633:139;;12360:419;;;:::o;12785:332::-;12906:4;12944:2;12933:9;12929:18;12921:26;;12957:71;13025:1;13014:9;13010:17;13001:6;12957:71;:::i;:::-;13038:72;13106:2;13095:9;13091:18;13082:6;13038:72;:::i;:::-;12785:332;;;;;:::o;13123:143::-;13180:5;13211:6;13205:13;13196:22;;13227:33;13254:5;13227:33;:::i;:::-;13123:143;;;;:::o;13272:351::-;13342:6;13391:2;13379:9;13370:7;13366:23;13362:32;13359:119;;;13397:79;;:::i;:::-;13359:119;13517:1;13542:64;13598:7;13589:6;13578:9;13574:22;13542:64;:::i;:::-;13532:74;;13488:128;13272:351;;;;:::o;13629:180::-;13677:77;13674:1;13667:88;13774:4;13771:1;13764:15;13798:4;13795:1;13788:15;13815:194;13855:4;13875:20;13893:1;13875:20;:::i;:::-;13870:25;;13909:20;13927:1;13909:20;:::i;:::-;13904:25;;13953:1;13950;13946:9;13938:17;;13977:1;13971:4;13968:11;13965:37;;;13982:18;;:::i;:::-;13965:37;13815:194;;;;:::o;14015:191::-;14055:3;14074:20;14092:1;14074:20;:::i;:::-;14069:25;;14108:20;14126:1;14108:20;:::i;:::-;14103:25;;14151:1;14148;14144:9;14137:16;;14172:3;14169:1;14166:10;14163:36;;;14179:18;;:::i;:::-;14163:36;14015:191;;;;:::o;14212:171::-;14352:23;14348:1;14340:6;14336:14;14329:47;14212:171;:::o;14389:366::-;14531:3;14552:67;14616:2;14611:3;14552:67;:::i;:::-;14545:74;;14628:93;14717:3;14628:93;:::i;:::-;14746:2;14741:3;14737:12;14730:19;;14389:366;;;:::o;14761:419::-;14927:4;14965:2;14954:9;14950:18;14942:26;;15014:9;15008:4;15004:20;15000:1;14989:9;14985:17;14978:47;15042:131;15168:4;15042:131;:::i;:::-;15034:139;;14761:419;;;:::o;15186:143::-;15243:5;15274:6;15268:13;15259:22;;15290:33;15317:5;15290:33;:::i;:::-;15186:143;;;;:::o;15335:351::-;15405:6;15454:2;15442:9;15433:7;15429:23;15425:32;15422:119;;;15460:79;;:::i;:::-;15422:119;15580:1;15605:64;15661:7;15652:6;15641:9;15637:22;15605:64;:::i;:::-;15595:74;;15551:128;15335:351;;;;:::o;15692:162::-;15832:14;15828:1;15820:6;15816:14;15809:38;15692:162;:::o;15860:366::-;16002:3;16023:67;16087:2;16082:3;16023:67;:::i;:::-;16016:74;;16099:93;16188:3;16099:93;:::i;:::-;16217:2;16212:3;16208:12;16201:19;;15860:366;;;:::o;16232:419::-;16398:4;16436:2;16425:9;16421:18;16413:26;;16485:9;16479:4;16475:20;16471:1;16460:9;16456:17;16449:47;16513:131;16639:4;16513:131;:::i;:::-;16505:139;;16232:419;;;:::o;16657:224::-;16797:34;16793:1;16785:6;16781:14;16774:58;16866:7;16861:2;16853:6;16849:15;16842:32;16657:224;:::o;16887:366::-;17029:3;17050:67;17114:2;17109:3;17050:67;:::i;:::-;17043:74;;17126:93;17215:3;17126:93;:::i;:::-;17244:2;17239:3;17235:12;17228:19;;16887:366;;;:::o;17259:419::-;17425:4;17463:2;17452:9;17448:18;17440:26;;17512:9;17506:4;17502:20;17498:1;17487:9;17483:17;17476:47;17540:131;17666:4;17540:131;:::i;:::-;17532:139;;17259:419;;;:::o;17684:174::-;17824:26;17820:1;17812:6;17808:14;17801:50;17684:174;:::o;17864:366::-;18006:3;18027:67;18091:2;18086:3;18027:67;:::i;:::-;18020:74;;18103:93;18192:3;18103:93;:::i;:::-;18221:2;18216:3;18212:12;18205:19;;17864:366;;;:::o;18236:419::-;18402:4;18440:2;18429:9;18425:18;18417:26;;18489:9;18483:4;18479:20;18475:1;18464:9;18460:17;18453:47;18517:131;18643:4;18517:131;:::i;:::-;18509:139;;18236:419;;;:::o;18661:181::-;18801:33;18797:1;18789:6;18785:14;18778:57;18661:181;:::o;18848:366::-;18990:3;19011:67;19075:2;19070:3;19011:67;:::i;:::-;19004:74;;19087:93;19176:3;19087:93;:::i;:::-;19205:2;19200:3;19196:12;19189:19;;18848:366;;;:::o;19220:419::-;19386:4;19424:2;19413:9;19409:18;19401:26;;19473:9;19467:4;19463:20;19459:1;19448:9;19444:17;19437:47;19501:131;19627:4;19501:131;:::i;:::-;19493:139;;19220:419;;;:::o;19645:169::-;19785:21;19781:1;19773:6;19769:14;19762:45;19645:169;:::o;19820:366::-;19962:3;19983:67;20047:2;20042:3;19983:67;:::i;:::-;19976:74;;20059:93;20148:3;20059:93;:::i;:::-;20177:2;20172:3;20168:12;20161:19;;19820:366;;;:::o;20192:419::-;20358:4;20396:2;20385:9;20381:18;20373:26;;20445:9;20439:4;20435:20;20431:1;20420:9;20416:17;20409:47;20473:131;20599:4;20473:131;:::i;:::-;20465:139;;20192:419;;;:::o;20617:180::-;20665:77;20662:1;20655:88;20762:4;20759:1;20752:15;20786:4;20783:1;20776:15;20803:98;20854:6;20888:5;20882:12;20872:22;;20803:98;;;:::o;20907:147::-;21008:11;21045:3;21030:18;;20907:147;;;;:::o;21060:386::-;21164:3;21192:38;21224:5;21192:38;:::i;:::-;21246:88;21327:6;21322:3;21246:88;:::i;:::-;21239:95;;21343:65;21401:6;21396:3;21389:4;21382:5;21378:16;21343:65;:::i;:::-;21433:6;21428:3;21424:16;21417:23;;21168:278;21060:386;;;;:::o;21452:271::-;21582:3;21604:93;21693:3;21684:6;21604:93;:::i;:::-;21597:100;;21714:3;21707:10;;21452:271;;;;:::o;21729:169::-;21869:21;21865:1;21857:6;21853:14;21846:45;21729:169;:::o;21904:366::-;22046:3;22067:67;22131:2;22126:3;22067:67;:::i;:::-;22060:74;;22143:93;22232:3;22143:93;:::i;:::-;22261:2;22256:3;22252:12;22245:19;;21904:366;;;:::o;22276:419::-;22442:4;22480:2;22469:9;22465:18;22457:26;;22529:9;22523:4;22519:20;22515:1;22504:9;22500:17;22493:47;22557:131;22683:4;22557:131;:::i;:::-;22549:139;;22276:419;;;:::o;22701:225::-;22841:34;22837:1;22829:6;22825:14;22818:58;22910:8;22905:2;22897:6;22893:15;22886:33;22701:225;:::o;22932:366::-;23074:3;23095:67;23159:2;23154:3;23095:67;:::i;:::-;23088:74;;23171:93;23260:3;23171:93;:::i;:::-;23289:2;23284:3;23280:12;23273:19;;22932:366;;;:::o;23304:419::-;23470:4;23508:2;23497:9;23493:18;23485:26;;23557:9;23551:4;23547:20;23543:1;23532:9;23528:17;23521:47;23585:131;23711:4;23585:131;:::i;:::-;23577:139;;23304:419;;;:::o;23729:182::-;23869:34;23865:1;23857:6;23853:14;23846:58;23729:182;:::o;23917:366::-;24059:3;24080:67;24144:2;24139:3;24080:67;:::i;:::-;24073:74;;24156:93;24245:3;24156:93;:::i;:::-;24274:2;24269:3;24265:12;24258:19;;23917:366;;;:::o;24289:419::-;24455:4;24493:2;24482:9;24478:18;24470:26;;24542:9;24536:4;24532:20;24528:1;24517:9;24513:17;24506:47;24570:131;24696:4;24570:131;:::i;:::-;24562:139;;24289:419;;;:::o;24714:223::-;24854:34;24850:1;24842:6;24838:14;24831:58;24923:6;24918:2;24910:6;24906:15;24899:31;24714:223;:::o;24943:366::-;25085:3;25106:67;25170:2;25165:3;25106:67;:::i;:::-;25099:74;;25182:93;25271:3;25182:93;:::i;:::-;25300:2;25295:3;25291:12;25284:19;;24943:366;;;:::o;25315:419::-;25481:4;25519:2;25508:9;25504:18;25496:26;;25568:9;25562:4;25558:20;25554:1;25543:9;25539:17;25532:47;25596:131;25722:4;25596:131;:::i;:::-;25588:139;;25315:419;;;:::o;25740:221::-;25880:34;25876:1;25868:6;25864:14;25857:58;25949:4;25944:2;25936:6;25932:15;25925:29;25740:221;:::o;25967:366::-;26109:3;26130:67;26194:2;26189:3;26130:67;:::i;:::-;26123:74;;26206:93;26295:3;26206:93;:::i;:::-;26324:2;26319:3;26315:12;26308:19;;25967:366;;;:::o;26339:419::-;26505:4;26543:2;26532:9;26528:18;26520:26;;26592:9;26586:4;26582:20;26578:1;26567:9;26563:17;26556:47;26620:131;26746:4;26620:131;:::i;:::-;26612:139;;26339:419;;;:::o;26764:179::-;26904:31;26900:1;26892:6;26888:14;26881:55;26764:179;:::o;26949:366::-;27091:3;27112:67;27176:2;27171:3;27112:67;:::i;:::-;27105:74;;27188:93;27277:3;27188:93;:::i;:::-;27306:2;27301:3;27297:12;27290:19;;26949:366;;;:::o;27321:419::-;27487:4;27525:2;27514:9;27510:18;27502:26;;27574:9;27568:4;27564:20;27560:1;27549:9;27545:17;27538:47;27602:131;27728:4;27602:131;:::i;:::-;27594:139;;27321:419;;;:::o;27746:176::-;27886:28;27882:1;27874:6;27870:14;27863:52;27746:176;:::o;27928:366::-;28070:3;28091:67;28155:2;28150:3;28091:67;:::i;:::-;28084:74;;28167:93;28256:3;28167:93;:::i;:::-;28285:2;28280:3;28276:12;28269:19;;27928:366;;;:::o;28300:419::-;28466:4;28504:2;28493:9;28489:18;28481:26;;28553:9;28547:4;28543:20;28539:1;28528:9;28524:17;28517:47;28581:131;28707:4;28581:131;:::i;:::-;28573:139;;28300:419;;;:::o;28725:307::-;28865:34;28861:1;28853:6;28849:14;28842:58;28934:34;28929:2;28921:6;28917:15;28910:59;29003:21;28998:2;28990:6;28986:15;28979:46;28725:307;:::o;29038:366::-;29180:3;29201:67;29265:2;29260:3;29201:67;:::i;:::-;29194:74;;29277:93;29366:3;29277:93;:::i;:::-;29395:2;29390:3;29386:12;29379:19;;29038:366;;;:::o;29410:419::-;29576:4;29614:2;29603:9;29599:18;29591:26;;29663:9;29657:4;29653:20;29649:1;29638:9;29634:17;29627:47;29691:131;29817:4;29691:131;:::i;:::-;29683:139;;29410:419;;;:::o;29835:332::-;29956:4;29994:2;29983:9;29979:18;29971:26;;30007:71;30075:1;30064:9;30060:17;30051:6;30007:71;:::i;:::-;30088:72;30156:2;30145:9;30141:18;30132:6;30088:72;:::i;:::-;29835:332;;;;;:::o;30173:775::-;30406:4;30444:3;30433:9;30429:19;30421:27;;30458:71;30526:1;30515:9;30511:17;30502:6;30458:71;:::i;:::-;30539:72;30607:2;30596:9;30592:18;30583:6;30539:72;:::i;:::-;30621;30689:2;30678:9;30674:18;30665:6;30621:72;:::i;:::-;30703;30771:2;30760:9;30756:18;30747:6;30703:72;:::i;:::-;30785:73;30853:3;30842:9;30838:19;30829:6;30785:73;:::i;:::-;30868;30936:3;30925:9;30921:19;30912:6;30868:73;:::i;:::-;30173:775;;;;;;;;;:::o;30954:410::-;30994:7;31017:20;31035:1;31017:20;:::i;:::-;31012:25;;31051:20;31069:1;31051:20;:::i;:::-;31046:25;;31106:1;31103;31099:9;31128:30;31146:11;31128:30;:::i;:::-;31117:41;;31307:1;31298:7;31294:15;31291:1;31288:22;31268:1;31261:9;31241:83;31218:139;;31337:18;;:::i;:::-;31218:139;31002:362;30954:410;;;;:::o;31370:180::-;31418:77;31415:1;31408:88;31515:4;31512:1;31505:15;31539:4;31536:1;31529:15;31556:185;31596:1;31613:20;31631:1;31613:20;:::i;:::-;31608:25;;31647:20;31665:1;31647:20;:::i;:::-;31642:25;;31686:1;31676:35;;31691:18;;:::i;:::-;31676:35;31733:1;31730;31726:9;31721:14;;31556:185;;;;:::o;31747:180::-;31795:77;31792:1;31785:88;31892:4;31889:1;31882:15;31916:4;31913:1;31906:15;31933:85;31978:7;32007:5;31996:16;;31933:85;;;:::o;32024:158::-;32082:9;32115:61;32133:42;32142:32;32168:5;32142:32;:::i;:::-;32133:42;:::i;:::-;32115:61;:::i;:::-;32102:74;;32024:158;;;:::o;32188:147::-;32283:45;32322:5;32283:45;:::i;:::-;32278:3;32271:58;32188:147;;:::o;32341:114::-;32408:6;32442:5;32436:12;32426:22;;32341:114;;;:::o;32461:184::-;32560:11;32594:6;32589:3;32582:19;32634:4;32629:3;32625:14;32610:29;;32461:184;;;;:::o;32651:132::-;32718:4;32741:3;32733:11;;32771:4;32766:3;32762:14;32754:22;;32651:132;;;:::o;32789:108::-;32866:24;32884:5;32866:24;:::i;:::-;32861:3;32854:37;32789:108;;:::o;32903:179::-;32972:10;32993:46;33035:3;33027:6;32993:46;:::i;:::-;33071:4;33066:3;33062:14;33048:28;;32903:179;;;;:::o;33088:113::-;33158:4;33190;33185:3;33181:14;33173:22;;33088:113;;;:::o;33237:732::-;33356:3;33385:54;33433:5;33385:54;:::i;:::-;33455:86;33534:6;33529:3;33455:86;:::i;:::-;33448:93;;33565:56;33615:5;33565:56;:::i;:::-;33644:7;33675:1;33660:284;33685:6;33682:1;33679:13;33660:284;;;33761:6;33755:13;33788:63;33847:3;33832:13;33788:63;:::i;:::-;33781:70;;33874:60;33927:6;33874:60;:::i;:::-;33864:70;;33720:224;33707:1;33704;33700:9;33695:14;;33660:284;;;33664:14;33960:3;33953:10;;33361:608;;;33237:732;;;;:::o;33975:942::-;34266:4;34304:3;34293:9;34289:19;34281:27;;34318:71;34386:1;34375:9;34371:17;34362:6;34318:71;:::i;:::-;34399:80;34475:2;34464:9;34460:18;34451:6;34399:80;:::i;:::-;34526:9;34520:4;34516:20;34511:2;34500:9;34496:18;34489:48;34554:108;34657:4;34648:6;34554:108;:::i;:::-;34546:116;;34672:72;34740:2;34729:9;34725:18;34716:6;34672:72;:::i;:::-;34754:73;34822:3;34811:9;34807:19;34798:6;34754:73;:::i;:::-;34837;34905:3;34894:9;34890:19;34881:6;34837:73;:::i;:::-;33975:942;;;;;;;;;:::o;34923:137::-;34977:5;35008:6;35002:13;34993:22;;35024:30;35048:5;35024:30;:::i;:::-;34923:137;;;;:::o;35066:345::-;35133:6;35182:2;35170:9;35161:7;35157:23;35153:32;35150:119;;;35188:79;;:::i;:::-;35150:119;35308:1;35333:61;35386:7;35377:6;35366:9;35362:22;35333:61;:::i;:::-;35323:71;;35279:125;35066:345;;;;:::o;35417:775::-;35650:4;35688:3;35677:9;35673:19;35665:27;;35702:71;35770:1;35759:9;35755:17;35746:6;35702:71;:::i;:::-;35783:72;35851:2;35840:9;35836:18;35827:6;35783:72;:::i;:::-;35865;35933:2;35922:9;35918:18;35909:6;35865:72;:::i;:::-;35947;36015:2;36004:9;36000:18;35991:6;35947:72;:::i;:::-;36029:73;36097:3;36086:9;36082:19;36073:6;36029:73;:::i;:::-;36112;36180:3;36169:9;36165:19;36156:6;36112:73;:::i;:::-;35417:775;;;;;;;;;:::o;36198:224::-;36338:34;36334:1;36326:6;36322:14;36315:58;36407:7;36402:2;36394:6;36390:15;36383:32;36198:224;:::o;36428:366::-;36570:3;36591:67;36655:2;36650:3;36591:67;:::i;:::-;36584:74;;36667:93;36756:3;36667:93;:::i;:::-;36785:2;36780:3;36776:12;36769:19;;36428:366;;;:::o;36800:419::-;36966:4;37004:2;36993:9;36989:18;36981:26;;37053:9;37047:4;37043:20;37039:1;37028:9;37024:17;37017:47;37081:131;37207:4;37081:131;:::i;:::-;37073:139;;36800:419;;;:::o;37225:222::-;37365:34;37361:1;37353:6;37349:14;37342:58;37434:5;37429:2;37421:6;37417:15;37410:30;37225:222;:::o;37453:366::-;37595:3;37616:67;37680:2;37675:3;37616:67;:::i;:::-;37609:74;;37692:93;37781:3;37692:93;:::i;:::-;37810:2;37805:3;37801:12;37794:19;;37453:366;;;:::o;37825:419::-;37991:4;38029:2;38018:9;38014:18;38006:26;;38078:9;38072:4;38068:20;38064:1;38053:9;38049:17;38042:47;38106:131;38232:4;38106:131;:::i;:::-;38098:139;;37825:419;;;:::o;38250:225::-;38390:34;38386:1;38378:6;38374:14;38367:58;38459:8;38454:2;38446:6;38442:15;38435:33;38250:225;:::o;38481:366::-;38623:3;38644:67;38708:2;38703:3;38644:67;:::i;:::-;38637:74;;38720:93;38809:3;38720:93;:::i;:::-;38838:2;38833:3;38829:12;38822:19;;38481:366;;;:::o;38853:419::-;39019:4;39057:2;39046:9;39042:18;39034:26;;39106:9;39100:4;39096:20;39092:1;39081:9;39077:17;39070:47;39134:131;39260:4;39134:131;:::i;:::-;39126:139;;38853:419;;;:::o;39278:229::-;39418:34;39414:1;39406:6;39402:14;39395:58;39487:12;39482:2;39474:6;39470:15;39463:37;39278:229;:::o;39513:366::-;39655:3;39676:67;39740:2;39735:3;39676:67;:::i;:::-;39669:74;;39752:93;39841:3;39752:93;:::i;:::-;39870:2;39865:3;39861:12;39854:19;;39513:366;;;:::o;39885:419::-;40051:4;40089:2;40078:9;40074:18;40066:26;;40138:9;40132:4;40128:20;40124:1;40113:9;40109:17;40102:47;40166:131;40292:4;40166:131;:::i;:::-;40158:139;;39885:419;;;:::o;40310:442::-;40459:4;40497:2;40486:9;40482:18;40474:26;;40510:71;40578:1;40567:9;40563:17;40554:6;40510:71;:::i;:::-;40591:72;40659:2;40648:9;40644:18;40635:6;40591:72;:::i;:::-;40673;40741:2;40730:9;40726:18;40717:6;40673:72;:::i;:::-;40310:442;;;;;;:::o;40758:831::-;41021:4;41059:3;41048:9;41044:19;41036:27;;41073:79;41149:1;41138:9;41134:17;41125:6;41073:79;:::i;:::-;41199:9;41193:4;41189:20;41184:2;41173:9;41169:18;41162:48;41227:108;41330:4;41321:6;41227:108;:::i;:::-;41219:116;;41345:72;41413:2;41402:9;41398:18;41389:6;41345:72;:::i;:::-;41427;41495:2;41484:9;41480:18;41471:6;41427:72;:::i;:::-;41509:73;41577:3;41566:9;41562:19;41553:6;41509:73;:::i;:::-;40758:831;;;;;;;;:::o;41595:332::-;41716:4;41754:2;41743:9;41739:18;41731:26;;41767:71;41835:1;41824:9;41820:17;41811:6;41767:71;:::i;:::-;41848:72;41916:2;41905:9;41901:18;41892:6;41848:72;:::i;:::-;41595:332;;;;;:::o;41933:180::-;41981:77;41978:1;41971:88;42078:4;42075:1;42068:15;42102:4;42099:1;42092:15;42119:225;42259:34;42255:1;42247:6;42243:14;42236:58;42328:8;42323:2;42315:6;42311:15;42304:33;42119:225;:::o;42350:366::-;42492:3;42513:67;42577:2;42572:3;42513:67;:::i;:::-;42506:74;;42589:93;42678:3;42589:93;:::i;:::-;42707:2;42702:3;42698:12;42691:19;;42350:366;;;:::o;42722:419::-;42888:4;42926:2;42915:9;42911:18;42903:26;;42975:9;42969:4;42965:20;42961:1;42950:9;42946:17;42939:47;43003:131;43129:4;43003:131;:::i;:::-;42995:139;;42722:419;;;:::o;43147:179::-;43287:31;43283:1;43275:6;43271:14;43264:55;43147:179;:::o;43332:366::-;43474:3;43495:67;43559:2;43554:3;43495:67;:::i;:::-;43488:74;;43571:93;43660:3;43571:93;:::i;:::-;43689:2;43684:3;43680:12;43673:19;;43332:366;;;:::o;43704:419::-;43870:4;43908:2;43897:9;43893:18;43885:26;;43957:9;43951:4;43947:20;43943:1;43932:9;43928:17;43921:47;43985:131;44111:4;43985:131;:::i;:::-;43977:139;;43704:419;;;:::o
Metadata Hash
0d1c04dc19fea49b385949ce08414b4d0aebf5d03426fdb99d08960b40c3a2fa
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.