Latest 25 from a total of 944 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 24318889 | 3 days ago | IN | 0 ETH | 0.00000491 | ||||
| Approve | 24294046 | 7 days ago | IN | 0 ETH | 0.00009618 | ||||
| Approve | 24270255 | 10 days ago | IN | 0 ETH | 0.00001406 | ||||
| Approve | 24262848 | 11 days ago | IN | 0 ETH | 0.00000533 | ||||
| Transfer | 24262813 | 11 days ago | IN | 0 ETH | 0.00000827 | ||||
| Transfer | 24260424 | 11 days ago | IN | 0 ETH | 0.0000759 | ||||
| Approve | 24260320 | 11 days ago | IN | 0 ETH | 0.00009538 | ||||
| Transfer | 24247279 | 13 days ago | IN | 0 ETH | 0.00014993 | ||||
| Approve | 24232591 | 15 days ago | IN | 0 ETH | 0.00009848 | ||||
| Approve | 24229490 | 16 days ago | IN | 0 ETH | 0.00009614 | ||||
| Approve | 24209212 | 18 days ago | IN | 0 ETH | 0.00014334 | ||||
| Transfer | 24205518 | 19 days ago | IN | 0 ETH | 0.00014952 | ||||
| Approve | 24203605 | 19 days ago | IN | 0 ETH | 0.00000245 | ||||
| Transfer | 24203312 | 19 days ago | IN | 0 ETH | 0.00037774 | ||||
| Approve | 24200436 | 20 days ago | IN | 0 ETH | 0.00009583 | ||||
| Approve | 24199024 | 20 days ago | IN | 0 ETH | 0.00000678 | ||||
| Approve | 24197899 | 20 days ago | IN | 0 ETH | 0.00001297 | ||||
| Approve | 24193499 | 21 days ago | IN | 0 ETH | 0.00000806 | ||||
| Approve | 24189689 | 21 days ago | IN | 0 ETH | 0.00023896 | ||||
| Approve | 24184630 | 22 days ago | IN | 0 ETH | 0.0000093 | ||||
| Transfer | 24184612 | 22 days ago | IN | 0 ETH | 0.00001411 | ||||
| Approve | 24184543 | 22 days ago | IN | 0 ETH | 0.00000716 | ||||
| Transfer | 24184473 | 22 days ago | IN | 0 ETH | 0.00001402 | ||||
| Approve | 24184313 | 22 days ago | IN | 0 ETH | 0.00001442 | ||||
| Approve | 24183956 | 22 days ago | IN | 0 ETH | 0.00002738 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24295707 | 6 days ago | 0.04331214 ETH | ||||
| Transfer | 24295707 | 6 days ago | 0.04331214 ETH | ||||
| Transfer | 24234961 | 15 days ago | 0.04801189 ETH | ||||
| Transfer | 24234961 | 15 days ago | 0.04801189 ETH | ||||
| Transfer | 24232608 | 15 days ago | 0.04863607 ETH | ||||
| Transfer | 24232608 | 15 days ago | 0.04863607 ETH | ||||
| Transfer | 24213340 | 18 days ago | 0.08277354 ETH | ||||
| Transfer | 24213340 | 18 days ago | 0.08277354 ETH | ||||
| Transfer | 24203312 | 19 days ago | 0.05322111 ETH | ||||
| Transfer | 24203312 | 19 days ago | 0.05322111 ETH | ||||
| Transfer | 24188067 | 21 days ago | 0.06432244 ETH | ||||
| Transfer | 24188067 | 21 days ago | 0.06432244 ETH | ||||
| Transfer | 24184544 | 22 days ago | 0.12257492 ETH | ||||
| Transfer | 24184544 | 22 days ago | 0.12257492 ETH | ||||
| Transfer | 24184316 | 22 days ago | 0.06482438 ETH | ||||
| Transfer | 24184316 | 22 days ago | 0.06482438 ETH | ||||
| Transfer | 24183862 | 22 days ago | 0.0737581 ETH | ||||
| Transfer | 24183862 | 22 days ago | 0.0737581 ETH | ||||
| Transfer | 24167989 | 24 days ago | 0.06035602 ETH | ||||
| Transfer | 24167989 | 24 days ago | 0.06035602 ETH | ||||
| Transfer | 24125102 | 30 days ago | 0.07102717 ETH | ||||
| Transfer | 24125102 | 30 days ago | 0.07102717 ETH | ||||
| Transfer | 23990362 | 49 days ago | 0.07123145 ETH | ||||
| Transfer | 23990362 | 49 days ago | 0.07123145 ETH | ||||
| Transfer | 23957787 | 53 days ago | 0.07644755 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
QuickSync
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2025-07-07 */ // Sources flattened with hardhat v2.25.0 https://hardhat.org // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File @openzeppelin/contracts/access/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _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/access/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol) pragma solidity ^0.8.20; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This extension of the {Ownable} contract includes a two-step mechanism to transfer * ownership, where the new owner must call {acceptOwnership} in order to replace the * old one. This can help prevent common mistakes, such as transfers of ownership to * incorrect accounts, or to contracts that are unable to interact with the * permission system. * * The initial owner is specified at deployment time in the constructor for `Ownable`. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. * * Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); if (pendingOwner() != sender) { revert OwnableUnauthorizedAccount(sender); } _transferOwnership(sender); } } // File @openzeppelin/contracts/interfaces/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC-20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC-721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC-1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } // File @openzeppelin/contracts/token/ERC20/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ 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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; /** * @dev Interface for the optional metadata functions from the ERC-20 standard. */ 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/token/ERC20/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.20; /** * @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}. * * 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]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * 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 ERC-20 * applications. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * Both 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 returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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 default value returned by this function, unless * it's 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 returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual 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 `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` 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 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Skips emitting an {Approval} event indicating an allowance update. This is not * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. * * 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 `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` 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. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` 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. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * * ```solidity * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner`'s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance < type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] 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 swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.6.2; interface IUniswapV2Router02 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, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File contracts/QuickSync.sol // Original license: SPDX_License_Identifier: MIT pragma solidity 0.8.28; /* ************************************************** * ___ _ _ ____ * * / _ \ _ _(_) ___| | _/ ___| _ _ _ __ ___ * *| | | | | | | |/ __| |/ |___ \| | | | '_ \ / __|* *| |_| | |_| | | (__| < ___) | |_| | | | | (__ * * \__\_\\__,_|_|\___|_|\_\____/ \__, |_| |_|\___|* * |___/ * ************************************************** QuickSync */ /// QuickSync is an ERC20 token contract QuickSync is ERC20, Ownable2Step { /// custom errors error CannotRemoveMainPair(); error ZeroAddressNotAllowed(); error FeesLimitExceeds(); error CannotBlacklistLPPair(); error UpdateBoolValue(); error CannotClaimNativeToken(); error AmountTooLow(); error OnlyOwnerOrMarketingWallet(); error BlacklistedUser(); error EthTransferFailed(); /// @notice Max limit on Buy / Sell fees uint256 public constant MAX_FEE_LIMIT = 10; /// @notice max total supply 100 million tokens (18 decimals) uint256 private maxSupply = 100_000_000 * 1e18; /// @notice swap threshold at which collected fees tokens are swapped for ether, autoLP uint256 public swapTokensAtAmount = 100_000 * 1e18; /// @notice check if it's a swap tx bool private inSwap = false; /// @notice struct buy fees variable /// marketing: marketing fees /// autoLP: liquidity fees struct BuyFees { uint16 marketing; uint16 autoLP; } /// @notice struct sell fees variable /// marketing: marketing fees /// autoLP: liquidity fees struct SellFees { uint16 marketing; uint16 autoLP; } /// @notice buyFees variable BuyFees public buyFee; /// @notice sellFees variable SellFees public sellFee; ///@notice number of txns uint256 private txCounter; /// @notice totalBuyFees uint256 private totalBuyFee; /// @notice totalSellFees uint256 private totalSellFee; /// @notice tax mode bool private normalMode; /// @notice marketingWallet address public marketingWallet; /// @notice uniswap V2 router address IUniswapV2Router02 public immutable uniswapV2Router; /// @notice uniswap V2 Pair address address public uniswapV2Pair; /// @notice mapping to manager liquidity pairs mapping(address => bool) public isAutomatedMarketMaker; /// @notice mapping to manage excluded address from/to fees mapping(address => bool) public isExcludedFromFees; /// @notice mapping to manage blacklist mapping(address => bool) public isBlacklisted; //// EVENTS //// event BuyFeesUpdated( uint16 indexed marketingFee, uint16 indexed liquidityFee ); event SellFeesUpdated( uint16 indexed marketingFee, uint16 indexed liquidityFee ); event FeesSwapped( uint256 indexed ethForLiquidity, uint256 indexed tokensForLiquidity, uint256 indexed ethForMarketing ); /// @dev create an erc20 token using openzeppeling ERC20, Ownable2Step /// uses uniswap router and factory interface /// set uniswap router, create pair, initialize buy, sell fees, marketingWallet values /// excludes the token, marketingWallet and owner address from fees /// and mint all the supply to owner wallet. constructor() ERC20("QuickSync", "QS") Ownable(msg.sender) { uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); isAutomatedMarketMaker[uniswapV2Pair] = true; /// normal trade values after antisnipe period buyFee.marketing = 5; buyFee.autoLP = 0; totalBuyFee = 5; sellFee.marketing = 5; sellFee.autoLP = 0; totalSellFee = 5; marketingWallet = address(0x3A9430aad6563aE273D7E6449deB755f3B9Dbc76); isExcludedFromFees[address(this)] = true; isExcludedFromFees[marketingWallet] = true; isExcludedFromFees[owner()] = true; _mint(msg.sender, maxSupply); } /// modifier /// modifier lockTheSwap() { inSwap = true; _; inSwap = false; } /// receive external ether receive() external payable {} /// @dev owner can claim other erc20 tokens, if accidently sent by someone /// @param _token: token address to be rescued /// @param _amount: amount to rescued /// Requirements -- /// Cannot claim native token function claimOtherERC20(address _token, uint256 _amount) external { if (msg.sender != marketingWallet && msg.sender != owner()) { revert OnlyOwnerOrMarketingWallet(); } if (_token == address(this)) { revert CannotClaimNativeToken(); } // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = _token.call( abi.encodeWithSelector(0xa9059cbb, msg.sender, _amount) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeTransfer: transfer failed" ); } /// @dev owner can claim eth, if accidently sent by someone /// @param mktWallet: address to which eth will be rescued /// Requirements- /// only owner or marketing wallet can call this function function claimETH(address mktWallet) external { if (msg.sender != marketingWallet && msg.sender != owner()) { revert OnlyOwnerOrMarketingWallet(); } (bool sent, ) = mktWallet.call{value: address(this).balance}(""); require(sent, EthTransferFailed()); } /// @dev exclude or include a user from/to fees /// @param user: user address /// @param value: boolean value. true means excluded. false means included /// Requirements -- /// zero address not allowed /// if a user is excluded already, can't exlude him again function excludeFromFees(address user, bool value) external onlyOwner { if (user == address(0)) { revert ZeroAddressNotAllowed(); } if (isExcludedFromFees[user] == value) { revert UpdateBoolValue(); } isExcludedFromFees[user] = value; } /// @dev exclude or include a user from/to blacklist /// @param user: user address /// @param value: boolean value. true means blacklisted. false means unblacklisted /// Requirements -- /// zero address not allowed /// if a user is blacklisted already, can't blacklist him again function blacklist(address user, bool value) external onlyOwner { if (user == address(0)) { revert ZeroAddressNotAllowed(); } if (isBlacklisted[user] == value) { revert UpdateBoolValue(); } isBlacklisted[user] = value; } /// @dev add or remove new pairs /// @param _newPair: address to be added or removed as pair /// @param value: boolean value, true means pair is added, false means pair is removed /// Requirements -- /// address should not be zero /// Can not remove main pair /// can not add already added pairs and vice versa function manageLiquidityPairs( address _newPair, bool value ) external onlyOwner { if (_newPair == address(0)) { revert ZeroAddressNotAllowed(); } if (_newPair == uniswapV2Pair) { revert CannotRemoveMainPair(); } if (isAutomatedMarketMaker[_newPair] == value) { revert UpdateBoolValue(); } isAutomatedMarketMaker[_newPair] = value; } /// update marketing wallet address function updateMarketingWallet( address _newMarketingWallet ) external onlyOwner { if (_newMarketingWallet == address(0)) { revert ZeroAddressNotAllowed(); } marketingWallet = _newMarketingWallet; } /// @dev update swap tokens at amount threshold /// @param amount: new threshold amount function updateSwapTokensAtAmount(uint256 amount) external onlyOwner { swapTokensAtAmount = amount * 1e18; } /// @dev update buy fees /// @param _marketing: marketing fees /// @param _autoLP: liquidity fees /// Requirements -- /// total Buy fees must be less than equals to MAX_FEE_LIMIT (10%); function updateBuyFees( uint16 _marketing, uint16 _autoLP ) external onlyOwner { if (_marketing + _autoLP > MAX_FEE_LIMIT) { revert FeesLimitExceeds(); } buyFee.marketing = _marketing; buyFee.autoLP = _autoLP; totalBuyFee = _marketing + _autoLP; emit BuyFeesUpdated(_marketing, _autoLP); } /// @dev update sell fees /// @param _marketing: marketing fees /// @param _autoLP: liquidity fees /// Requirements -- /// total Sell fees must be less than equals to MAX_FEE_LIMIT (10%); function updateSellFees( uint16 _marketing, uint16 _autoLP ) external onlyOwner { if (_marketing + _autoLP > MAX_FEE_LIMIT) { revert FeesLimitExceeds(); } sellFee.marketing = _marketing; sellFee.autoLP = _autoLP; totalSellFee = _marketing + _autoLP; emit SellFeesUpdated(_marketing, _autoLP); } /// @dev switch to normal tax instantly function switchToNormalTax() external onlyOwner { normalMode = true; } /// @notice manage transfers, fees /// see {ERC20 - _update} function _update( address from, address to, uint256 amount ) internal override { if (isBlacklisted[from] || isBlacklisted[to]) { revert BlacklistedUser(); } if (amount == 0) { super._transfer(from, to, 0); return; } uint256 contractBalance = balanceOf(address(this)); bool canSwapped = contractBalance >= swapTokensAtAmount; if ( canSwapped && !isAutomatedMarketMaker[from] && !inSwap && !isExcludedFromFees[from] && !isExcludedFromFees[to] ) { swapAndLiquify(contractBalance); } bool takeFee = true; if (isExcludedFromFees[from] || isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; /// intial transfer fee /// get transfer tax based on transfer txn count, /// only for first 30 transfers (i.e any transfer) uint256 transferTax = calculateTransferTax(); uint256 totalTax = 0; if (takeFee) { txCounter++; if (isAutomatedMarketMaker[from] && totalBuyFee > 0) { uint256 buyTax = calculateBuyTax(); totalTax = transferTax + buyTax; fees = (amount * totalTax) / 100; } else if (isAutomatedMarketMaker[to] && totalSellFee > 0) { uint256 sellTax = calculateSellTax(); totalTax = transferTax + sellTax; fees = (amount * totalTax) / 100; } else { fees = (amount * transferTax) / 100; } if (fees > 0) { super._update(from, address(this), fees); amount = amount - fees; } } super._update(from, to, amount); } /// @notice swap the collected fees to eth / add liquidity /// after conversion, it sends eth to marketing wallet, add auto liquidity /// @param tokenAmount: tokens to be swapped appropriately as per fee structure function swapAndLiquify(uint256 tokenAmount) private lockTheSwap { if (totalBuyFee + totalSellFee == 0) { swapTokensForEth(tokenAmount); bool m; (m, ) = marketingWallet.call{value: address(this).balance}( "" ); } else { uint256 marketingTokens = ((buyFee.marketing + sellFee.marketing) * tokenAmount) / (totalBuyFee + totalSellFee); uint256 liquidityTokens = tokenAmount - marketingTokens; uint256 liquidityTokensHalf = liquidityTokens / 2; uint256 swapTokens = tokenAmount - liquidityTokensHalf; uint256 ethBalanceBeforeSwap = address(this).balance; swapTokensForEth(swapTokens); uint256 ethBalanceAfterSwap = address(this).balance - ethBalanceBeforeSwap; uint256 ethForLiquidity = (liquidityTokensHalf * ethBalanceAfterSwap) / swapTokens; if (ethForLiquidity > 0 && liquidityTokensHalf > 0) { addLiquidity(liquidityTokensHalf, ethForLiquidity); } bool success; uint256 marketingEth = address(this).balance; if (marketingEth > 0) { (success, ) = marketingWallet.call{ value: marketingEth }(""); } emit FeesSwapped( ethForLiquidity, liquidityTokensHalf, marketingEth ); } } /// @notice manages tokens conversion to eth /// @param tokenAmount: tokens to be converted to eth function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); if (allowance(address(this), address(uniswapV2Router)) < tokenAmount) { _approve( address(this), address(uniswapV2Router), type(uint256).max ); } // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } /// @notice manage autoLP (liquidity addition) /// @param tokenAmount: tokens to be added to liquidity /// @param ethAmount: eth to be added to liquidity function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), // LP tokens recevier block.timestamp ); } /// @notice convert all or some percentage of collected tax to eth /// @param percentage: percentage of collected tax to swap function manualSwap(uint256 percentage) external lockTheSwap { if (msg.sender != marketingWallet && msg.sender != owner()) { revert OnlyOwnerOrMarketingWallet(); } uint256 tokens = balanceOf(address(this)); uint256 amount = (tokens * percentage) / 100; swapTokensForEth(amount); uint256 ethAmount = address(this).balance; bool success; (success, ) = payable(marketingWallet).call{value: ethAmount}(""); } /// calculate Buy tax based on the txns after initial launch function calculateBuyTax() internal view returns (uint256) { if (normalMode) { return totalBuyFee; } else { if (txCounter <= 10) { return 25; } else if (txCounter <= 20) { return 20; } else if (txCounter <= 25) { return 15; } else if (txCounter <= 30) { return 10; } else { return totalBuyFee; } } } /// calculate sell tax based on the txns after initial launch function calculateSellTax() internal view returns (uint256) { if (normalMode) { return totalSellFee; } else { if (txCounter <= 10) { return 25; } else if (txCounter <= 20) { return 20; } else if (txCounter <= 25) { return 15; } else if (txCounter <= 30) { return 10; } else { return totalSellFee; } } } /// calculate transfer tax based on the txns after initial launch function calculateTransferTax() internal view returns (uint256) { if (normalMode) { return 0; } else { if (txCounter <= 10) { return 15; } else if (txCounter <= 30) { return 10; } else { return 0; } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AmountTooLow","type":"error"},{"inputs":[],"name":"BlacklistedUser","type":"error"},{"inputs":[],"name":"CannotBlacklistLPPair","type":"error"},{"inputs":[],"name":"CannotClaimNativeToken","type":"error"},{"inputs":[],"name":"CannotRemoveMainPair","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"EthTransferFailed","type":"error"},{"inputs":[],"name":"FeesLimitExceeds","type":"error"},{"inputs":[],"name":"OnlyOwnerOrMarketingWallet","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"UpdateBoolValue","type":"error"},{"inputs":[],"name":"ZeroAddressNotAllowed","type":"error"},{"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":true,"internalType":"uint16","name":"marketingFee","type":"uint16"},{"indexed":true,"internalType":"uint16","name":"liquidityFee","type":"uint16"}],"name":"BuyFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ethForLiquidity","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ethForMarketing","type":"uint256"}],"name":"FeesSwapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"marketingFee","type":"uint16"},{"indexed":true,"internalType":"uint16","name":"liquidityFee","type":"uint16"}],"name":"SellFeesUpdated","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":"MAX_FEE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"autoLP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mktWallet","type":"address"}],"name":"claimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"claimOtherERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAutomatedMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newPair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"manageLiquidityPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"autoLP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switchToNormalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_marketing","type":"uint16"},{"internalType":"uint16","name":"_autoLP","type":"uint16"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_marketing","type":"uint16"},{"internalType":"uint16","name":"_autoLP","type":"uint16"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a06040526a52b7d2dcc80cd2e400000060075569152d02c7e14af68000006008555f60095f6101000a81548160ff021916908315150217905550348015610045575f5ffd5b50336040518060400160405280600981526020017f517569636b53796e6300000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f515300000000000000000000000000000000000000000000000000000000000081525081600390816100c29190611aa4565b5080600490816100d29190611aa4565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610145575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161013c9190611bb2565b60405180910390fd5b610154816105cf60201b60201c565b50737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020c9190611bf9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610273573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102979190611bf9565b6040518363ffffffff1660e01b81526004016102b4929190611c24565b6020604051808303815f875af11580156102d0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f49190611bf9565b60105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160115f60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506005600a5f015f6101000a81548161ffff021916908361ffff1602179055505f600a5f0160026101000a81548161ffff021916908361ffff1602179055506005600d819055506005600b5f015f6101000a81548161ffff021916908361ffff1602179055505f600b5f0160026101000a81548161ffff021916908361ffff1602179055506005600e81905550733a9430aad6563ae273d7e6449deb755f3b9dbc76600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160125f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f61056961060560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506105ca3360075461062d60201b60201c565b6120f1565b60065f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055610602816106b260201b60201c565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361069d575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106949190611bb2565b60405180910390fd5b6106ae5f838361077560201b60201c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610810575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15610847576040517fd9a60d2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81036108645761085f83835f610c1d60201b60201c565b610c18565b5f61087430610d1360201b60201c565b90505f60085482101590508080156108d3575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156108eb575060095f9054906101000a900460ff16155b801561093e575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610991575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156109a6576109a582610d5860201b60201c565b5b5f6001905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610a46575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15610a4f575f90505b5f5f90505f610a62610fff60201b60201c565b90505f5f90508315610c0057600c5f815480929190610a8090611c78565b919050555060115f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015610adc57505f600d54115b15610b20575f610af061104960201b60201c565b90508083610afe9190611cbf565b915060648289610b0e9190611cf2565b610b189190611d60565b935050610bd7565b60115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015610b7757505f600e54115b15610bbb575f610b8b6110bd60201b60201c565b90508083610b999190611cbf565b915060648289610ba99190611cf2565b610bb39190611d60565b935050610bd6565b60648288610bc99190611cf2565b610bd39190611d60565b92505b5b5f831115610bff57610bf089308561113160201b60201c565b8287610bfc9190611d90565b96505b5b610c1189898961113160201b60201c565b5050505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c8d575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610c849190611bb2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cfd575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610cf49190611bb2565b60405180910390fd5b610d0e83838361077560201b60201c565b505050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600160095f6101000a81548160ff0219169083151502179055505f600e54600d54610d839190611cbf565b03610e2957610d978161134a60201b60201c565b5f600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610dde90611df0565b5f6040518083038185875af1925050503d805f8114610e18576040519150601f19603f3d011682016040523d82523d5f602084013e610e1d565b606091505b50508091505050610fe3565b5f600e54600d54610e3a9190611cbf565b82600b5f015f9054906101000a900461ffff16600a5f015f9054906101000a900461ffff16610e699190611e11565b61ffff16610e779190611cf2565b610e819190611d60565b90505f8183610e909190611d90565b90505f600282610ea09190611d60565b90505f8185610eaf9190611d90565b90505f479050610ec48261134a60201b60201c565b5f8147610ed19190611d90565b90505f838286610ee19190611cf2565b610eeb9190611d60565b90505f81118015610efb57505f85115b15610f1157610f10858261156360201b60201c565b5b5f5f4790505f811115610faa57600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051610f6490611df0565b5f6040518083038185875af1925050503d805f8114610f9e576040519150601f19603f3d011682016040523d82523d5f602084013e610fa3565b606091505b5050809250505b8087847ff8cfc1c15ead481ffc3a2df6126e88c84a6730799e332fcfe2dbc386373d517160405160405180910390a45050505050505050505b5f60095f6101000a81548160ff02191690831515021790555050565b5f600f5f9054906101000a900460ff161561101c575f9050611046565b600a600c541161102f57600f9050611046565b601e600c541161104257600a9050611046565b5f90505b90565b5f600f5f9054906101000a900460ff161561106857600d5490506110ba565b600a600c541161107b57601990506110ba565b6014600c541161108e57601490506110ba565b6019600c54116110a157600f90506110ba565b601e600c54116110b457600a90506110ba565b600d5490505b90565b5f600f5f9054906101000a900460ff16156110dc57600e54905061112e565b600a600c54116110ef576019905061112e565b6014600c5411611102576014905061112e565b6019600c541161111557600f905061112e565b601e600c541161112857600a905061112e565b600e5490505b90565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611181578060025f8282546111759190611cbf565b9250508190555061124f565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561120a578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161120193929190611e55565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611296578060025f82825403925050819055506112e0565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161133d9190611e8a565b60405180910390a3505050565b5f600267ffffffffffffffff81111561136657611365611871565b5b6040519080825280602002602001820160405280156113945781602001602082028036833780820191505090505b50905030815f815181106113ab576113aa611ea3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611430573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114549190611bf9565b8160018151811061146857611467611ea3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816114b5306080516115fe60201b60201c565b10156114ef576114ee306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61168060201b60201c565b5b60805173ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611532959493929190611fc0565b5f604051808303815f87803b158015611549575f5ffd5b505af115801561155b573d5f5f3e3d5ffd5b505050505050565b60805173ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f61159461060560201b60201c565b426040518863ffffffff1660e01b81526004016115b696959493929190612018565b60606040518083038185885af11580156115d2573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115f791906120a1565b5050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611693838383600161169860201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611708575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016116ff9190611bb2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611778575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161176f9190611bb2565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611861578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516118589190611e8a565b60405180910390a35b50505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806118e257607f821691505b6020821081036118f5576118f461189e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026119577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261191c565b611961868361191c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6119a56119a061199b84611979565b611982565b611979565b9050919050565b5f819050919050565b6119be8361198b565b6119d26119ca826119ac565b848454611928565b825550505050565b5f5f905090565b6119e96119da565b6119f48184846119b5565b505050565b5b81811015611a1757611a0c5f826119e1565b6001810190506119fa565b5050565b601f821115611a5c57611a2d816118fb565b611a368461190d565b81016020851015611a45578190505b611a59611a518561190d565b8301826119f9565b50505b505050565b5f82821c905092915050565b5f611a7c5f1984600802611a61565b1980831691505092915050565b5f611a948383611a6d565b9150826002028217905092915050565b611aad82611867565b67ffffffffffffffff811115611ac657611ac5611871565b5b611ad082546118cb565b611adb828285611a1b565b5f60209050601f831160018114611b0c575f8415611afa578287015190505b611b048582611a89565b865550611b6b565b601f198416611b1a866118fb565b5f5b82811015611b4157848901518255600182019150602085019450602081019050611b1c565b86831015611b5e5784890151611b5a601f891682611a6d565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611b9c82611b73565b9050919050565b611bac81611b92565b82525050565b5f602082019050611bc55f830184611ba3565b92915050565b5f5ffd5b611bd881611b92565b8114611be2575f5ffd5b50565b5f81519050611bf381611bcf565b92915050565b5f60208284031215611c0e57611c0d611bcb565b5b5f611c1b84828501611be5565b91505092915050565b5f604082019050611c375f830185611ba3565b611c446020830184611ba3565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c8282611979565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611cb457611cb3611c4b565b5b600182019050919050565b5f611cc982611979565b9150611cd483611979565b9250828201905080821115611cec57611ceb611c4b565b5b92915050565b5f611cfc82611979565b9150611d0783611979565b9250828202611d1581611979565b91508282048414831517611d2c57611d2b611c4b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611d6a82611979565b9150611d7583611979565b925082611d8557611d84611d33565b5b828204905092915050565b5f611d9a82611979565b9150611da583611979565b9250828203905081811115611dbd57611dbc611c4b565b5b92915050565b5f81905092915050565b50565b5f611ddb5f83611dc3565b9150611de682611dcd565b5f82019050919050565b5f611dfa82611dd0565b9150819050919050565b5f61ffff82169050919050565b5f611e1b82611e04565b9150611e2683611e04565b9250828201905061ffff811115611e4057611e3f611c4b565b5b92915050565b611e4f81611979565b82525050565b5f606082019050611e685f830186611ba3565b611e756020830185611e46565b611e826040830184611e46565b949350505050565b5f602082019050611e9d5f830184611e46565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f611ef3611eee611ee984611ed0565b611982565b611979565b9050919050565b611f0381611ed9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611f3b81611b92565b82525050565b5f611f4c8383611f32565b60208301905092915050565b5f602082019050919050565b5f611f6e82611f09565b611f788185611f13565b9350611f8383611f23565b805f5b83811015611fb3578151611f9a8882611f41565b9750611fa583611f58565b925050600181019050611f86565b5085935050505092915050565b5f60a082019050611fd35f830188611e46565b611fe06020830187611efa565b8181036040830152611ff28186611f64565b90506120016060830185611ba3565b61200e6080830184611e46565b9695505050505050565b5f60c08201905061202b5f830189611ba3565b6120386020830188611e46565b6120456040830187611efa565b6120526060830186611efa565b61205f6080830185611ba3565b61206c60a0830184611e46565b979650505050505050565b61208081611979565b811461208a575f5ffd5b50565b5f8151905061209b81612077565b92915050565b5f5f5f606084860312156120b8576120b7611bcb565b5b5f6120c58682870161208d565b93505060206120d68682870161208d565b92505060406120e78682870161208d565b9150509250925092565b60805161377a61212c5f395f81816109a301528181611cd601528181611db601528181611de601528181611e2e0152612baa015261377a5ff3fe608060405260043610610207575f3560e01c80637e66c0b911610117578063b384f7641161009f578063dd62ed3e1161006e578063dd62ed3e1461071c578063e2f4560514610758578063e30c397814610782578063f2fde38b146107ac578063fe575a87146107d45761020e565b8063b384f7641461067c578063b70143c9146106a4578063c0246668146106cc578063d257b34f146106f45761020e565b80638da5cb5b116100e65780638da5cb5b1461059a57806395d89b41146105c45780639edc5f0f146105ee578063a9059cbb14610618578063aacebbe3146106545761020e565b80637e66c0b9146104f85780638428841714610520578063858e4a021461055c57806389d5c72b146105845761020e565b8063404e51291161019a5780634fbee193116101695780634fbee1931461042a57806370a0823114610466578063715018a6146104a257806375f0a874146104b857806379ba5097146104e25761020e565b8063404e51291461038557806347062402146103ad57806349bd5a5e146103d85780634eed4bd5146104025761020e565b806318160ddd116101d657806318160ddd146102ca57806323b872dd146102f45780632b14ca5614610330578063313ce5671461035b5761020e565b8063039bed0b1461021257806306fdde031461023a578063095ea7b3146102645780631694505e146102a05761020e565b3661020e57005b5f5ffd5b34801561021d575f5ffd5b5061023860048036038101906102339190612c96565b610810565b005b348015610245575f5ffd5b5061024e6108ef565b60405161025b9190612d44565b60405180910390f35b34801561026f575f5ffd5b5061028a60048036038101906102859190612df1565b61097f565b6040516102979190612e49565b60405180910390f35b3480156102ab575f5ffd5b506102b46109a1565b6040516102c19190612ebd565b60405180910390f35b3480156102d5575f5ffd5b506102de6109c5565b6040516102eb9190612ee5565b60405180910390f35b3480156102ff575f5ffd5b5061031a60048036038101906103159190612efe565b6109ce565b6040516103279190612e49565b60405180910390f35b34801561033b575f5ffd5b506103446109fc565b604051610352929190612f5d565b60405180910390f35b348015610366575f5ffd5b5061036f610a27565b60405161037c9190612f9f565b60405180910390f35b348015610390575f5ffd5b506103ab60048036038101906103a69190612fe2565b610a2f565b005b3480156103b8575f5ffd5b506103c1610b7a565b6040516103cf929190612f5d565b60405180910390f35b3480156103e3575f5ffd5b506103ec610ba5565b6040516103f9919061302f565b60405180910390f35b34801561040d575f5ffd5b5061042860048036038101906104239190612df1565b610bca565b005b348015610435575f5ffd5b50610450600480360381019061044b9190613048565b610e26565b60405161045d9190612e49565b60405180910390f35b348015610471575f5ffd5b5061048c60048036038101906104879190613048565b610e43565b6040516104999190612ee5565b60405180910390f35b3480156104ad575f5ffd5b506104b6610e88565b005b3480156104c3575f5ffd5b506104cc610e9b565b6040516104d9919061302f565b60405180910390f35b3480156104ed575f5ffd5b506104f6610ec1565b005b348015610503575f5ffd5b5061051e60048036038101906105199190613048565b610f4f565b005b34801561052b575f5ffd5b5061054660048036038101906105419190613048565b6110ba565b6040516105539190612e49565b60405180910390f35b348015610567575f5ffd5b50610582600480360381019061057d9190612c96565b6110d7565b005b34801561058f575f5ffd5b506105986111b6565b005b3480156105a5575f5ffd5b506105ae6111da565b6040516105bb919061302f565b60405180910390f35b3480156105cf575f5ffd5b506105d8611202565b6040516105e59190612d44565b60405180910390f35b3480156105f9575f5ffd5b50610602611292565b60405161060f9190612ee5565b60405180910390f35b348015610623575f5ffd5b5061063e60048036038101906106399190612df1565b611297565b60405161064b9190612e49565b60405180910390f35b34801561065f575f5ffd5b5061067a60048036038101906106759190613048565b6112b9565b005b348015610687575f5ffd5b506106a2600480360381019061069d9190612fe2565b61136a565b005b3480156106af575f5ffd5b506106ca60048036038101906106c59190613073565b61153b565b005b3480156106d7575f5ffd5b506106f260048036038101906106ed9190612fe2565b6116fd565b005b3480156106ff575f5ffd5b5061071a60048036038101906107159190613073565b611848565b005b348015610727575f5ffd5b50610742600480360381019061073d919061309e565b61186d565b60405161074f9190612ee5565b60405180910390f35b348015610763575f5ffd5b5061076c6118ef565b6040516107799190612ee5565b60405180910390f35b34801561078d575f5ffd5b506107966118f5565b6040516107a3919061302f565b60405180910390f35b3480156107b7575f5ffd5b506107d260048036038101906107cd9190613048565b61191d565b005b3480156107df575f5ffd5b506107fa60048036038101906107f59190613048565b6119c9565b6040516108079190612e49565b60405180910390f35b6108186119e6565b600a81836108269190613109565b61ffff161115610862576040517fe298135000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600a5f015f6101000a81548161ffff021916908361ffff16021790555080600a5f0160026101000a81548161ffff021916908361ffff16021790555080826108ab9190613109565b61ffff16600d819055508061ffff168261ffff167fc8f6ebed6f64bd25f0aed0b6507ae982cddfd23874ad542be24905c9412a4a1660405160405180910390a35050565b6060600380546108fe9061316b565b80601f016020809104026020016040519081016040528092919081815260200182805461092a9061316b565b80156109755780601f1061094c57610100808354040283529160200191610975565b820191905f5260205f20905b81548152906001019060200180831161095857829003601f168201915b5050505050905090565b5f5f610989611a6d565b9050610996818585611a74565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f5f6109d8611a6d565b90506109e5858285611a86565b6109f0858585611b19565b60019150509392505050565b600b805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b5f6012905090565b610a376119e6565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a9c576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610b22576040517fc7f2b1ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600a805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610c5b5750610c2b6111da565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610c92576040517ffbc5dd9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cf7576040517fe9cceb3600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3385604051602401610d2892919061319b565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610d769190613206565b5f604051808303815f865af19150503d805f8114610daf576040519150601f19603f3d011682016040523d82523d5f602084013e610db4565b606091505b5091509150818015610de157505f81511480610de0575080806020019051810190610ddf9190613230565b5b5b610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e17906132cb565b60405180910390fd5b50505050565b6012602052805f5260405f205f915054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e906119e6565b610e995f611c09565b565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610eca611a6d565b90508073ffffffffffffffffffffffffffffffffffffffff16610eeb6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614610f4357806040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f3a919061302f565b60405180910390fd5b610f4c81611c09565b50565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610fe05750610fb06111da565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611017576040517ffbc5dd9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff164760405161103c9061330c565b5f6040518083038185875af1925050503d805f8114611076576040519150601f19603f3d011682016040523d82523d5f602084013e61107b565b606091505b50509050806110b6576040517f6d963f8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b6011602052805f5260405f205f915054906101000a900460ff1681565b6110df6119e6565b600a81836110ed9190613109565b61ffff161115611129576040517fe298135000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600b5f015f6101000a81548161ffff021916908361ffff16021790555080600b5f0160026101000a81548161ffff021916908361ffff16021790555080826111729190613109565b61ffff16600e819055508061ffff168261ffff167f52357d2b6ee817f5d57183c13530148906a8ec8b5be2fc82da16afbd8a04507260405160405180910390a35050565b6111be6119e6565b6001600f5f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112119061316b565b80601f016020809104026020016040519081016040528092919081815260200182805461123d9061316b565b80156112885780601f1061125f57610100808354040283529160200191611288565b820191905f5260205f20905b81548152906001019060200180831161126b57829003601f168201915b5050505050905090565b600a81565b5f5f6112a1611a6d565b90506112ae818585611b19565b600191505092915050565b6112c16119e6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611326576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113726119e6565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d7576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361145d576040517f02e4f4c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036114e3576040517fc7f2b1ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600160095f6101000a81548160ff021916908315150217905550600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156115e657506115b66111da565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561161d576040517ffbc5dd9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61162730610e43565b90505f606483836116389190613320565b611642919061338e565b905061164d81611c39565b5f4790505f600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516116989061330c565b5f6040518083038185875af1925050503d805f81146116d2576040519150601f19603f3d011682016040523d82523d5f602084013e6116d7565b606091505b505080915050505050505f60095f6101000a81548160ff02191690831515021790555050565b6117056119e6565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361176a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80151560125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036117f0576040517fc7f2b1ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6118506119e6565b670de0b6b3a7640000816118649190613320565b60088190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119256119e6565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166119846111da565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6013602052805f5260405f205f915054906101000a900460ff1681565b6119ee611a6d565b73ffffffffffffffffffffffffffffffffffffffff16611a0c6111da565b73ffffffffffffffffffffffffffffffffffffffff1614611a6b57611a2f611a6d565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611a62919061302f565b60405180910390fd5b565b5f33905090565b611a818383836001611ebe565b505050565b5f611a91848461186d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015611b135781811015611b04578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611afb939291906133be565b60405180910390fd5b611b1284848484035f611ebe565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b89575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611b80919061302f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf9575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611bf0919061302f565b60405180910390fd5b611c0483838361208d565b505050565b60065f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055611c3681612505565b50565b5f600267ffffffffffffffff811115611c5557611c546133f3565b5b604051908082528060200260200182016040528015611c835781602001602082028036833780820191505090505b50905030815f81518110611c9a57611c99613420565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d619190613461565b81600181518110611d7557611d74613420565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081611dda307f000000000000000000000000000000000000000000000000000000000000000061186d565b1015611e2c57611e2b307f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a74565b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611e8d95949392919061357c565b5f604051808303815f87803b158015611ea4575f5ffd5b505af1158015611eb6573d5f5f3e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f2e575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611f25919061302f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f9e575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611f95919061302f565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015612087578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161207e9190612ee5565b60405180910390a35b50505050565b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612128575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561215f576040517fd9a60d2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81036121765761217183835f611b19565b612500565b5f61218030610e43565b90505f60085482101590508080156121df575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156121f7575060095f9054906101000a900460ff16155b801561224a575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561229d575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122ac576122ab826125c8565b5b5f6001905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061234c575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612355575f90505b5f5f90505f61236261285d565b90505f5f905083156124ee57600c5f815480929190612380906135d4565b919050555060115f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123dc57505f600d54115b1561241a575f6123ea6128a7565b905080836123f8919061361b565b9150606482896124089190613320565b612412919061338e565b9350506124cb565b60115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561247157505f600e54115b156124af575f61247f61291b565b9050808361248d919061361b565b91506064828961249d9190613320565b6124a7919061338e565b9350506124ca565b606482886124bd9190613320565b6124c7919061338e565b92505b5b5f8311156124ed576124de89308561298f565b82876124ea919061364e565b96505b5b6124f989898961298f565b5050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600160095f6101000a81548160ff0219169083151502179055505f600e54600d546125f3919061361b565b036126935761260181611c39565b5f600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516126489061330c565b5f6040518083038185875af1925050503d805f8114612682576040519150601f19603f3d011682016040523d82523d5f602084013e612687565b606091505b50508091505050612841565b5f600e54600d546126a4919061361b565b82600b5f015f9054906101000a900461ffff16600a5f015f9054906101000a900461ffff166126d39190613109565b61ffff166126e19190613320565b6126eb919061338e565b90505f81836126fa919061364e565b90505f60028261270a919061338e565b90505f8185612719919061364e565b90505f47905061272882611c39565b5f8147612735919061364e565b90505f8382866127459190613320565b61274f919061338e565b90505f8111801561275f57505f85115b1561276f5761276e8582612ba8565b5b5f5f4790505f81111561280857600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516127c29061330c565b5f6040518083038185875af1925050503d805f81146127fc576040519150601f19603f3d011682016040523d82523d5f602084013e612801565b606091505b5050809250505b8087847ff8cfc1c15ead481ffc3a2df6126e88c84a6730799e332fcfe2dbc386373d517160405160405180910390a45050505050505050505b5f60095f6101000a81548160ff02191690831515021790555050565b5f600f5f9054906101000a900460ff161561287a575f90506128a4565b600a600c541161288d57600f90506128a4565b601e600c54116128a057600a90506128a4565b5f90505b90565b5f600f5f9054906101000a900460ff16156128c657600d549050612918565b600a600c54116128d95760199050612918565b6014600c54116128ec5760149050612918565b6019600c54116128ff57600f9050612918565b601e600c541161291257600a9050612918565b600d5490505b90565b5f600f5f9054906101000a900460ff161561293a57600e54905061298c565b600a600c541161294d576019905061298c565b6014600c5411612960576014905061298c565b6019600c541161297357600f905061298c565b601e600c541161298657600a905061298c565b600e5490505b90565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129df578060025f8282546129d3919061361b565b92505081905550612aad565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612a68578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612a5f939291906133be565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af4578060025f8282540392505081905550612b3e565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b9b9190612ee5565b60405180910390a3505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f612bf16111da565b426040518863ffffffff1660e01b8152600401612c1396959493929190613681565b60606040518083038185885af1158015612c2f573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612c5491906136f4565b5050505050565b5f5ffd5b5f61ffff82169050919050565b612c7581612c5f565b8114612c7f575f5ffd5b50565b5f81359050612c9081612c6c565b92915050565b5f5f60408385031215612cac57612cab612c5b565b5b5f612cb985828601612c82565b9250506020612cca85828601612c82565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d1682612cd4565b612d208185612cde565b9350612d30818560208601612cee565b612d3981612cfc565b840191505092915050565b5f6020820190508181035f830152612d5c8184612d0c565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d8d82612d64565b9050919050565b612d9d81612d83565b8114612da7575f5ffd5b50565b5f81359050612db881612d94565b92915050565b5f819050919050565b612dd081612dbe565b8114612dda575f5ffd5b50565b5f81359050612deb81612dc7565b92915050565b5f5f60408385031215612e0757612e06612c5b565b5b5f612e1485828601612daa565b9250506020612e2585828601612ddd565b9150509250929050565b5f8115159050919050565b612e4381612e2f565b82525050565b5f602082019050612e5c5f830184612e3a565b92915050565b5f819050919050565b5f612e85612e80612e7b84612d64565b612e62565b612d64565b9050919050565b5f612e9682612e6b565b9050919050565b5f612ea782612e8c565b9050919050565b612eb781612e9d565b82525050565b5f602082019050612ed05f830184612eae565b92915050565b612edf81612dbe565b82525050565b5f602082019050612ef85f830184612ed6565b92915050565b5f5f5f60608486031215612f1557612f14612c5b565b5b5f612f2286828701612daa565b9350506020612f3386828701612daa565b9250506040612f4486828701612ddd565b9150509250925092565b612f5781612c5f565b82525050565b5f604082019050612f705f830185612f4e565b612f7d6020830184612f4e565b9392505050565b5f60ff82169050919050565b612f9981612f84565b82525050565b5f602082019050612fb25f830184612f90565b92915050565b612fc181612e2f565b8114612fcb575f5ffd5b50565b5f81359050612fdc81612fb8565b92915050565b5f5f60408385031215612ff857612ff7612c5b565b5b5f61300585828601612daa565b925050602061301685828601612fce565b9150509250929050565b61302981612d83565b82525050565b5f6020820190506130425f830184613020565b92915050565b5f6020828403121561305d5761305c612c5b565b5b5f61306a84828501612daa565b91505092915050565b5f6020828403121561308857613087612c5b565b5b5f61309584828501612ddd565b91505092915050565b5f5f604083850312156130b4576130b3612c5b565b5b5f6130c185828601612daa565b92505060206130d285828601612daa565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61311382612c5f565b915061311e83612c5f565b9250828201905061ffff811115613138576131376130dc565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061318257607f821691505b6020821081036131955761319461313e565b5b50919050565b5f6040820190506131ae5f830185613020565b6131bb6020830184612ed6565b9392505050565b5f81519050919050565b5f81905092915050565b5f6131e0826131c2565b6131ea81856131cc565b93506131fa818560208601612cee565b80840191505092915050565b5f61321182846131d6565b915081905092915050565b5f8151905061322a81612fb8565b92915050565b5f6020828403121561324557613244612c5b565b5b5f6132528482850161321c565b91505092915050565b7f5472616e7366657248656c7065723a3a736166655472616e736665723a2074725f8201527f616e73666572206661696c656400000000000000000000000000000000000000602082015250565b5f6132b5602d83612cde565b91506132c08261325b565b604082019050919050565b5f6020820190508181035f8301526132e2816132a9565b9050919050565b50565b5f6132f75f836131cc565b9150613302826132e9565b5f82019050919050565b5f613316826132ec565b9150819050919050565b5f61332a82612dbe565b915061333583612dbe565b925082820261334381612dbe565b9150828204841483151761335a576133596130dc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61339882612dbe565b91506133a383612dbe565b9250826133b3576133b2613361565b5b828204905092915050565b5f6060820190506133d15f830186613020565b6133de6020830185612ed6565b6133eb6040830184612ed6565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061345b81612d94565b92915050565b5f6020828403121561347657613475612c5b565b5b5f6134838482850161344d565b91505092915050565b5f819050919050565b5f6134af6134aa6134a58461348c565b612e62565b612dbe565b9050919050565b6134bf81613495565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6134f781612d83565b82525050565b5f61350883836134ee565b60208301905092915050565b5f602082019050919050565b5f61352a826134c5565b61353481856134cf565b935061353f836134df565b805f5b8381101561356f57815161355688826134fd565b975061356183613514565b925050600181019050613542565b5085935050505092915050565b5f60a08201905061358f5f830188612ed6565b61359c60208301876134b6565b81810360408301526135ae8186613520565b90506135bd6060830185613020565b6135ca6080830184612ed6565b9695505050505050565b5f6135de82612dbe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136105761360f6130dc565b5b600182019050919050565b5f61362582612dbe565b915061363083612dbe565b9250828201905080821115613648576136476130dc565b5b92915050565b5f61365882612dbe565b915061366383612dbe565b925082820390508181111561367b5761367a6130dc565b5b92915050565b5f60c0820190506136945f830189613020565b6136a16020830188612ed6565b6136ae60408301876134b6565b6136bb60608301866134b6565b6136c86080830185613020565b6136d560a0830184612ed6565b979650505050505050565b5f815190506136ee81612dc7565b92915050565b5f5f5f6060848603121561370b5761370a612c5b565b5b5f613718868287016136e0565b9350506020613729868287016136e0565b925050604061373a868287016136e0565b915050925092509256fea264697066735822122087b0ff77f3edc336dbd125ebaaafb56663837dd29efd4da79ed69f50bc68d9f864736f6c634300081c0033
Deployed Bytecode
0x608060405260043610610207575f3560e01c80637e66c0b911610117578063b384f7641161009f578063dd62ed3e1161006e578063dd62ed3e1461071c578063e2f4560514610758578063e30c397814610782578063f2fde38b146107ac578063fe575a87146107d45761020e565b8063b384f7641461067c578063b70143c9146106a4578063c0246668146106cc578063d257b34f146106f45761020e565b80638da5cb5b116100e65780638da5cb5b1461059a57806395d89b41146105c45780639edc5f0f146105ee578063a9059cbb14610618578063aacebbe3146106545761020e565b80637e66c0b9146104f85780638428841714610520578063858e4a021461055c57806389d5c72b146105845761020e565b8063404e51291161019a5780634fbee193116101695780634fbee1931461042a57806370a0823114610466578063715018a6146104a257806375f0a874146104b857806379ba5097146104e25761020e565b8063404e51291461038557806347062402146103ad57806349bd5a5e146103d85780634eed4bd5146104025761020e565b806318160ddd116101d657806318160ddd146102ca57806323b872dd146102f45780632b14ca5614610330578063313ce5671461035b5761020e565b8063039bed0b1461021257806306fdde031461023a578063095ea7b3146102645780631694505e146102a05761020e565b3661020e57005b5f5ffd5b34801561021d575f5ffd5b5061023860048036038101906102339190612c96565b610810565b005b348015610245575f5ffd5b5061024e6108ef565b60405161025b9190612d44565b60405180910390f35b34801561026f575f5ffd5b5061028a60048036038101906102859190612df1565b61097f565b6040516102979190612e49565b60405180910390f35b3480156102ab575f5ffd5b506102b46109a1565b6040516102c19190612ebd565b60405180910390f35b3480156102d5575f5ffd5b506102de6109c5565b6040516102eb9190612ee5565b60405180910390f35b3480156102ff575f5ffd5b5061031a60048036038101906103159190612efe565b6109ce565b6040516103279190612e49565b60405180910390f35b34801561033b575f5ffd5b506103446109fc565b604051610352929190612f5d565b60405180910390f35b348015610366575f5ffd5b5061036f610a27565b60405161037c9190612f9f565b60405180910390f35b348015610390575f5ffd5b506103ab60048036038101906103a69190612fe2565b610a2f565b005b3480156103b8575f5ffd5b506103c1610b7a565b6040516103cf929190612f5d565b60405180910390f35b3480156103e3575f5ffd5b506103ec610ba5565b6040516103f9919061302f565b60405180910390f35b34801561040d575f5ffd5b5061042860048036038101906104239190612df1565b610bca565b005b348015610435575f5ffd5b50610450600480360381019061044b9190613048565b610e26565b60405161045d9190612e49565b60405180910390f35b348015610471575f5ffd5b5061048c60048036038101906104879190613048565b610e43565b6040516104999190612ee5565b60405180910390f35b3480156104ad575f5ffd5b506104b6610e88565b005b3480156104c3575f5ffd5b506104cc610e9b565b6040516104d9919061302f565b60405180910390f35b3480156104ed575f5ffd5b506104f6610ec1565b005b348015610503575f5ffd5b5061051e60048036038101906105199190613048565b610f4f565b005b34801561052b575f5ffd5b5061054660048036038101906105419190613048565b6110ba565b6040516105539190612e49565b60405180910390f35b348015610567575f5ffd5b50610582600480360381019061057d9190612c96565b6110d7565b005b34801561058f575f5ffd5b506105986111b6565b005b3480156105a5575f5ffd5b506105ae6111da565b6040516105bb919061302f565b60405180910390f35b3480156105cf575f5ffd5b506105d8611202565b6040516105e59190612d44565b60405180910390f35b3480156105f9575f5ffd5b50610602611292565b60405161060f9190612ee5565b60405180910390f35b348015610623575f5ffd5b5061063e60048036038101906106399190612df1565b611297565b60405161064b9190612e49565b60405180910390f35b34801561065f575f5ffd5b5061067a60048036038101906106759190613048565b6112b9565b005b348015610687575f5ffd5b506106a2600480360381019061069d9190612fe2565b61136a565b005b3480156106af575f5ffd5b506106ca60048036038101906106c59190613073565b61153b565b005b3480156106d7575f5ffd5b506106f260048036038101906106ed9190612fe2565b6116fd565b005b3480156106ff575f5ffd5b5061071a60048036038101906107159190613073565b611848565b005b348015610727575f5ffd5b50610742600480360381019061073d919061309e565b61186d565b60405161074f9190612ee5565b60405180910390f35b348015610763575f5ffd5b5061076c6118ef565b6040516107799190612ee5565b60405180910390f35b34801561078d575f5ffd5b506107966118f5565b6040516107a3919061302f565b60405180910390f35b3480156107b7575f5ffd5b506107d260048036038101906107cd9190613048565b61191d565b005b3480156107df575f5ffd5b506107fa60048036038101906107f59190613048565b6119c9565b6040516108079190612e49565b60405180910390f35b6108186119e6565b600a81836108269190613109565b61ffff161115610862576040517fe298135000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600a5f015f6101000a81548161ffff021916908361ffff16021790555080600a5f0160026101000a81548161ffff021916908361ffff16021790555080826108ab9190613109565b61ffff16600d819055508061ffff168261ffff167fc8f6ebed6f64bd25f0aed0b6507ae982cddfd23874ad542be24905c9412a4a1660405160405180910390a35050565b6060600380546108fe9061316b565b80601f016020809104026020016040519081016040528092919081815260200182805461092a9061316b565b80156109755780601f1061094c57610100808354040283529160200191610975565b820191905f5260205f20905b81548152906001019060200180831161095857829003601f168201915b5050505050905090565b5f5f610989611a6d565b9050610996818585611a74565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b5f5f6109d8611a6d565b90506109e5858285611a86565b6109f0858585611b19565b60019150509392505050565b600b805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b5f6012905090565b610a376119e6565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a9c576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610b22576040517fc7f2b1ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600a805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610c5b5750610c2b6111da565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610c92576040517ffbc5dd9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cf7576040517fe9cceb3600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3385604051602401610d2892919061319b565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610d769190613206565b5f604051808303815f865af19150503d805f8114610daf576040519150601f19603f3d011682016040523d82523d5f602084013e610db4565b606091505b5091509150818015610de157505f81511480610de0575080806020019051810190610ddf9190613230565b5b5b610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e17906132cb565b60405180910390fd5b50505050565b6012602052805f5260405f205f915054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e906119e6565b610e995f611c09565b565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610eca611a6d565b90508073ffffffffffffffffffffffffffffffffffffffff16610eeb6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614610f4357806040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f3a919061302f565b60405180910390fd5b610f4c81611c09565b50565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610fe05750610fb06111da565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611017576040517ffbc5dd9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff164760405161103c9061330c565b5f6040518083038185875af1925050503d805f8114611076576040519150601f19603f3d011682016040523d82523d5f602084013e61107b565b606091505b50509050806110b6576040517f6d963f8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b6011602052805f5260405f205f915054906101000a900460ff1681565b6110df6119e6565b600a81836110ed9190613109565b61ffff161115611129576040517fe298135000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600b5f015f6101000a81548161ffff021916908361ffff16021790555080600b5f0160026101000a81548161ffff021916908361ffff16021790555080826111729190613109565b61ffff16600e819055508061ffff168261ffff167f52357d2b6ee817f5d57183c13530148906a8ec8b5be2fc82da16afbd8a04507260405160405180910390a35050565b6111be6119e6565b6001600f5f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112119061316b565b80601f016020809104026020016040519081016040528092919081815260200182805461123d9061316b565b80156112885780601f1061125f57610100808354040283529160200191611288565b820191905f5260205f20905b81548152906001019060200180831161126b57829003601f168201915b5050505050905090565b600a81565b5f5f6112a1611a6d565b90506112ae818585611b19565b600191505092915050565b6112c16119e6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611326576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113726119e6565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d7576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361145d576040517f02e4f4c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036114e3576040517fc7f2b1ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600160095f6101000a81548160ff021916908315150217905550600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156115e657506115b66111da565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561161d576040517ffbc5dd9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61162730610e43565b90505f606483836116389190613320565b611642919061338e565b905061164d81611c39565b5f4790505f600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516116989061330c565b5f6040518083038185875af1925050503d805f81146116d2576040519150601f19603f3d011682016040523d82523d5f602084013e6116d7565b606091505b505080915050505050505f60095f6101000a81548160ff02191690831515021790555050565b6117056119e6565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361176a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80151560125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036117f0576040517fc7f2b1ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6118506119e6565b670de0b6b3a7640000816118649190613320565b60088190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119256119e6565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166119846111da565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6013602052805f5260405f205f915054906101000a900460ff1681565b6119ee611a6d565b73ffffffffffffffffffffffffffffffffffffffff16611a0c6111da565b73ffffffffffffffffffffffffffffffffffffffff1614611a6b57611a2f611a6d565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611a62919061302f565b60405180910390fd5b565b5f33905090565b611a818383836001611ebe565b505050565b5f611a91848461186d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015611b135781811015611b04578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611afb939291906133be565b60405180910390fd5b611b1284848484035f611ebe565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b89575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611b80919061302f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf9575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611bf0919061302f565b60405180910390fd5b611c0483838361208d565b505050565b60065f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055611c3681612505565b50565b5f600267ffffffffffffffff811115611c5557611c546133f3565b5b604051908082528060200260200182016040528015611c835781602001602082028036833780820191505090505b50905030815f81518110611c9a57611c99613420565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d619190613461565b81600181518110611d7557611d74613420565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081611dda307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d61186d565b1015611e2c57611e2b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a74565b5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611e8d95949392919061357c565b5f604051808303815f87803b158015611ea4575f5ffd5b505af1158015611eb6573d5f5f3e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f2e575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611f25919061302f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f9e575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611f95919061302f565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015612087578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161207e9190612ee5565b60405180910390a35b50505050565b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612128575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561215f576040517fd9a60d2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81036121765761217183835f611b19565b612500565b5f61218030610e43565b90505f60085482101590508080156121df575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156121f7575060095f9054906101000a900460ff16155b801561224a575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561229d575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122ac576122ab826125c8565b5b5f6001905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061234c575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612355575f90505b5f5f90505f61236261285d565b90505f5f905083156124ee57600c5f815480929190612380906135d4565b919050555060115f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123dc57505f600d54115b1561241a575f6123ea6128a7565b905080836123f8919061361b565b9150606482896124089190613320565b612412919061338e565b9350506124cb565b60115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561247157505f600e54115b156124af575f61247f61291b565b9050808361248d919061361b565b91506064828961249d9190613320565b6124a7919061338e565b9350506124ca565b606482886124bd9190613320565b6124c7919061338e565b92505b5b5f8311156124ed576124de89308561298f565b82876124ea919061364e565b96505b5b6124f989898961298f565b5050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600160095f6101000a81548160ff0219169083151502179055505f600e54600d546125f3919061361b565b036126935761260181611c39565b5f600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516126489061330c565b5f6040518083038185875af1925050503d805f8114612682576040519150601f19603f3d011682016040523d82523d5f602084013e612687565b606091505b50508091505050612841565b5f600e54600d546126a4919061361b565b82600b5f015f9054906101000a900461ffff16600a5f015f9054906101000a900461ffff166126d39190613109565b61ffff166126e19190613320565b6126eb919061338e565b90505f81836126fa919061364e565b90505f60028261270a919061338e565b90505f8185612719919061364e565b90505f47905061272882611c39565b5f8147612735919061364e565b90505f8382866127459190613320565b61274f919061338e565b90505f8111801561275f57505f85115b1561276f5761276e8582612ba8565b5b5f5f4790505f81111561280857600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516127c29061330c565b5f6040518083038185875af1925050503d805f81146127fc576040519150601f19603f3d011682016040523d82523d5f602084013e612801565b606091505b5050809250505b8087847ff8cfc1c15ead481ffc3a2df6126e88c84a6730799e332fcfe2dbc386373d517160405160405180910390a45050505050505050505b5f60095f6101000a81548160ff02191690831515021790555050565b5f600f5f9054906101000a900460ff161561287a575f90506128a4565b600a600c541161288d57600f90506128a4565b601e600c54116128a057600a90506128a4565b5f90505b90565b5f600f5f9054906101000a900460ff16156128c657600d549050612918565b600a600c54116128d95760199050612918565b6014600c54116128ec5760149050612918565b6019600c54116128ff57600f9050612918565b601e600c541161291257600a9050612918565b600d5490505b90565b5f600f5f9054906101000a900460ff161561293a57600e54905061298c565b600a600c541161294d576019905061298c565b6014600c5411612960576014905061298c565b6019600c541161297357600f905061298c565b601e600c541161298657600a905061298c565b600e5490505b90565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129df578060025f8282546129d3919061361b565b92505081905550612aad565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612a68578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612a5f939291906133be565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af4578060025f8282540392505081905550612b3e565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b9b9190612ee5565b60405180910390a3505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f612bf16111da565b426040518863ffffffff1660e01b8152600401612c1396959493929190613681565b60606040518083038185885af1158015612c2f573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612c5491906136f4565b5050505050565b5f5ffd5b5f61ffff82169050919050565b612c7581612c5f565b8114612c7f575f5ffd5b50565b5f81359050612c9081612c6c565b92915050565b5f5f60408385031215612cac57612cab612c5b565b5b5f612cb985828601612c82565b9250506020612cca85828601612c82565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d1682612cd4565b612d208185612cde565b9350612d30818560208601612cee565b612d3981612cfc565b840191505092915050565b5f6020820190508181035f830152612d5c8184612d0c565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d8d82612d64565b9050919050565b612d9d81612d83565b8114612da7575f5ffd5b50565b5f81359050612db881612d94565b92915050565b5f819050919050565b612dd081612dbe565b8114612dda575f5ffd5b50565b5f81359050612deb81612dc7565b92915050565b5f5f60408385031215612e0757612e06612c5b565b5b5f612e1485828601612daa565b9250506020612e2585828601612ddd565b9150509250929050565b5f8115159050919050565b612e4381612e2f565b82525050565b5f602082019050612e5c5f830184612e3a565b92915050565b5f819050919050565b5f612e85612e80612e7b84612d64565b612e62565b612d64565b9050919050565b5f612e9682612e6b565b9050919050565b5f612ea782612e8c565b9050919050565b612eb781612e9d565b82525050565b5f602082019050612ed05f830184612eae565b92915050565b612edf81612dbe565b82525050565b5f602082019050612ef85f830184612ed6565b92915050565b5f5f5f60608486031215612f1557612f14612c5b565b5b5f612f2286828701612daa565b9350506020612f3386828701612daa565b9250506040612f4486828701612ddd565b9150509250925092565b612f5781612c5f565b82525050565b5f604082019050612f705f830185612f4e565b612f7d6020830184612f4e565b9392505050565b5f60ff82169050919050565b612f9981612f84565b82525050565b5f602082019050612fb25f830184612f90565b92915050565b612fc181612e2f565b8114612fcb575f5ffd5b50565b5f81359050612fdc81612fb8565b92915050565b5f5f60408385031215612ff857612ff7612c5b565b5b5f61300585828601612daa565b925050602061301685828601612fce565b9150509250929050565b61302981612d83565b82525050565b5f6020820190506130425f830184613020565b92915050565b5f6020828403121561305d5761305c612c5b565b5b5f61306a84828501612daa565b91505092915050565b5f6020828403121561308857613087612c5b565b5b5f61309584828501612ddd565b91505092915050565b5f5f604083850312156130b4576130b3612c5b565b5b5f6130c185828601612daa565b92505060206130d285828601612daa565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61311382612c5f565b915061311e83612c5f565b9250828201905061ffff811115613138576131376130dc565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061318257607f821691505b6020821081036131955761319461313e565b5b50919050565b5f6040820190506131ae5f830185613020565b6131bb6020830184612ed6565b9392505050565b5f81519050919050565b5f81905092915050565b5f6131e0826131c2565b6131ea81856131cc565b93506131fa818560208601612cee565b80840191505092915050565b5f61321182846131d6565b915081905092915050565b5f8151905061322a81612fb8565b92915050565b5f6020828403121561324557613244612c5b565b5b5f6132528482850161321c565b91505092915050565b7f5472616e7366657248656c7065723a3a736166655472616e736665723a2074725f8201527f616e73666572206661696c656400000000000000000000000000000000000000602082015250565b5f6132b5602d83612cde565b91506132c08261325b565b604082019050919050565b5f6020820190508181035f8301526132e2816132a9565b9050919050565b50565b5f6132f75f836131cc565b9150613302826132e9565b5f82019050919050565b5f613316826132ec565b9150819050919050565b5f61332a82612dbe565b915061333583612dbe565b925082820261334381612dbe565b9150828204841483151761335a576133596130dc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61339882612dbe565b91506133a383612dbe565b9250826133b3576133b2613361565b5b828204905092915050565b5f6060820190506133d15f830186613020565b6133de6020830185612ed6565b6133eb6040830184612ed6565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061345b81612d94565b92915050565b5f6020828403121561347657613475612c5b565b5b5f6134838482850161344d565b91505092915050565b5f819050919050565b5f6134af6134aa6134a58461348c565b612e62565b612dbe565b9050919050565b6134bf81613495565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6134f781612d83565b82525050565b5f61350883836134ee565b60208301905092915050565b5f602082019050919050565b5f61352a826134c5565b61353481856134cf565b935061353f836134df565b805f5b8381101561356f57815161355688826134fd565b975061356183613514565b925050600181019050613542565b5085935050505092915050565b5f60a08201905061358f5f830188612ed6565b61359c60208301876134b6565b81810360408301526135ae8186613520565b90506135bd6060830185613020565b6135ca6080830184612ed6565b9695505050505050565b5f6135de82612dbe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136105761360f6130dc565b5b600182019050919050565b5f61362582612dbe565b915061363083612dbe565b9250828201905080821115613648576136476130dc565b5b92915050565b5f61365882612dbe565b915061366383612dbe565b925082820390508181111561367b5761367a6130dc565b5b92915050565b5f60c0820190506136945f830189613020565b6136a16020830188612ed6565b6136ae60408301876134b6565b6136bb60608301866134b6565b6136c86080830185613020565b6136d560a0830184612ed6565b979650505050505050565b5f815190506136ee81612dc7565b92915050565b5f5f5f6060848603121561370b5761370a612c5b565b5b5f613718868287016136e0565b9350506020613729868287016136e0565b925050604061373a868287016136e0565b915050925092509256fea264697066735822122087b0ff77f3edc336dbd125ebaaafb56663837dd29efd4da79ed69f50bc68d9f864736f6c634300081c0033
Deployed Bytecode Sourcemap
35022:16903:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43319:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19189:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21482:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36750:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20291:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22282:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36352:23;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;20142:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41452:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36289:21;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;36849:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39314:673;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37064:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20453:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3571:103;;;;;;;;;;;;;:::i;:::-;;36670:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6754:235;;;;;;;;;;;;;:::i;:::-;;40218:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36938:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43924:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44366:84;;;;;;;;;;;;;:::i;:::-;;2896:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19399:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35477:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20776:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42615:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42103:463;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49833:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40823:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42978:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21021:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35739:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5715:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6142:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37166:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43319:384;2782:13;:11;:13::i;:::-;35517:2:::1;43449:7;43436:10;:20;;;;:::i;:::-;:36;;;43432:94;;;43496:18;;;;;;;;;;;;;;43432:94;43555:10;43536:6;:16;;;:29;;;;;;;;;;;;;;;;;;43592:7;43576:6;:13;;;:23;;;;;;;;;;;;;;;;;;43637:7;43624:10;:20;;;;:::i;:::-;43610:34;;:11;:34;;;;43687:7;43660:35;;43675:10;43660:35;;;;;;;;;;;;43319:384:::0;;:::o;19189:91::-;19234:13;19267:5;19260:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19189:91;:::o;21482:190::-;21555:4;21572:13;21588:12;:10;:12::i;:::-;21572:28;;21611:31;21620:5;21627:7;21636:5;21611:8;:31::i;:::-;21660:4;21653:11;;;21482:190;;;;:::o;36750:51::-;;;:::o;20291:99::-;20343:7;20370:12;;20363:19;;20291:99;:::o;22282:249::-;22369:4;22386:15;22404:12;:10;:12::i;:::-;22386:30;;22427:37;22443:4;22449:7;22458:5;22427:15;:37::i;:::-;22475:26;22485:4;22491:2;22495:5;22475:9;:26::i;:::-;22519:4;22512:11;;;22282:249;;;;;:::o;36352:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20142:84::-;20191:5;20216:2;20209:9;;20142:84;:::o;41452:296::-;2782:13;:11;:13::i;:::-;41547:1:::1;41531:18;;:4;:18;;::::0;41527:81:::1;;41573:23;;;;;;;;;;;;;;41527:81;41645:5;41622:28;;:13;:19;41636:4;41622:19;;;;;;;;;;;;;;;;;;;;;;;;;:28;;::::0;41618:85:::1;;41674:17;;;;;;;;;;;;;;41618:85;41735:5;41713:13;:19;41727:4;41713:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;41452:296:::0;;:::o;36289:21::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36849:28::-;;;;;;;;;;;;;:::o;39314:673::-;39410:15;;;;;;;;;;;39396:29;;:10;:29;;;;:54;;;;;39443:7;:5;:7::i;:::-;39429:21;;:10;:21;;;;39396:54;39392:122;;;39474:28;;;;;;;;;;;;;;39392:122;39546:4;39528:23;;:6;:23;;;39524:87;;39575:24;;;;;;;;;;;;;;39524:87;39689:12;39703:17;39724:6;:11;;39773:10;39785;39797:7;39750:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39724:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39688:128;;;;39849:7;:57;;;;;39876:1;39861:4;:11;:16;:44;;;;39892:4;39881:24;;;;;;;;;;;;:::i;:::-;39861:44;39849:57;39827:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;39381:606;;39314:673;;:::o;37064:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;20453:118::-;20518:7;20545:9;:18;20555:7;20545:18;;;;;;;;;;;;;;;;20538:25;;20453:118;;;:::o;3571:103::-;2782:13;:11;:13::i;:::-;3636:30:::1;3663:1;3636:18;:30::i;:::-;3571:103::o:0;36670:30::-;;;;;;;;;;;;;:::o;6754:235::-;6807:14;6824:12;:10;:12::i;:::-;6807:29;;6869:6;6851:24;;:14;:12;:14::i;:::-;:24;;;6847:98;;6926:6;6899:34;;;;;;;;;;;:::i;:::-;;;;;;;;6847:98;6955:26;6974:6;6955:18;:26::i;:::-;6796:193;6754:235::o;40218:307::-;40294:15;;;;;;;;;;;40280:29;;:10;:29;;;;:54;;;;;40327:7;:5;:7::i;:::-;40313:21;;:10;:21;;;;40280:54;40276:122;;;40358:28;;;;;;;;;;;;;;40276:122;40409:9;40424;:14;;40446:21;40424:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40408:64;;;40491:4;40483:34;;;;;;;;;;;;;;;;;40265:260;40218:307;:::o;36938:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;43924:389::-;2782:13;:11;:13::i;:::-;35517:2:::1;44055:7;44042:10;:20;;;;:::i;:::-;:36;;;44038:94;;;44102:18;;;;;;;;;;;;;;44038:94;44162:10;44142:7;:17;;;:30;;;;;;;;;;;;;;;;;;44200:7;44183;:14;;;:24;;;;;;;;;;;;;;;;;;44246:7;44233:10;:20;;;;:::i;:::-;44218:35;;:12;:35;;;;44297:7;44269:36;;44285:10;44269:36;;;;;;;;;;;;43924:389:::0;;:::o;44366:84::-;2782:13;:11;:13::i;:::-;44438:4:::1;44425:10;;:17;;;;;;;;;;;;;;;;;;44366:84::o:0;2896:87::-;2942:7;2969:6;;;;;;;;;;;2962:13;;2896:87;:::o;19399:95::-;19446:13;19479:7;19472:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19399:95;:::o;35477:42::-;35517:2;35477:42;:::o;20776:182::-;20845:4;20862:13;20878:12;:10;:12::i;:::-;20862:28;;20901:27;20911:5;20918:2;20922:5;20901:9;:27::i;:::-;20946:4;20939:11;;;20776:182;;;;:::o;42615:257::-;2782:13;:11;:13::i;:::-;42756:1:::1;42725:33;;:19;:33;;::::0;42721:96:::1;;42782:23;;;;;;;;;;;;;;42721:96;42845:19;42827:15;;:37;;;;;;;;;;;;;;;;;;42615:257:::0;:::o;42103:463::-;2782:13;:11;:13::i;:::-;42242:1:::1;42222:22;;:8;:22;;::::0;42218:85:::1;;42268:23;;;;;;;;;;;;;;42218:85;42329:13;;;;;;;;;;;42317:25;;:8;:25;;::::0;42313:87:::1;;42366:22;;;;;;;;;;;;;;42313:87;42450:5;42414:41;;:22;:32;42437:8;42414:32;;;;;;;;;;;;;;;;;;;;;;;;;:41;;::::0;42410:98:::1;;42479:17;;;;;;;;;;;;;;42410:98;42553:5;42518:22;:32;42541:8;42518:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;42103:463:::0;;:::o;49833:494::-;38953:4;38944:6;;:13;;;;;;;;;;;;;;;;;;49923:15:::1;;;;;;;;;;;49909:29;;:10;:29;;;;:54;;;;;49956:7;:5;:7::i;:::-;49942:21;;:10;:21;;;;49909:54;49905:122;;;49987:28;;;;;;;;;;;;;;49905:122;50037:14;50054:24;50072:4;50054:9;:24::i;:::-;50037:41;;50089:14;50130:3;50116:10;50107:6;:19;;;;:::i;:::-;50106:27;;;;:::i;:::-;50089:44;;50144:24;50161:6;50144:16;:24::i;:::-;50179:17;50199:21;50179:41;;50231:12;50276:15;;;;;;;;;;;50268:29;;50305:9;50268:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50254:65;;;;;49894:433;;;;38989:5:::0;38980:6;;:14;;;;;;;;;;;;;;;;;;49833:494;:::o;40823:312::-;2782:13;:11;:13::i;:::-;40924:1:::1;40908:18;;:4;:18;;::::0;40904:81:::1;;40950:23;;;;;;;;;;;;;;40904:81;41027:5;40999:33;;:18;:24;41018:4;40999:24;;;;;;;;;;;;;;;;;;;;;;;;;:33;;::::0;40995:90:::1;;41056:17;;;;;;;;;;;;;;40995:90;41122:5;41095:18;:24;41114:4;41095:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;40823:312:::0;;:::o;42978:122::-;2782:13;:11;:13::i;:::-;43088:4:::1;43079:6;:13;;;;:::i;:::-;43058:18;:34;;;;42978:122:::0;:::o;21021:142::-;21101:7;21128:11;:18;21140:5;21128:18;;;;;;;;;;;;;;;:27;21147:7;21128:27;;;;;;;;;;;;;;;;21121:34;;21021:142;;;;:::o;35739:50::-;;;;:::o;5715:101::-;5768:7;5795:13;;;;;;;;;;;5788:20;;5715:101;:::o;6142:181::-;2782:13;:11;:13::i;:::-;6248:8:::1;6232:13;;:24;;;;;;;;;;;;;;;;;;6306:8;6272:43;;6297:7;:5;:7::i;:::-;6272:43;;;;;;;;;;;;6142:181:::0;:::o;37166:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;3061:166::-;3132:12;:10;:12::i;:::-;3121:23;;:7;:5;:7::i;:::-;:23;;;3117:103;;3195:12;:10;:12::i;:::-;3168:40;;;;;;;;;;;:::i;:::-;;;;;;;;3117:103;3061:166::o;850:98::-;903:7;930:10;923:17;;850:98;:::o;26341:130::-;26426:37;26435:5;26442:7;26451:5;26458:4;26426:8;:37::i;:::-;26341:130;;;:::o;28073:486::-;28173:24;28200:25;28210:5;28217:7;28200:9;:25::i;:::-;28173:52;;28259:17;28240:16;:36;28236:316;;;28316:5;28297:16;:24;28293:132;;;28376:7;28385:16;28403:5;28349:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;28293:132;28468:57;28477:5;28484:7;28512:5;28493:16;:24;28519:5;28468:8;:57::i;:::-;28236:316;28162:397;28073:486;;;:::o;22916:308::-;23016:1;23000:18;;:4;:18;;;22996:88;;23069:1;23042:30;;;;;;;;;;;:::i;:::-;;;;;;;;22996:88;23112:1;23098:16;;:2;:16;;;23094:88;;23167:1;23138:32;;;;;;;;;;;:::i;:::-;;;;;;;;23094:88;23192:24;23200:4;23206:2;23210:5;23192:7;:24::i;:::-;22916:308;;;:::o;6513:156::-;6603:13;;6596:20;;;;;;;;;;;6627:34;6652:8;6627:24;:34::i;:::-;6513:156;:::o;48362:757::-;48488:21;48526:1;48512:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48488:40;;48557:4;48539;48544:1;48539:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48583:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48573:4;48578:1;48573:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48675:11;48622:50;48640:4;48655:15;48622:9;:50::i;:::-;:64;48618:231;;;48703:134;48738:4;48770:15;48805:17;48703:8;:134::i;:::-;48618:231;48887:15;:66;;;48968:11;48994:1;49038:4;49065;49085:15;48887:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48417:702;48362:757;:::o;27338:443::-;27468:1;27451:19;;:5;:19;;;27447:91;;27523:1;27494:32;;;;;;;;;;;:::i;:::-;;;;;;;;27447:91;27571:1;27552:21;;:7;:21;;;27548:92;;27625:1;27597:31;;;;;;;;;;;:::i;:::-;;;;;;;;27548:92;27680:5;27650:11;:18;27662:5;27650:18;;;;;;;;;;;;;;;:27;27669:7;27650:27;;;;;;;;;;;;;;;:35;;;;27700:9;27696:78;;;27747:7;27731:31;;27740:5;27731:31;;;27756:5;27731:31;;;;;;:::i;:::-;;;;;;;;27696:78;27338:443;;;;:::o;44529:1919::-;44655:13;:19;44669:4;44655:19;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;44678:13;:17;44692:2;44678:17;;;;;;;;;;;;;;;;;;;;;;;;;44655:40;44651:97;;;44719:17;;;;;;;;;;;;;;44651:97;44774:1;44764:6;:11;44760:93;;44792:28;44808:4;44814:2;44818:1;44792:15;:28::i;:::-;44835:7;;44760:93;44863:23;44889:24;44907:4;44889:9;:24::i;:::-;44863:50;;44924:15;44961:18;;44942:15;:37;;44924:55;;45008:10;:56;;;;;45036:22;:28;45059:4;45036:28;;;;;;;;;;;;;;;;;;;;;;;;;45035:29;45008:56;:80;;;;;45082:6;;;;;;;;;;;45081:7;45008:80;:122;;;;;45106:18;:24;45125:4;45106:24;;;;;;;;;;;;;;;;;;;;;;;;;45105:25;45008:122;:162;;;;;45148:18;:22;45167:2;45148:22;;;;;;;;;;;;;;;;;;;;;;;;;45147:23;45008:162;44990:250;;;45197:31;45212:15;45197:14;:31::i;:::-;44990:250;45252:12;45267:4;45252:19;;45286:18;:24;45305:4;45286:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;45314:18;:22;45333:2;45314:22;;;;;;;;;;;;;;;;;;;;;;;;;45286:50;45282:98;;;45363:5;45353:15;;45282:98;45392:12;45407:1;45392:16;;45572:19;45594:22;:20;:22::i;:::-;45572:44;;45627:16;45646:1;45627:20;;45664:7;45660:739;;;45688:9;;:11;;;;;;;;;:::i;:::-;;;;;;45718:22;:28;45741:4;45718:28;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;;45764:1;45750:11;;:15;45718:47;45714:530;;;45786:14;45803:17;:15;:17::i;:::-;45786:34;;45864:6;45850:11;:20;;;;:::i;:::-;45839:31;;45918:3;45906:8;45897:6;:17;;;;:::i;:::-;45896:25;;;;:::i;:::-;45889:32;;45767:170;45714:530;;;45947:22;:26;45970:2;45947:26;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;45992:1;45977:12;;:16;45947:46;45943:301;;;46014:15;46032:18;:16;:18::i;:::-;46014:36;;46094:7;46080:11;:21;;;;:::i;:::-;46069:32;;46149:3;46137:8;46128:6;:17;;;;:::i;:::-;46127:25;;;;:::i;:::-;46120:32;;45995:173;45943:301;;;46225:3;46210:11;46201:6;:20;;;;:::i;:::-;46200:28;;;;:::i;:::-;46193:35;;45943:301;45714:530;46269:1;46262:4;:8;46258:130;;;46291:40;46305:4;46319;46326;46291:13;:40::i;:::-;46368:4;46359:6;:13;;;;:::i;:::-;46350:22;;46258:130;45660:739;46409:31;46423:4;46429:2;46433:6;46409:13;:31::i;:::-;44640:1808;;;;;;44529:1919;;;;:::o;4209:191::-;4283:16;4302:6;;;;;;;;;;;4283:25;;4328:8;4319:6;;:17;;;;;;;;;;;;;;;;;;4383:8;4352:40;;4373:8;4352:40;;;;;;;;;;;;4272:128;4209:191;:::o;46685:1560::-;38953:4;38944:6;;:13;;;;;;;;;;;;;;;;;;46795:1:::1;46779:12;;46765:11;;:26;;;;:::i;:::-;:31:::0;46761:1477:::1;;46813:29;46830:11;46813:16;:29::i;:::-;46857:6;46886:15;;;;;;;;;;;:20;;46914:21;46886:86;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46878:94;;;;;46798:186;46761:1477;;;47005:23;47120:12;;47106:11;;:26;;;;:::i;:::-;47090:11;47052:7;:17;;;;;;;;;;;;47033:6;:16;;;;;;;;;;;;:36;;;;:::i;:::-;47032:69;;;;;;:::i;:::-;47031:102;;;;:::i;:::-;47005:128;;47148:23;47188:15;47174:11;:29;;;;:::i;:::-;47148:55;;47218:27;47266:1;47248:15;:19;;;;:::i;:::-;47218:49;;47282:18;47317:19;47303:11;:33;;;;:::i;:::-;47282:54;;47351:28;47382:21;47351:52;;47418:28;47435:10;47418:16;:28::i;:::-;47463:27;47534:20;47493:21;:61;;;;:::i;:::-;47463:91;;47569:23;47658:10;47635:19;47596;:58;;;;:::i;:::-;47595:73;;;;:::i;:::-;47569:99;;47705:1;47687:15;:19;:46;;;;;47732:1;47710:19;:23;47687:46;47683:137;;;47754:50;47767:19;47788:15;47754:12;:50::i;:::-;47683:137;47834:12;47861:20;47884:21;47861:44;;47939:1;47924:12;:16;47920:156;;;47975:15;;;;;;;;;;;:20;;48025:12;47975:85;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47961:99;;;;;47920:156;48199:12;48161:19;48127:15;48097:129;;;;;;;;;;46990:1248;;;;;;;;;46761:1477;38989:5:::0;38980:6;;:14;;;;;;;;;;;;;;;;;;46685:1560;:::o;51572:350::-;51627:7;51651:10;;;;;;;;;;;51647:268;;;51685:1;51678:8;;;;51647:268;51736:2;51723:9;;:15;51719:185;;51766:2;51759:9;;;;51719:185;51807:2;51794:9;;:15;51790:114;;51837:2;51830:9;;;;51790:114;51887:1;51880:8;;51572:350;;:::o;50401:507::-;50451:7;50475:10;;;;;;;;;;;50471:430;;;50509:11;;50502:18;;;;50471:430;50570:2;50557:9;;:15;50553:337;;50600:2;50593:9;;;;50553:337;50641:2;50628:9;;:15;50624:266;;50671:2;50664:9;;;;50624:266;50712:2;50699:9;;:15;50695:195;;50742:2;50735:9;;;;50695:195;50783:2;50770:9;;:15;50766:124;;50813:2;50806:9;;;;50766:124;50863:11;;50856:18;;50401:507;;:::o;50983:510::-;51034:7;51058:10;;;;;;;;;;;51054:432;;;51092:12;;51085:19;;;;51054:432;51154:2;51141:9;;:15;51137:338;;51184:2;51177:9;;;;51137:338;51225:2;51212:9;;:15;51208:267;;51255:2;51248:9;;;;51208:267;51296:2;51283:9;;:15;51279:196;;51326:2;51319:9;;;;51279:196;51367:2;51354:9;;:15;51350:125;;51397:2;51390:9;;;;51350:125;51447:12;;51440:19;;50983:510;;:::o;23548:1135::-;23654:1;23638:18;;:4;:18;;;23634:552;;23792:5;23776:12;;:21;;;;;;;:::i;:::-;;;;;;;;23634:552;;;23830:19;23852:9;:15;23862:4;23852:15;;;;;;;;;;;;;;;;23830:37;;23900:5;23886:11;:19;23882:117;;;23958:4;23964:11;23977:5;23933:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;23882:117;24154:5;24140:11;:19;24122:9;:15;24132:4;24122:15;;;;;;;;;;;;;;;:37;;;;23815:371;23634:552;24216:1;24202:16;;:2;:16;;;24198:435;;24384:5;24368:12;;:21;;;;;;;;;;;24198:435;;;24601:5;24584:9;:13;24594:2;24584:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;24198:435;24665:2;24650:25;;24659:4;24650:25;;;24669:5;24650:25;;;;;;:::i;:::-;;;;;;;;23548:1135;;;:::o;49296:393::-;49407:15;:31;;;49446:9;49479:4;49499:11;49525:1;49568;49611:7;:5;:7::i;:::-;49655:15;49407:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;49296:393;;:::o;88:117:1:-;197:1;194;187:12;334:89;370:7;410:6;403:5;399:18;388:29;;334:89;;;:::o;429:120::-;501:23;518:5;501:23;:::i;:::-;494:5;491:34;481:62;;539:1;536;529:12;481:62;429:120;:::o;555:137::-;600:5;638:6;625:20;616:29;;654:32;680:5;654:32;:::i;:::-;555:137;;;;:::o;698:470::-;764:6;772;821:2;809:9;800:7;796:23;792:32;789:119;;;827:79;;:::i;:::-;789:119;947:1;972:52;1016:7;1007:6;996:9;992:22;972:52;:::i;:::-;962:62;;918:116;1073:2;1099:52;1143:7;1134:6;1123:9;1119:22;1099:52;:::i;:::-;1089:62;;1044:117;698:470;;;;;:::o;1174:99::-;1226:6;1260:5;1254:12;1244:22;;1174:99;;;:::o;1279:169::-;1363:11;1397:6;1392:3;1385:19;1437:4;1432:3;1428:14;1413:29;;1279:169;;;;:::o;1454:139::-;1543:6;1538:3;1533;1527:23;1584:1;1575:6;1570:3;1566:16;1559:27;1454:139;;;:::o;1599:102::-;1640:6;1691:2;1687:7;1682:2;1675:5;1671:14;1667:28;1657:38;;1599:102;;;:::o;1707:377::-;1795:3;1823:39;1856:5;1823:39;:::i;:::-;1878:71;1942:6;1937:3;1878:71;:::i;:::-;1871:78;;1958:65;2016:6;2011:3;2004:4;1997:5;1993:16;1958:65;:::i;:::-;2048:29;2070:6;2048:29;:::i;:::-;2043:3;2039:39;2032:46;;1799:285;1707:377;;;;:::o;2090:313::-;2203:4;2241:2;2230:9;2226:18;2218:26;;2290:9;2284:4;2280:20;2276:1;2265:9;2261:17;2254:47;2318:78;2391:4;2382:6;2318:78;:::i;:::-;2310:86;;2090:313;;;;:::o;2409:126::-;2446:7;2486:42;2479:5;2475:54;2464:65;;2409:126;;;:::o;2541:96::-;2578:7;2607:24;2625:5;2607:24;:::i;:::-;2596:35;;2541:96;;;:::o;2643:122::-;2716:24;2734:5;2716:24;:::i;:::-;2709:5;2706:35;2696:63;;2755:1;2752;2745:12;2696:63;2643:122;:::o;2771:139::-;2817:5;2855:6;2842:20;2833:29;;2871:33;2898:5;2871:33;:::i;:::-;2771:139;;;;:::o;2916:77::-;2953:7;2982:5;2971:16;;2916:77;;;:::o;2999:122::-;3072:24;3090:5;3072:24;:::i;:::-;3065:5;3062:35;3052:63;;3111:1;3108;3101:12;3052:63;2999:122;:::o;3127:139::-;3173:5;3211:6;3198:20;3189:29;;3227:33;3254:5;3227:33;:::i;:::-;3127:139;;;;:::o;3272:474::-;3340:6;3348;3397:2;3385:9;3376:7;3372:23;3368:32;3365:119;;;3403:79;;:::i;:::-;3365:119;3523:1;3548:53;3593:7;3584:6;3573:9;3569:22;3548:53;:::i;:::-;3538:63;;3494:117;3650:2;3676:53;3721:7;3712:6;3701:9;3697:22;3676:53;:::i;:::-;3666:63;;3621:118;3272:474;;;;;:::o;3752:90::-;3786:7;3829:5;3822:13;3815:21;3804:32;;3752:90;;;:::o;3848:109::-;3929:21;3944:5;3929:21;:::i;:::-;3924:3;3917:34;3848:109;;:::o;3963:210::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:65;4163:1;4152:9;4148:17;4139:6;4101:65;:::i;:::-;3963:210;;;;:::o;4179:60::-;4207:3;4228:5;4221:12;;4179:60;;;:::o;4245:142::-;4295:9;4328:53;4346:34;4355:24;4373:5;4355:24;:::i;:::-;4346:34;:::i;:::-;4328:53;:::i;:::-;4315:66;;4245:142;;;:::o;4393:126::-;4443:9;4476:37;4507:5;4476:37;:::i;:::-;4463:50;;4393:126;;;:::o;4525:153::-;4602:9;4635:37;4666:5;4635:37;:::i;:::-;4622:50;;4525:153;;;:::o;4684:185::-;4798:64;4856:5;4798:64;:::i;:::-;4793:3;4786:77;4684:185;;:::o;4875:276::-;4995:4;5033:2;5022:9;5018:18;5010:26;;5046:98;5141:1;5130:9;5126:17;5117:6;5046:98;:::i;:::-;4875:276;;;;:::o;5157:118::-;5244:24;5262:5;5244:24;:::i;:::-;5239:3;5232:37;5157:118;;:::o;5281:222::-;5374:4;5412:2;5401:9;5397:18;5389:26;;5425:71;5493:1;5482:9;5478:17;5469:6;5425:71;:::i;:::-;5281:222;;;;:::o;5509:619::-;5586:6;5594;5602;5651:2;5639:9;5630:7;5626:23;5622:32;5619:119;;;5657:79;;:::i;:::-;5619:119;5777:1;5802:53;5847:7;5838:6;5827:9;5823:22;5802:53;:::i;:::-;5792:63;;5748:117;5904:2;5930:53;5975:7;5966:6;5955:9;5951:22;5930:53;:::i;:::-;5920:63;;5875:118;6032:2;6058:53;6103:7;6094:6;6083:9;6079:22;6058:53;:::i;:::-;6048:63;;6003:118;5509:619;;;;;:::o;6134:115::-;6219:23;6236:5;6219:23;:::i;:::-;6214:3;6207:36;6134:115;;:::o;6255:324::-;6372:4;6410:2;6399:9;6395:18;6387:26;;6423:69;6489:1;6478:9;6474:17;6465:6;6423:69;:::i;:::-;6502:70;6568:2;6557:9;6553:18;6544:6;6502:70;:::i;:::-;6255:324;;;;;:::o;6585:86::-;6620:7;6660:4;6653:5;6649:16;6638:27;;6585:86;;;:::o;6677:112::-;6760:22;6776:5;6760:22;:::i;:::-;6755:3;6748:35;6677:112;;:::o;6795:214::-;6884:4;6922:2;6911:9;6907:18;6899:26;;6935:67;6999:1;6988:9;6984:17;6975:6;6935:67;:::i;:::-;6795:214;;;;:::o;7015:116::-;7085:21;7100:5;7085:21;:::i;:::-;7078:5;7075:32;7065:60;;7121:1;7118;7111:12;7065:60;7015:116;:::o;7137:133::-;7180:5;7218:6;7205:20;7196:29;;7234:30;7258:5;7234:30;:::i;:::-;7137:133;;;;:::o;7276:468::-;7341:6;7349;7398:2;7386:9;7377:7;7373:23;7369:32;7366:119;;;7404:79;;:::i;:::-;7366:119;7524:1;7549:53;7594:7;7585:6;7574:9;7570:22;7549:53;:::i;:::-;7539:63;;7495:117;7651:2;7677:50;7719:7;7710:6;7699:9;7695:22;7677:50;:::i;:::-;7667:60;;7622:115;7276:468;;;;;:::o;7750:118::-;7837:24;7855:5;7837:24;:::i;:::-;7832:3;7825:37;7750:118;;:::o;7874:222::-;7967:4;8005:2;7994:9;7990:18;7982:26;;8018:71;8086:1;8075:9;8071:17;8062:6;8018:71;:::i;:::-;7874:222;;;;:::o;8102:329::-;8161:6;8210:2;8198:9;8189:7;8185:23;8181:32;8178:119;;;8216:79;;:::i;:::-;8178:119;8336:1;8361:53;8406:7;8397:6;8386:9;8382:22;8361:53;:::i;:::-;8351:63;;8307:117;8102:329;;;;:::o;8437:::-;8496:6;8545:2;8533:9;8524:7;8520:23;8516:32;8513:119;;;8551:79;;:::i;:::-;8513:119;8671:1;8696:53;8741:7;8732:6;8721:9;8717:22;8696:53;:::i;:::-;8686:63;;8642:117;8437:329;;;;:::o;8772:474::-;8840:6;8848;8897:2;8885:9;8876:7;8872:23;8868:32;8865:119;;;8903:79;;:::i;:::-;8865:119;9023:1;9048:53;9093:7;9084:6;9073:9;9069:22;9048:53;:::i;:::-;9038:63;;8994:117;9150:2;9176:53;9221:7;9212:6;9201:9;9197:22;9176:53;:::i;:::-;9166:63;;9121:118;8772:474;;;;;:::o;9252:180::-;9300:77;9297:1;9290:88;9397:4;9394:1;9387:15;9421:4;9418:1;9411:15;9438:193;9477:3;9496:19;9513:1;9496:19;:::i;:::-;9491:24;;9529:19;9546:1;9529:19;:::i;:::-;9524:24;;9571:1;9568;9564:9;9557:16;;9594:6;9589:3;9586:15;9583:41;;;9604:18;;:::i;:::-;9583:41;9438:193;;;;:::o;9637:180::-;9685:77;9682:1;9675:88;9782:4;9779:1;9772:15;9806:4;9803:1;9796:15;9823:320;9867:6;9904:1;9898:4;9894:12;9884:22;;9951:1;9945:4;9941:12;9972:18;9962:81;;10028:4;10020:6;10016:17;10006:27;;9962:81;10090:2;10082:6;10079:14;10059:18;10056:38;10053:84;;10109:18;;:::i;:::-;10053:84;9874:269;9823:320;;;:::o;10149:332::-;10270:4;10308:2;10297:9;10293:18;10285:26;;10321:71;10389:1;10378:9;10374:17;10365:6;10321:71;:::i;:::-;10402:72;10470:2;10459:9;10455:18;10446:6;10402:72;:::i;:::-;10149:332;;;;;:::o;10487:98::-;10538:6;10572:5;10566:12;10556:22;;10487:98;;;:::o;10591:147::-;10692:11;10729:3;10714:18;;10591:147;;;;:::o;10744:386::-;10848:3;10876:38;10908:5;10876:38;:::i;:::-;10930:88;11011:6;11006:3;10930:88;:::i;:::-;10923:95;;11027:65;11085:6;11080:3;11073:4;11066:5;11062:16;11027:65;:::i;:::-;11117:6;11112:3;11108:16;11101:23;;10852:278;10744:386;;;;:::o;11136:271::-;11266:3;11288:93;11377:3;11368:6;11288:93;:::i;:::-;11281:100;;11398:3;11391:10;;11136:271;;;;:::o;11413:137::-;11467:5;11498:6;11492:13;11483:22;;11514:30;11538:5;11514:30;:::i;:::-;11413:137;;;;:::o;11556:345::-;11623:6;11672:2;11660:9;11651:7;11647:23;11643:32;11640:119;;;11678:79;;:::i;:::-;11640:119;11798:1;11823:61;11876:7;11867:6;11856:9;11852:22;11823:61;:::i;:::-;11813:71;;11769:125;11556:345;;;;:::o;11907:232::-;12047:34;12043:1;12035:6;12031:14;12024:58;12116:15;12111:2;12103:6;12099:15;12092:40;11907:232;:::o;12145:366::-;12287:3;12308:67;12372:2;12367:3;12308:67;:::i;:::-;12301:74;;12384:93;12473:3;12384:93;:::i;:::-;12502:2;12497:3;12493:12;12486:19;;12145:366;;;:::o;12517:419::-;12683:4;12721:2;12710:9;12706:18;12698:26;;12770:9;12764:4;12760:20;12756:1;12745:9;12741:17;12734:47;12798:131;12924:4;12798:131;:::i;:::-;12790:139;;12517:419;;;:::o;12942:114::-;;:::o;13062:398::-;13221:3;13242:83;13323:1;13318:3;13242:83;:::i;:::-;13235:90;;13334:93;13423:3;13334:93;:::i;:::-;13452:1;13447:3;13443:11;13436:18;;13062:398;;;:::o;13466:379::-;13650:3;13672:147;13815:3;13672:147;:::i;:::-;13665:154;;13836:3;13829:10;;13466:379;;;:::o;13851:410::-;13891:7;13914:20;13932:1;13914:20;:::i;:::-;13909:25;;13948:20;13966:1;13948:20;:::i;:::-;13943:25;;14003:1;14000;13996:9;14025:30;14043:11;14025:30;:::i;:::-;14014:41;;14204:1;14195:7;14191:15;14188:1;14185:22;14165:1;14158:9;14138:83;14115:139;;14234:18;;:::i;:::-;14115:139;13899:362;13851:410;;;;:::o;14267:180::-;14315:77;14312:1;14305:88;14412:4;14409:1;14402:15;14436:4;14433:1;14426:15;14453:185;14493:1;14510:20;14528:1;14510:20;:::i;:::-;14505:25;;14544:20;14562:1;14544:20;:::i;:::-;14539:25;;14583:1;14573:35;;14588:18;;:::i;:::-;14573:35;14630:1;14627;14623:9;14618:14;;14453:185;;;;:::o;14644:442::-;14793:4;14831:2;14820:9;14816:18;14808:26;;14844:71;14912:1;14901:9;14897:17;14888:6;14844:71;:::i;:::-;14925:72;14993:2;14982:9;14978:18;14969:6;14925:72;:::i;:::-;15007;15075:2;15064:9;15060:18;15051:6;15007:72;:::i;:::-;14644:442;;;;;;:::o;15092:180::-;15140:77;15137:1;15130:88;15237:4;15234:1;15227:15;15261:4;15258:1;15251:15;15278:180;15326:77;15323:1;15316:88;15423:4;15420:1;15413:15;15447:4;15444:1;15437:15;15464:143;15521:5;15552:6;15546:13;15537:22;;15568:33;15595:5;15568:33;:::i;:::-;15464:143;;;;:::o;15613:351::-;15683:6;15732:2;15720:9;15711:7;15707:23;15703:32;15700:119;;;15738:79;;:::i;:::-;15700:119;15858:1;15883:64;15939:7;15930:6;15919:9;15915:22;15883:64;:::i;:::-;15873:74;;15829:128;15613:351;;;;:::o;15970:85::-;16015:7;16044:5;16033:16;;15970:85;;;:::o;16061:158::-;16119:9;16152:61;16170:42;16179:32;16205:5;16179:32;:::i;:::-;16170:42;:::i;:::-;16152:61;:::i;:::-;16139:74;;16061:158;;;:::o;16225:147::-;16320:45;16359:5;16320:45;:::i;:::-;16315:3;16308:58;16225:147;;:::o;16378:114::-;16445:6;16479:5;16473:12;16463:22;;16378:114;;;:::o;16498:184::-;16597:11;16631:6;16626:3;16619:19;16671:4;16666:3;16662:14;16647:29;;16498:184;;;;:::o;16688:132::-;16755:4;16778:3;16770:11;;16808:4;16803:3;16799:14;16791:22;;16688:132;;;:::o;16826:108::-;16903:24;16921:5;16903:24;:::i;:::-;16898:3;16891:37;16826:108;;:::o;16940:179::-;17009:10;17030:46;17072:3;17064:6;17030:46;:::i;:::-;17108:4;17103:3;17099:14;17085:28;;16940:179;;;;:::o;17125:113::-;17195:4;17227;17222:3;17218:14;17210:22;;17125:113;;;:::o;17274:732::-;17393:3;17422:54;17470:5;17422:54;:::i;:::-;17492:86;17571:6;17566:3;17492:86;:::i;:::-;17485:93;;17602:56;17652:5;17602:56;:::i;:::-;17681:7;17712:1;17697:284;17722:6;17719:1;17716:13;17697:284;;;17798:6;17792:13;17825:63;17884:3;17869:13;17825:63;:::i;:::-;17818:70;;17911:60;17964:6;17911:60;:::i;:::-;17901:70;;17757:224;17744:1;17741;17737:9;17732:14;;17697:284;;;17701:14;17997:3;17990:10;;17398:608;;;17274:732;;;;:::o;18012:831::-;18275:4;18313:3;18302:9;18298:19;18290:27;;18327:71;18395:1;18384:9;18380:17;18371:6;18327:71;:::i;:::-;18408:80;18484:2;18473:9;18469:18;18460:6;18408:80;:::i;:::-;18535:9;18529:4;18525:20;18520:2;18509:9;18505:18;18498:48;18563:108;18666:4;18657:6;18563:108;:::i;:::-;18555:116;;18681:72;18749:2;18738:9;18734:18;18725:6;18681:72;:::i;:::-;18763:73;18831:3;18820:9;18816:19;18807:6;18763:73;:::i;:::-;18012:831;;;;;;;;:::o;18849:233::-;18888:3;18911:24;18929:5;18911:24;:::i;:::-;18902:33;;18957:66;18950:5;18947:77;18944:103;;19027:18;;:::i;:::-;18944:103;19074:1;19067:5;19063:13;19056:20;;18849:233;;;:::o;19088:191::-;19128:3;19147:20;19165:1;19147:20;:::i;:::-;19142:25;;19181:20;19199:1;19181:20;:::i;:::-;19176:25;;19224:1;19221;19217:9;19210:16;;19245:3;19242:1;19239:10;19236:36;;;19252:18;;:::i;:::-;19236:36;19088:191;;;;:::o;19285:194::-;19325:4;19345:20;19363:1;19345:20;:::i;:::-;19340:25;;19379:20;19397:1;19379:20;:::i;:::-;19374:25;;19423:1;19420;19416:9;19408:17;;19447:1;19441:4;19438:11;19435:37;;;19452:18;;:::i;:::-;19435:37;19285:194;;;;:::o;19485:807::-;19734:4;19772:3;19761:9;19757:19;19749:27;;19786:71;19854:1;19843:9;19839:17;19830:6;19786:71;:::i;:::-;19867:72;19935:2;19924:9;19920:18;19911:6;19867:72;:::i;:::-;19949:80;20025:2;20014:9;20010:18;20001:6;19949:80;:::i;:::-;20039;20115:2;20104:9;20100:18;20091:6;20039:80;:::i;:::-;20129:73;20197:3;20186:9;20182:19;20173:6;20129:73;:::i;:::-;20212;20280:3;20269:9;20265:19;20256:6;20212:73;:::i;:::-;19485:807;;;;;;;;;:::o;20298:143::-;20355:5;20386:6;20380:13;20371:22;;20402:33;20429:5;20402:33;:::i;:::-;20298:143;;;;:::o;20447:663::-;20535:6;20543;20551;20600:2;20588:9;20579:7;20575:23;20571:32;20568:119;;;20606:79;;:::i;:::-;20568:119;20726:1;20751:64;20807:7;20798:6;20787:9;20783:22;20751:64;:::i;:::-;20741:74;;20697:128;20864:2;20890:64;20946:7;20937:6;20926:9;20922:22;20890:64;:::i;:::-;20880:74;;20835:129;21003:2;21029:64;21085:7;21076:6;21065:9;21061:22;21029:64;:::i;:::-;21019:74;;20974:129;20447:663;;;;;:::o
Swarm Source
ipfs://87b0ff77f3edc336dbd125ebaaafb56663837dd29efd4da79ed69f50bc68d9f8
Loading...
Loading
Loading...
Loading
OVERVIEW
Quick Sync empowers users with proprietary decentralized infrastructure, no-code tools, and APIs to build privacy dApps and take full control of their data flowNet Worth in USD
$102.73
Net Worth in ETH
0.036679
Token Allocations
QS
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.002528 | 40,630.4307 | $102.73 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.