ERC-20
MEME
Overview
Max Total Supply
8,991,747,599,999,999.99999999999999 AIBB
Holders
22,740 (0.00%)
Total Transfers
-
Market
Price
$0.00 @ 0.000000 ETH (+0.27%)
Onchain Market Cap
$899,174.76
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
AIBullBear
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2023-04-24 */ /** *Submitted for verification at Etherscan.io on 2023-04-11 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } 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); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address to, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data ) internal returns (bytes memory) { return functionCallWithValue( target, data, 0, "Address: low-level call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data ) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data ) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert( bytes memory returndata, string memory errorMessage ) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require( oldAllowance >= value, "SafeERC20: decreased allowance below zero" ); uint256 newAllowance = oldAllowance - value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require( nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed" ); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains( Set storage set, bytes32 value ) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at( Set storage set, uint256 index ) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add( Bytes32Set storage set, bytes32 value ) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove( Bytes32Set storage set, bytes32 value ) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains( Bytes32Set storage set, bytes32 value ) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at( Bytes32Set storage set, uint256 index ) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values( Bytes32Set storage set ) internal view returns (bytes32[] memory) { bytes32[] memory store = _values(set._inner); bytes32[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add( AddressSet storage set, address value ) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove( AddressSet storage set, address value ) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains( AddressSet storage set, address value ) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at( AddressSet storage set, uint256 index ) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values( AddressSet storage set ) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove( UintSet storage set, uint256 value ) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains( UintSet storage set, uint256 value ) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values in the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at( UintSet storage set, uint256 index ) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values( UintSet storage set ) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } interface ICamelotFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function owner() external view returns (address); function feePercentOwner() external view returns (address); function setStableOwner() external view returns (address); function feeTo() external view returns (address); function ownerFeeShare() external view returns (uint256); function referrersFeeShare(address) external view returns (uint256); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function feeInfo() external view returns (uint _ownerFeeShare, address _feeTo); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function quote( uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IWETH { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } contract AIBullBear is ERC20, Ownable { using SafeERC20 for IERC20; using EnumerableSet for EnumerableSet.AddressSet; mapping(address => bool) public isFeeExempt; mapping(address => bool) public canAddLiquidityBeforeLaunch; // Buy Fees uint256 public burnFeeBuy = 10000; uint256 public treasureBuy = 50000; // Sell Fees uint256 public burnFeeSell = 10000; uint256 public treasureSell = 50000; // Fees receivers address private treasureWallet; uint256 public launchedAt; uint256 public launchedAtTimestamp; bool private initialized; IWETH private immutable WETH; address private constant DEAD = 0x000000000000000000000000000000000000dEaD; address private constant ZERO = 0x0000000000000000000000000000000000000000; EnumerableSet.AddressSet private _pairs; constructor(address _weth) ERC20("BullBear AI", "AIBB") { uint256 _totalSupply = 100_000_000_000_000_000 * 1e18; canAddLiquidityBeforeLaunch[_msgSender()] = true; canAddLiquidityBeforeLaunch[address(this)] = true; isFeeExempt[msg.sender] = true; isFeeExempt[address(this)] = true; WETH = IWETH(_weth); _mint(_msgSender(), _totalSupply); } function initializePair(address _pair) external onlyOwner { require(!initialized, "Already initialized"); _pairs.add(_pair); initialized = true; } function decimals() public view virtual override returns (uint8) { return 18; } function transfer( address to, uint256 amount ) public virtual override returns (bool) { return _tokenTransfer(_msgSender(), to, amount); } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(sender, spender, amount); return _tokenTransfer(sender, recipient, amount); } function _tokenTransfer( address sender, address recipient, uint256 amount ) internal returns (bool) { if (!canAddLiquidityBeforeLaunch[sender]) { require(launched(), "Trading not open yet"); } bool shouldTakeFee = (!isFeeExempt[sender] && !isFeeExempt[recipient]) && launched(); uint side = 0; //swap dex only // buy if (isPair(sender)) { side = 1; } //sell else if (isPair(recipient)) { side = 2; } else { shouldTakeFee = false; } uint256 amountReceived = shouldTakeFee ? takeFee(sender, amount, side) : amount; _transfer(sender, recipient, amountReceived); return true; } function launched() internal view returns (bool) { return launchedAt != 0; } function takeFee( address sender, uint256 amount, uint256 side ) internal returns (uint256) { uint256 feeAmount = 0; if (side == 1) { feeAmount = treasureBuy + burnFeeBuy; _transfer(sender, treasureWallet, treasureBuy); _burn(sender, burnFeeBuy); } else {//=2 only feeAmount = treasureSell + burnFeeSell; _transfer(sender, treasureWallet, treasureSell); _burn(sender, burnFeeSell); } return amount - feeAmount; } function rescueToken(address tokenAddress) external onlyOwner { IERC20(tokenAddress).safeTransfer( msg.sender, IERC20(tokenAddress).balanceOf(address(this)) ); } function clearStuckEthBalance() external onlyOwner { uint256 amountETH = address(this).balance; (bool success, ) = payable(_msgSender()).call{value: amountETH}( new bytes(0) ); require(success, "AIBB: ETH_TRANSFER_FAILED"); } // function getCirculatingSupply() public view returns (uint256) { // return totalSupply() - balanceOf(DEAD) - balanceOf(ZERO); // } /*** ADMIN FUNCTIONS ***/ function launch() public onlyOwner { require(launchedAt == 0, "Already launched"); launchedAt = block.number; launchedAtTimestamp = block.timestamp; } function setBuyFees( uint256 _treasureFee, uint256 _burnFee ) external onlyOwner { burnFeeBuy = _burnFee; treasureBuy = _treasureFee; } function setSellFees( uint256 _treasureFee, uint256 _burnFee ) external onlyOwner { burnFeeSell = _burnFee; treasureSell = _treasureFee; } function setFeeReceivers(address _treasureWallet) external onlyOwner { treasureWallet = _treasureWallet; } function setAllowLiquidityAddressBeforeLaunch(address _allow) external onlyOwner { canAddLiquidityBeforeLaunch[_allow] = true; } function setIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function isPair(address account) public view returns (bool) { return _pairs.contains(account); } function addPair(address pair) public onlyOwner returns (bool) { require(pair != address(0), "AIBB: pair is the zero address"); return _pairs.add(pair); } function delPair(address pair) public onlyOwner returns (bool) { require(pair != address(0), "AIBB: pair is the zero address"); return _pairs.remove(pair); } function getMinterLength() public view returns (uint256) { return _pairs.length(); } function getPair(uint256 index) public view returns (address) { require(index <= _pairs.length() - 1, "AIBB: index out of bounds"); return _pairs.at(index); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_weth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"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":[{"internalType":"address","name":"pair","type":"address"}],"name":"addPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canAddLiquidityBeforeLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckEthBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"delPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMinterLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"initializePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_allow","type":"address"}],"name":"setAllowLiquidityAddressBeforeLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasureFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasureWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasureFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setSellFees","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":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasureBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasureSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405261271060085561c350600955612710600a5561c350600b553480156200002957600080fd5b5060405162003eb138038062003eb183398181016040528101906200004f919062000590565b6040518060400160405280600b81526020017f42756c6c426561722041490000000000000000000000000000000000000000008152506040518060400160405280600481526020017f41494242000000000000000000000000000000000000000000000000000000008152508160039081620000cc91906200083c565b508060049081620000de91906200083c565b50505062000101620000f5620002e160201b60201c565b620002e960201b60201c565b60006e13426172c74d822b878fe80000000090506001600760006200012b620002e160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620002d9620002cc620002e160201b60201c565b82620003af60201b60201c565b505062000a3e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004189062000984565b60405180910390fd5b62000435600083836200051c60201b60201c565b8060026000828254620004499190620009d5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004fc919062000a21565b60405180910390a362000518600083836200052160201b60201c565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000558826200052b565b9050919050565b6200056a816200054b565b81146200057657600080fd5b50565b6000815190506200058a816200055f565b92915050565b600060208284031215620005a957620005a862000526565b5b6000620005b98482850162000579565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200064457607f821691505b6020821081036200065a5762000659620005fc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000685565b620006d0868362000685565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200071d620007176200071184620006e8565b620006f2565b620006e8565b9050919050565b6000819050919050565b6200073983620006fc565b62000751620007488262000724565b84845462000692565b825550505050565b600090565b6200076862000759565b620007758184846200072e565b505050565b5b818110156200079d57620007916000826200075e565b6001810190506200077b565b5050565b601f821115620007ec57620007b68162000660565b620007c18462000675565b81016020851015620007d1578190505b620007e9620007e08562000675565b8301826200077a565b50505b505050565b600082821c905092915050565b60006200081160001984600802620007f1565b1980831691505092915050565b60006200082c8383620007fe565b9150826002028217905092915050565b6200084782620005c2565b67ffffffffffffffff811115620008635762000862620005cd565b5b6200086f82546200062b565b6200087c828285620007a1565b600060209050601f831160018114620008b457600084156200089f578287015190505b620008ab85826200081e565b8655506200091b565b601f198416620008c48662000660565b60005b82811015620008ee57848901518255600182019150602085019450602081019050620008c7565b868310156200090e57848901516200090a601f891682620007fe565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200096c601f8362000923565b9150620009798262000934565b602082019050919050565b600060208201905081810360008301526200099f816200095d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009e282620006e8565b9150620009ef83620006e8565b925082820190508082111562000a0a5762000a09620009a6565b5b92915050565b62000a1b81620006e8565b82525050565b600060208201905062000a38600083018462000a10565b92915050565b60805161345a62000a576000396000505061345a6000f3fe6080604052600436106102295760003560e01c80638072250b11610123578063bdf391cc116100ab578063cd3edf2f1161006f578063cd3edf2f1461083a578063dd62ed3e14610865578063e01bb688146108a2578063e5e31b13146108cb578063f2fde38b1461090857610230565b8063bdf391cc14610753578063bf56b37114610790578063bfa382b5146107bb578063c2b7bbb6146107d2578063c6d2577d1461080f57610230565b80639fd8234e116100f25780639fd8234e1461064a578063a457c2d714610673578063a5bc5085146106b0578063a9059cbb146106ed578063b2d8f2081461072a57610230565b80638072250b1461058e5780638d85f1cd146105cb5780638da5cb5b146105f457806395d89b411461061f57610230565b80632a55fc2a116101b15780634460d3cf116101755780634460d3cf146104bf578063658d4b7f146104e857806370a0823114610511578063715018a61461054e57806379cc67901461056557610230565b80632a55fc2a146103c8578063313ce567146103f1578063395093511461041c5780633f4218e01461045957806342966c681461049657610230565b806315674e8e116101f857806315674e8e146102df57806318160ddd1461030a578063234a2daa1461033557806323b872dd146103605780632a19cecd1461039d57610230565b806301339c21146102355780630323aac71461024c57806306fdde0314610277578063095ea7b3146102a257610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610931565b005b34801561025857600080fd5b5061026161098e565b60405161026e91906123b7565b60405180910390f35b34801561028357600080fd5b5061028c61099f565b6040516102999190612462565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190612513565b610a31565b6040516102d6919061256e565b60405180910390f35b3480156102eb57600080fd5b506102f4610a54565b60405161030191906123b7565b60405180910390f35b34801561031657600080fd5b5061031f610a5a565b60405161032c91906123b7565b60405180910390f35b34801561034157600080fd5b5061034a610a64565b60405161035791906123b7565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190612589565b610a6a565b604051610394919061256e565b60405180910390f35b3480156103a957600080fd5b506103b2610a97565b6040516103bf91906123b7565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea91906125dc565b610a9d565b005b3480156103fd57600080fd5b50610406610b28565b6040516104139190612625565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190612513565b610b31565b604051610450919061256e565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b91906125dc565b610b68565b60405161048d919061256e565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190612640565b610b88565b005b3480156104cb57600080fd5b506104e660048036038101906104e191906125dc565b610b9c565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190612699565b610c4b565b005b34801561051d57600080fd5b50610538600480360381019061053391906125dc565b610cae565b60405161054591906123b7565b60405180910390f35b34801561055a57600080fd5b50610563610cf6565b005b34801561057157600080fd5b5061058c60048036038101906105879190612513565b610d0a565b005b34801561059a57600080fd5b506105b560048036038101906105b091906125dc565b610d2a565b6040516105c2919061256e565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906125dc565b610d4a565b005b34801561060057600080fd5b50610609610dad565b60405161061691906126e8565b60405180910390f35b34801561062b57600080fd5b50610634610dd7565b6040516106419190612462565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c9190612703565b610e69565b005b34801561067f57600080fd5b5061069a60048036038101906106959190612513565b610e83565b6040516106a7919061256e565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d291906125dc565b610efa565b6040516106e4919061256e565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190612513565b610f8e565b604051610721919061256e565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190612703565b610faa565b005b34801561075f57600080fd5b5061077a60048036038101906107759190612640565b610fc4565b60405161078791906126e8565b60405180910390f35b34801561079c57600080fd5b506107a5611039565b6040516107b291906123b7565b60405180910390f35b3480156107c757600080fd5b506107d061103f565b005b3480156107de57600080fd5b506107f960048036038101906107f491906125dc565b611152565b604051610806919061256e565b60405180910390f35b34801561081b57600080fd5b506108246111e6565b60405161083191906123b7565b60405180910390f35b34801561084657600080fd5b5061084f6111ec565b60405161085c91906123b7565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190612743565b6111f2565b60405161089991906123b7565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c491906125dc565b611279565b005b3480156108d757600080fd5b506108f260048036038101906108ed91906125dc565b6112c5565b6040516108ff919061256e565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a91906125dc565b6112e2565b005b610939611365565b6000600d541461097e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610975906127cf565b60405180910390fd5b43600d8190555042600e81905550565b600061099a60106113e3565b905090565b6060600380546109ae9061281e565b80601f01602080910402602001604051908101604052809291908181526020018280546109da9061281e565b8015610a275780601f106109fc57610100808354040283529160200191610a27565b820191906000526020600020905b815481529060010190602001808311610a0a57829003601f168201915b5050505050905090565b600080610a3c6113f8565b9050610a49818585611400565b600191505092915050565b60085481565b6000600254905090565b600a5481565b600080610a756113f8565b9050610a828582856115c9565b610a8d858585611655565b9150509392505050565b600b5481565b610aa5611365565b600f60009054906101000a900460ff1615610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec9061289b565b60405180910390fd5b610b0981601061181290919063ffffffff16565b506001600f60006101000a81548160ff02191690831515021790555050565b60006012905090565b600080610b3c6113f8565b9050610b5d818585610b4e85896111f2565b610b5891906128ea565b611400565b600191505092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b610b99610b936113f8565b82611842565b50565b610ba4611365565b610c48338273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610be191906126e8565b602060405180830381865afa158015610bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c229190612933565b8373ffffffffffffffffffffffffffffffffffffffff16611a0f9092919063ffffffff16565b50565b610c53611365565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cfe611365565b610d086000611a95565b565b610d1c82610d166113f8565b836115c9565b610d268282611842565b5050565b60076020528060005260406000206000915054906101000a900460ff1681565b610d52611365565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610de69061281e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e129061281e565b8015610e5f5780601f10610e3457610100808354040283529160200191610e5f565b820191906000526020600020905b815481529060010190602001808311610e4257829003601f168201915b5050505050905090565b610e71611365565b80600a8190555081600b819055505050565b600080610e8e6113f8565b90506000610e9c82866111f2565b905083811015610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed8906129d2565b60405180910390fd5b610eee8286868403611400565b60019250505092915050565b6000610f04611365565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90612a3e565b60405180910390fd5b610f87826010611b5b90919063ffffffff16565b9050919050565b6000610fa2610f9b6113f8565b8484611655565b905092915050565b610fb2611365565b80600881905550816009819055505050565b60006001610fd260106113e3565b610fdc9190612a5e565b82111561101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590612ade565b60405180910390fd5b611032826010611b8b90919063ffffffff16565b9050919050565b600d5481565b611047611365565b600047905060006110566113f8565b73ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81111561108857611087612afe565b5b6040519080825280601f01601f1916602001820160405280156110ba5781602001600182028036833780820191505090505b506040516110c89190612b74565b60006040518083038185875af1925050503d8060008114611105576040519150601f19603f3d011682016040523d82523d6000602084013e61110a565b606091505b505090508061114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114590612bd7565b60405180910390fd5b5050565b600061115c611365565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290612a3e565b60405180910390fd5b6111df82601061181290919063ffffffff16565b9050919050565b600e5481565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611281611365565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006112db826010611ba590919063ffffffff16565b9050919050565b6112ea611365565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090612c69565b60405180910390fd5b61136281611a95565b50565b61136d6113f8565b73ffffffffffffffffffffffffffffffffffffffff1661138b610dad565b73ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890612cd5565b60405180910390fd5b565b60006113f182600001611bd5565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690612d67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590612df9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115bc91906123b7565b60405180910390a3505050565b60006115d584846111f2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461164f5781811015611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163890612e65565b60405180910390fd5b61164e8484848403611400565b5b50505050565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116f0576116b0611be6565b6116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e690612ed1565b60405180910390fd5b5b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117965750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117a657506117a5611be6565b5b905060006117b3866112c5565b156117c157600190506117de565b6117ca856112c5565b156117d857600290506117dd565b600091505b5b6000826117eb57846117f7565b6117f6878684611bf3565b5b9050611804878783611cb8565b600193505050509392505050565b600061183a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611f2e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890612f63565b60405180910390fd5b6118bd82600083611f9e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a90612ff5565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119f691906123b7565b60405180910390a3611a0a83600084611fa3565b505050565b611a908363a9059cbb60e01b8484604051602401611a2e929190613015565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611fa8565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611b83836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61206f565b905092915050565b6000611b9a8360000183612183565b60001c905092915050565b6000611bcd836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6121ae565b905092915050565b600081600001805490509050919050565b600080600d541415905090565b6000806000905060018303611c5457600854600954611c1291906128ea565b9050611c4385600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954611cb8565b611c4f85600854611842565b611ca2565b600a54600b54611c6491906128ea565b9050611c9585600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b54611cb8565b611ca185600a54611842565b5b8084611cae9190612a5e565b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e906130b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613142565b60405180910390fd5b611da1838383611f9e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906131d4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f1591906123b7565b60405180910390a3611f28848484611fa3565b50505050565b6000611f3a83836121ae565b611f93578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611f98565b600090505b92915050565b505050565b505050565b600061200a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121d19092919063ffffffff16565b905060008151111561206a578080602001905181019061202a9190613209565b612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612060906132a8565b60405180910390fd5b5b505050565b600080836001016000848152602001908152602001600020549050600081146121775760006001826120a19190612a5e565b90506000600186600001805490506120b99190612a5e565b90508181146121285760008660000182815481106120da576120d96132c8565b5b90600052602060002001549050808760000184815481106120fe576120fd6132c8565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061213c5761213b6132f7565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061217d565b60009150505b92915050565b600082600001828154811061219b5761219a6132c8565b5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b60606121e084846000856121e9565b90509392505050565b60608247101561222e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222590613398565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122579190612b74565b60006040518083038185875af1925050503d8060008114612294576040519150601f19603f3d011682016040523d82523d6000602084013e612299565b606091505b50915091506122aa878383876122b6565b92505050949350505050565b60608315612318576000835103612310576122d08561232b565b61230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690613404565b60405180910390fd5b5b829050612323565b612322838361234e565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156123615781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123959190612462565b60405180910390fd5b6000819050919050565b6123b18161239e565b82525050565b60006020820190506123cc60008301846123a8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561240c5780820151818401526020810190506123f1565b60008484015250505050565b6000601f19601f8301169050919050565b6000612434826123d2565b61243e81856123dd565b935061244e8185602086016123ee565b61245781612418565b840191505092915050565b6000602082019050818103600083015261247c8184612429565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124b482612489565b9050919050565b6124c4816124a9565b81146124cf57600080fd5b50565b6000813590506124e1816124bb565b92915050565b6124f08161239e565b81146124fb57600080fd5b50565b60008135905061250d816124e7565b92915050565b6000806040838503121561252a57612529612484565b5b6000612538858286016124d2565b9250506020612549858286016124fe565b9150509250929050565b60008115159050919050565b61256881612553565b82525050565b6000602082019050612583600083018461255f565b92915050565b6000806000606084860312156125a2576125a1612484565b5b60006125b0868287016124d2565b93505060206125c1868287016124d2565b92505060406125d2868287016124fe565b9150509250925092565b6000602082840312156125f2576125f1612484565b5b6000612600848285016124d2565b91505092915050565b600060ff82169050919050565b61261f81612609565b82525050565b600060208201905061263a6000830184612616565b92915050565b60006020828403121561265657612655612484565b5b6000612664848285016124fe565b91505092915050565b61267681612553565b811461268157600080fd5b50565b6000813590506126938161266d565b92915050565b600080604083850312156126b0576126af612484565b5b60006126be858286016124d2565b92505060206126cf85828601612684565b9150509250929050565b6126e2816124a9565b82525050565b60006020820190506126fd60008301846126d9565b92915050565b6000806040838503121561271a57612719612484565b5b6000612728858286016124fe565b9250506020612739858286016124fe565b9150509250929050565b6000806040838503121561275a57612759612484565b5b6000612768858286016124d2565b9250506020612779858286016124d2565b9150509250929050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b60006127b96010836123dd565b91506127c482612783565b602082019050919050565b600060208201905081810360008301526127e8816127ac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061283657607f821691505b602082108103612849576128486127ef565b5b50919050565b7f416c726561647920696e697469616c697a656400000000000000000000000000600082015250565b60006128856013836123dd565b91506128908261284f565b602082019050919050565b600060208201905081810360008301526128b481612878565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128f58261239e565b91506129008361239e565b9250828201905080821115612918576129176128bb565b5b92915050565b60008151905061292d816124e7565b92915050565b60006020828403121561294957612948612484565b5b60006129578482850161291e565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006129bc6025836123dd565b91506129c782612960565b604082019050919050565b600060208201905081810360008301526129eb816129af565b9050919050565b7f414942423a207061697220697320746865207a65726f20616464726573730000600082015250565b6000612a28601e836123dd565b9150612a33826129f2565b602082019050919050565b60006020820190508181036000830152612a5781612a1b565b9050919050565b6000612a698261239e565b9150612a748361239e565b9250828203905081811115612a8c57612a8b6128bb565b5b92915050565b7f414942423a20696e646578206f7574206f6620626f756e647300000000000000600082015250565b6000612ac86019836123dd565b9150612ad382612a92565b602082019050919050565b60006020820190508181036000830152612af781612abb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600081905092915050565b6000612b4e82612b2d565b612b588185612b38565b9350612b688185602086016123ee565b80840191505092915050565b6000612b808284612b43565b915081905092915050565b7f414942423a204554485f5452414e534645525f4641494c454400000000000000600082015250565b6000612bc16019836123dd565b9150612bcc82612b8b565b602082019050919050565b60006020820190508181036000830152612bf081612bb4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612c536026836123dd565b9150612c5e82612bf7565b604082019050919050565b60006020820190508181036000830152612c8281612c46565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cbf6020836123dd565b9150612cca82612c89565b602082019050919050565b60006020820190508181036000830152612cee81612cb2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612d516024836123dd565b9150612d5c82612cf5565b604082019050919050565b60006020820190508181036000830152612d8081612d44565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612de36022836123dd565b9150612dee82612d87565b604082019050919050565b60006020820190508181036000830152612e1281612dd6565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612e4f601d836123dd565b9150612e5a82612e19565b602082019050919050565b60006020820190508181036000830152612e7e81612e42565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000612ebb6014836123dd565b9150612ec682612e85565b602082019050919050565b60006020820190508181036000830152612eea81612eae565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f4d6021836123dd565b9150612f5882612ef1565b604082019050919050565b60006020820190508181036000830152612f7c81612f40565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fdf6022836123dd565b9150612fea82612f83565b604082019050919050565b6000602082019050818103600083015261300e81612fd2565b9050919050565b600060408201905061302a60008301856126d9565b61303760208301846123a8565b9392505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061309a6025836123dd565b91506130a58261303e565b604082019050919050565b600060208201905081810360008301526130c98161308d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061312c6023836123dd565b9150613137826130d0565b604082019050919050565b6000602082019050818103600083015261315b8161311f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006131be6026836123dd565b91506131c982613162565b604082019050919050565b600060208201905081810360008301526131ed816131b1565b9050919050565b6000815190506132038161266d565b92915050565b60006020828403121561321f5761321e612484565b5b600061322d848285016131f4565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613292602a836123dd565b915061329d82613236565b604082019050919050565b600060208201905081810360008301526132c181613285565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006133826026836123dd565b915061338d82613326565b604082019050919050565b600060208201905081810360008301526133b181613375565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006133ee601d836123dd565b91506133f9826133b8565b602082019050919050565b6000602082019050818103600083015261341d816133e1565b905091905056fea2646970667358221220c112cd6fa5e0a6e3d8b40f08ee583d80241f2faeed0143ed543f3ba0f79d292864736f6c6343000812003300000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Deployed Bytecode
0x6080604052600436106102295760003560e01c80638072250b11610123578063bdf391cc116100ab578063cd3edf2f1161006f578063cd3edf2f1461083a578063dd62ed3e14610865578063e01bb688146108a2578063e5e31b13146108cb578063f2fde38b1461090857610230565b8063bdf391cc14610753578063bf56b37114610790578063bfa382b5146107bb578063c2b7bbb6146107d2578063c6d2577d1461080f57610230565b80639fd8234e116100f25780639fd8234e1461064a578063a457c2d714610673578063a5bc5085146106b0578063a9059cbb146106ed578063b2d8f2081461072a57610230565b80638072250b1461058e5780638d85f1cd146105cb5780638da5cb5b146105f457806395d89b411461061f57610230565b80632a55fc2a116101b15780634460d3cf116101755780634460d3cf146104bf578063658d4b7f146104e857806370a0823114610511578063715018a61461054e57806379cc67901461056557610230565b80632a55fc2a146103c8578063313ce567146103f1578063395093511461041c5780633f4218e01461045957806342966c681461049657610230565b806315674e8e116101f857806315674e8e146102df57806318160ddd1461030a578063234a2daa1461033557806323b872dd146103605780632a19cecd1461039d57610230565b806301339c21146102355780630323aac71461024c57806306fdde0314610277578063095ea7b3146102a257610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610931565b005b34801561025857600080fd5b5061026161098e565b60405161026e91906123b7565b60405180910390f35b34801561028357600080fd5b5061028c61099f565b6040516102999190612462565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190612513565b610a31565b6040516102d6919061256e565b60405180910390f35b3480156102eb57600080fd5b506102f4610a54565b60405161030191906123b7565b60405180910390f35b34801561031657600080fd5b5061031f610a5a565b60405161032c91906123b7565b60405180910390f35b34801561034157600080fd5b5061034a610a64565b60405161035791906123b7565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190612589565b610a6a565b604051610394919061256e565b60405180910390f35b3480156103a957600080fd5b506103b2610a97565b6040516103bf91906123b7565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea91906125dc565b610a9d565b005b3480156103fd57600080fd5b50610406610b28565b6040516104139190612625565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190612513565b610b31565b604051610450919061256e565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b91906125dc565b610b68565b60405161048d919061256e565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190612640565b610b88565b005b3480156104cb57600080fd5b506104e660048036038101906104e191906125dc565b610b9c565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190612699565b610c4b565b005b34801561051d57600080fd5b50610538600480360381019061053391906125dc565b610cae565b60405161054591906123b7565b60405180910390f35b34801561055a57600080fd5b50610563610cf6565b005b34801561057157600080fd5b5061058c60048036038101906105879190612513565b610d0a565b005b34801561059a57600080fd5b506105b560048036038101906105b091906125dc565b610d2a565b6040516105c2919061256e565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906125dc565b610d4a565b005b34801561060057600080fd5b50610609610dad565b60405161061691906126e8565b60405180910390f35b34801561062b57600080fd5b50610634610dd7565b6040516106419190612462565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c9190612703565b610e69565b005b34801561067f57600080fd5b5061069a60048036038101906106959190612513565b610e83565b6040516106a7919061256e565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d291906125dc565b610efa565b6040516106e4919061256e565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190612513565b610f8e565b604051610721919061256e565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190612703565b610faa565b005b34801561075f57600080fd5b5061077a60048036038101906107759190612640565b610fc4565b60405161078791906126e8565b60405180910390f35b34801561079c57600080fd5b506107a5611039565b6040516107b291906123b7565b60405180910390f35b3480156107c757600080fd5b506107d061103f565b005b3480156107de57600080fd5b506107f960048036038101906107f491906125dc565b611152565b604051610806919061256e565b60405180910390f35b34801561081b57600080fd5b506108246111e6565b60405161083191906123b7565b60405180910390f35b34801561084657600080fd5b5061084f6111ec565b60405161085c91906123b7565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190612743565b6111f2565b60405161089991906123b7565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c491906125dc565b611279565b005b3480156108d757600080fd5b506108f260048036038101906108ed91906125dc565b6112c5565b6040516108ff919061256e565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a91906125dc565b6112e2565b005b610939611365565b6000600d541461097e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610975906127cf565b60405180910390fd5b43600d8190555042600e81905550565b600061099a60106113e3565b905090565b6060600380546109ae9061281e565b80601f01602080910402602001604051908101604052809291908181526020018280546109da9061281e565b8015610a275780601f106109fc57610100808354040283529160200191610a27565b820191906000526020600020905b815481529060010190602001808311610a0a57829003601f168201915b5050505050905090565b600080610a3c6113f8565b9050610a49818585611400565b600191505092915050565b60085481565b6000600254905090565b600a5481565b600080610a756113f8565b9050610a828582856115c9565b610a8d858585611655565b9150509392505050565b600b5481565b610aa5611365565b600f60009054906101000a900460ff1615610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec9061289b565b60405180910390fd5b610b0981601061181290919063ffffffff16565b506001600f60006101000a81548160ff02191690831515021790555050565b60006012905090565b600080610b3c6113f8565b9050610b5d818585610b4e85896111f2565b610b5891906128ea565b611400565b600191505092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b610b99610b936113f8565b82611842565b50565b610ba4611365565b610c48338273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610be191906126e8565b602060405180830381865afa158015610bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c229190612933565b8373ffffffffffffffffffffffffffffffffffffffff16611a0f9092919063ffffffff16565b50565b610c53611365565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cfe611365565b610d086000611a95565b565b610d1c82610d166113f8565b836115c9565b610d268282611842565b5050565b60076020528060005260406000206000915054906101000a900460ff1681565b610d52611365565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610de69061281e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e129061281e565b8015610e5f5780601f10610e3457610100808354040283529160200191610e5f565b820191906000526020600020905b815481529060010190602001808311610e4257829003601f168201915b5050505050905090565b610e71611365565b80600a8190555081600b819055505050565b600080610e8e6113f8565b90506000610e9c82866111f2565b905083811015610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed8906129d2565b60405180910390fd5b610eee8286868403611400565b60019250505092915050565b6000610f04611365565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90612a3e565b60405180910390fd5b610f87826010611b5b90919063ffffffff16565b9050919050565b6000610fa2610f9b6113f8565b8484611655565b905092915050565b610fb2611365565b80600881905550816009819055505050565b60006001610fd260106113e3565b610fdc9190612a5e565b82111561101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590612ade565b60405180910390fd5b611032826010611b8b90919063ffffffff16565b9050919050565b600d5481565b611047611365565b600047905060006110566113f8565b73ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81111561108857611087612afe565b5b6040519080825280601f01601f1916602001820160405280156110ba5781602001600182028036833780820191505090505b506040516110c89190612b74565b60006040518083038185875af1925050503d8060008114611105576040519150601f19603f3d011682016040523d82523d6000602084013e61110a565b606091505b505090508061114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114590612bd7565b60405180910390fd5b5050565b600061115c611365565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290612a3e565b60405180910390fd5b6111df82601061181290919063ffffffff16565b9050919050565b600e5481565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611281611365565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006112db826010611ba590919063ffffffff16565b9050919050565b6112ea611365565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090612c69565b60405180910390fd5b61136281611a95565b50565b61136d6113f8565b73ffffffffffffffffffffffffffffffffffffffff1661138b610dad565b73ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890612cd5565b60405180910390fd5b565b60006113f182600001611bd5565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690612d67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590612df9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115bc91906123b7565b60405180910390a3505050565b60006115d584846111f2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461164f5781811015611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163890612e65565b60405180910390fd5b61164e8484848403611400565b5b50505050565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116f0576116b0611be6565b6116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e690612ed1565b60405180910390fd5b5b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117965750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117a657506117a5611be6565b5b905060006117b3866112c5565b156117c157600190506117de565b6117ca856112c5565b156117d857600290506117dd565b600091505b5b6000826117eb57846117f7565b6117f6878684611bf3565b5b9050611804878783611cb8565b600193505050509392505050565b600061183a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611f2e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890612f63565b60405180910390fd5b6118bd82600083611f9e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a90612ff5565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119f691906123b7565b60405180910390a3611a0a83600084611fa3565b505050565b611a908363a9059cbb60e01b8484604051602401611a2e929190613015565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611fa8565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611b83836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61206f565b905092915050565b6000611b9a8360000183612183565b60001c905092915050565b6000611bcd836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6121ae565b905092915050565b600081600001805490509050919050565b600080600d541415905090565b6000806000905060018303611c5457600854600954611c1291906128ea565b9050611c4385600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954611cb8565b611c4f85600854611842565b611ca2565b600a54600b54611c6491906128ea565b9050611c9585600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b54611cb8565b611ca185600a54611842565b5b8084611cae9190612a5e565b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e906130b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613142565b60405180910390fd5b611da1838383611f9e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906131d4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f1591906123b7565b60405180910390a3611f28848484611fa3565b50505050565b6000611f3a83836121ae565b611f93578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611f98565b600090505b92915050565b505050565b505050565b600061200a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121d19092919063ffffffff16565b905060008151111561206a578080602001905181019061202a9190613209565b612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612060906132a8565b60405180910390fd5b5b505050565b600080836001016000848152602001908152602001600020549050600081146121775760006001826120a19190612a5e565b90506000600186600001805490506120b99190612a5e565b90508181146121285760008660000182815481106120da576120d96132c8565b5b90600052602060002001549050808760000184815481106120fe576120fd6132c8565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061213c5761213b6132f7565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061217d565b60009150505b92915050565b600082600001828154811061219b5761219a6132c8565b5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b60606121e084846000856121e9565b90509392505050565b60608247101561222e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222590613398565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122579190612b74565b60006040518083038185875af1925050503d8060008114612294576040519150601f19603f3d011682016040523d82523d6000602084013e612299565b606091505b50915091506122aa878383876122b6565b92505050949350505050565b60608315612318576000835103612310576122d08561232b565b61230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690613404565b60405180910390fd5b5b829050612323565b612322838361234e565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156123615781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123959190612462565b60405180910390fd5b6000819050919050565b6123b18161239e565b82525050565b60006020820190506123cc60008301846123a8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561240c5780820151818401526020810190506123f1565b60008484015250505050565b6000601f19601f8301169050919050565b6000612434826123d2565b61243e81856123dd565b935061244e8185602086016123ee565b61245781612418565b840191505092915050565b6000602082019050818103600083015261247c8184612429565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124b482612489565b9050919050565b6124c4816124a9565b81146124cf57600080fd5b50565b6000813590506124e1816124bb565b92915050565b6124f08161239e565b81146124fb57600080fd5b50565b60008135905061250d816124e7565b92915050565b6000806040838503121561252a57612529612484565b5b6000612538858286016124d2565b9250506020612549858286016124fe565b9150509250929050565b60008115159050919050565b61256881612553565b82525050565b6000602082019050612583600083018461255f565b92915050565b6000806000606084860312156125a2576125a1612484565b5b60006125b0868287016124d2565b93505060206125c1868287016124d2565b92505060406125d2868287016124fe565b9150509250925092565b6000602082840312156125f2576125f1612484565b5b6000612600848285016124d2565b91505092915050565b600060ff82169050919050565b61261f81612609565b82525050565b600060208201905061263a6000830184612616565b92915050565b60006020828403121561265657612655612484565b5b6000612664848285016124fe565b91505092915050565b61267681612553565b811461268157600080fd5b50565b6000813590506126938161266d565b92915050565b600080604083850312156126b0576126af612484565b5b60006126be858286016124d2565b92505060206126cf85828601612684565b9150509250929050565b6126e2816124a9565b82525050565b60006020820190506126fd60008301846126d9565b92915050565b6000806040838503121561271a57612719612484565b5b6000612728858286016124fe565b9250506020612739858286016124fe565b9150509250929050565b6000806040838503121561275a57612759612484565b5b6000612768858286016124d2565b9250506020612779858286016124d2565b9150509250929050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b60006127b96010836123dd565b91506127c482612783565b602082019050919050565b600060208201905081810360008301526127e8816127ac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061283657607f821691505b602082108103612849576128486127ef565b5b50919050565b7f416c726561647920696e697469616c697a656400000000000000000000000000600082015250565b60006128856013836123dd565b91506128908261284f565b602082019050919050565b600060208201905081810360008301526128b481612878565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128f58261239e565b91506129008361239e565b9250828201905080821115612918576129176128bb565b5b92915050565b60008151905061292d816124e7565b92915050565b60006020828403121561294957612948612484565b5b60006129578482850161291e565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006129bc6025836123dd565b91506129c782612960565b604082019050919050565b600060208201905081810360008301526129eb816129af565b9050919050565b7f414942423a207061697220697320746865207a65726f20616464726573730000600082015250565b6000612a28601e836123dd565b9150612a33826129f2565b602082019050919050565b60006020820190508181036000830152612a5781612a1b565b9050919050565b6000612a698261239e565b9150612a748361239e565b9250828203905081811115612a8c57612a8b6128bb565b5b92915050565b7f414942423a20696e646578206f7574206f6620626f756e647300000000000000600082015250565b6000612ac86019836123dd565b9150612ad382612a92565b602082019050919050565b60006020820190508181036000830152612af781612abb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600081905092915050565b6000612b4e82612b2d565b612b588185612b38565b9350612b688185602086016123ee565b80840191505092915050565b6000612b808284612b43565b915081905092915050565b7f414942423a204554485f5452414e534645525f4641494c454400000000000000600082015250565b6000612bc16019836123dd565b9150612bcc82612b8b565b602082019050919050565b60006020820190508181036000830152612bf081612bb4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612c536026836123dd565b9150612c5e82612bf7565b604082019050919050565b60006020820190508181036000830152612c8281612c46565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cbf6020836123dd565b9150612cca82612c89565b602082019050919050565b60006020820190508181036000830152612cee81612cb2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612d516024836123dd565b9150612d5c82612cf5565b604082019050919050565b60006020820190508181036000830152612d8081612d44565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612de36022836123dd565b9150612dee82612d87565b604082019050919050565b60006020820190508181036000830152612e1281612dd6565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612e4f601d836123dd565b9150612e5a82612e19565b602082019050919050565b60006020820190508181036000830152612e7e81612e42565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000612ebb6014836123dd565b9150612ec682612e85565b602082019050919050565b60006020820190508181036000830152612eea81612eae565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f4d6021836123dd565b9150612f5882612ef1565b604082019050919050565b60006020820190508181036000830152612f7c81612f40565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fdf6022836123dd565b9150612fea82612f83565b604082019050919050565b6000602082019050818103600083015261300e81612fd2565b9050919050565b600060408201905061302a60008301856126d9565b61303760208301846123a8565b9392505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061309a6025836123dd565b91506130a58261303e565b604082019050919050565b600060208201905081810360008301526130c98161308d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061312c6023836123dd565b9150613137826130d0565b604082019050919050565b6000602082019050818103600083015261315b8161311f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006131be6026836123dd565b91506131c982613162565b604082019050919050565b600060208201905081810360008301526131ed816131b1565b9050919050565b6000815190506132038161266d565b92915050565b60006020828403121561321f5761321e612484565b5b600061322d848285016131f4565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613292602a836123dd565b915061329d82613236565b604082019050919050565b600060208201905081810360008301526132c181613285565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006133826026836123dd565b915061338d82613326565b604082019050919050565b600060208201905081810360008301526133b181613375565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006133ee601d836123dd565b91506133f9826133b8565b602082019050919050565b6000602082019050818103600083015261341d816133e1565b905091905056fea2646970667358221220c112cd6fa5e0a6e3d8b40f08ee583d80241f2faeed0143ed543f3ba0f79d292864736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
-----Decoded View---------------
Arg [0] : _weth (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Deployed Bytecode Sourcemap
50241:6106:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54549:182;;;;;;;;;;;;;:::i;:::-;;56020:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4418:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6835:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50517:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5538:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50618:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52013:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50661:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51540:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51728:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8345:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50380:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15287:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53859:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55402:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5709:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32889:103;;;;;;;;;;;;;:::i;:::-;;15386:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50430:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55250:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32241:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4637:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54928:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9111:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55832:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51829:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54739:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50767:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54077:279;;;;;;;;;;;;;:::i;:::-;;55647:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50799:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50559;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6339:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55120:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55529:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33147:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54549:182;32127:13;:11;:13::i;:::-;54617:1:::1;54603:10;;:15;54595:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;54663:12;54650:10;:25;;;;54708:15;54686:19;:37;;;;54549:182::o:0;56020:98::-;56068:7;56095:15;:6;:13;:15::i;:::-;56088:22;;56020:98;:::o;4418:100::-;4472:13;4505:5;4498:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4418:100;:::o;6835:226::-;6943:4;6960:13;6976:12;:10;:12::i;:::-;6960:28;;6999:32;7008:5;7015:7;7024:6;6999:8;:32::i;:::-;7049:4;7042:11;;;6835:226;;;;:::o;50517:33::-;;;;:::o;5538:108::-;5599:7;5626:12;;5619:19;;5538:108;:::o;50618:34::-;;;;:::o;52013:305::-;52153:4;52170:15;52188:12;:10;:12::i;:::-;52170:30;;52211:40;52227:6;52235:7;52244:6;52211:15;:40::i;:::-;52269:41;52284:6;52292:9;52303:6;52269:14;:41::i;:::-;52262:48;;;52013:305;;;;;:::o;50661:35::-;;;;:::o;51540:180::-;32127:13;:11;:13::i;:::-;51618:11:::1;;;;;;;;;;;51617:12;51609:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;51666:17;51677:5;51666:6;:10;;:17;;;;:::i;:::-;;51708:4;51694:11;;:18;;;;;;;;;;;;;;;;;;51540:180:::0;:::o;51728:93::-;51786:5;51811:2;51804:9;;51728:93;:::o;8345:263::-;8458:4;8475:13;8491:12;:10;:12::i;:::-;8475:28;;8514:64;8523:5;8530:7;8567:10;8539:25;8549:5;8556:7;8539:9;:25::i;:::-;:38;;;;:::i;:::-;8514:8;:64::i;:::-;8596:4;8589:11;;;8345:263;;;;:::o;50380:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;15287:91::-;15343:27;15349:12;:10;:12::i;:::-;15363:6;15343:5;:27::i;:::-;15287:91;:::o;53859:210::-;32127:13;:11;:13::i;:::-;53932:129:::1;53980:10;54012:12;54005:30;;;54044:4;54005:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53939:12;53932:33;;;;:129;;;;;:::i;:::-;53859:210:::0;:::o;55402:119::-;32127:13;:11;:13::i;:::-;55507:6:::1;55485:11;:19;55497:6;55485:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;55402:119:::0;;:::o;5709:143::-;5799:7;5826:9;:18;5836:7;5826:18;;;;;;;;;;;;;;;;5819:25;;5709:143;;;:::o;32889:103::-;32127:13;:11;:13::i;:::-;32954:30:::1;32981:1;32954:18;:30::i;:::-;32889:103::o:0;15386:164::-;15463:46;15479:7;15488:12;:10;:12::i;:::-;15502:6;15463:15;:46::i;:::-;15520:22;15526:7;15535:6;15520:5;:22::i;:::-;15386:164;;:::o;50430:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;55250:144::-;32127:13;:11;:13::i;:::-;55382:4:::1;55344:27;:35;55372:6;55344:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;55250:144:::0;:::o;32241:87::-;32287:7;32314:6;;;;;;;;;;;32307:13;;32241:87;:::o;4637:104::-;4693:13;4726:7;4719:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4637:104;:::o;54928:184::-;32127:13;:11;:13::i;:::-;55058:8:::1;55044:11;:22;;;;55092:12;55077;:27;;;;54928:184:::0;;:::o;9111:498::-;9229:4;9246:13;9262:12;:10;:12::i;:::-;9246:28;;9285:24;9312:25;9322:5;9329:7;9312:9;:25::i;:::-;9285:52;;9390:15;9370:16;:35;;9348:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;9506:60;9515:5;9522:7;9550:15;9531:16;:34;9506:8;:60::i;:::-;9597:4;9590:11;;;;9111:498;;;;:::o;55832:180::-;55889:4;32127:13;:11;:13::i;:::-;55930:1:::1;55914:18;;:4;:18;;::::0;55906:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;55985:19;55999:4;55985:6;:13;;:19;;;;:::i;:::-;55978:26;;55832:180:::0;;;:::o;51829:176::-;51933:4;51957:40;51972:12;:10;:12::i;:::-;51986:2;51990:6;51957:14;:40::i;:::-;51950:47;;51829:176;;;;:::o;54739:181::-;32127:13;:11;:13::i;:::-;54867:8:::1;54854:10;:21;;;;54900:12;54886:11;:26;;;;54739:181:::0;;:::o;56126:::-;56179:7;56234:1;56216:15;:6;:13;:15::i;:::-;:19;;;;:::i;:::-;56207:5;:28;;56199:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;56283:16;56293:5;56283:6;:9;;:16;;;;:::i;:::-;56276:23;;56126:181;;;:::o;50767:25::-;;;;:::o;54077:279::-;32127:13;:11;:13::i;:::-;54139:17:::1;54159:21;54139:41;;54192:12;54218;:10;:12::i;:::-;54210:26;;54244:9;54279:1;54269:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54210:82;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54191:101;;;54311:7;54303:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;54128:228;;54077:279::o:0;55647:177::-;55704:4;32127:13;:11;:13::i;:::-;55745:1:::1;55729:18;;:4;:18;;::::0;55721:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;55800:16;55811:4;55800:6;:10;;:16;;;;:::i;:::-;55793:23;;55647:177:::0;;;:::o;50799:34::-;;;;:::o;50559:::-;;;;:::o;6339:176::-;6453:7;6480:11;:18;6492:5;6480:18;;;;;;;;;;;;;;;:27;6499:7;6480:27;;;;;;;;;;;;;;;;6473:34;;6339:176;;;;:::o;55120:120::-;32127:13;:11;:13::i;:::-;55217:15:::1;55200:14;;:32;;;;;;;;;;;;;;;;;;55120:120:::0;:::o;55529:110::-;55583:4;55607:24;55623:7;55607:6;:15;;:24;;;;:::i;:::-;55600:31;;55529:110;;;:::o;33147:238::-;32127:13;:11;:13::i;:::-;33270:1:::1;33250:22;;:8;:22;;::::0;33228:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33349:28;33368:8;33349:18;:28::i;:::-;33147:238:::0;:::o;32406:132::-;32481:12;:10;:12::i;:::-;32470:23;;:7;:5;:7::i;:::-;:23;;;32462:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32406:132::o;41987:117::-;42050:7;42077:19;42085:3;:10;;42077:7;:19::i;:::-;42070:26;;41987:117;;;:::o;3424:98::-;3477:7;3504:10;3497:17;;3424:98;:::o;13237:380::-;13390:1;13373:19;;:5;:19;;;13365:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13471:1;13452:21;;:7;:21;;;13444:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13555:6;13525:11;:18;13537:5;13525:18;;;;;;;;;;;;;;;:27;13544:7;13525:27;;;;;;;;;;;;;;;:36;;;;13593:7;13577:32;;13586:5;13577:32;;;13602:6;13577:32;;;;;;:::i;:::-;;;;;;;;13237:380;;;:::o;13908:502::-;14043:24;14070:25;14080:5;14087:7;14070:9;:25::i;:::-;14043:52;;14130:17;14110:16;:37;14106:297;;14210:6;14190:16;:26;;14164:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;14325:51;14334:5;14341:7;14369:6;14350:16;:25;14325:8;:51::i;:::-;14106:297;14032:378;13908:502;;;:::o;52326:845::-;52453:4;52475:27;:35;52503:6;52475:35;;;;;;;;;;;;;;;;;;;;;;;;;52470:112;;52535:10;:8;:10::i;:::-;52527:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;52470:112;52594:18;52617:11;:19;52629:6;52617:19;;;;;;;;;;;;;;;;;;;;;;;;;52616:20;:60;;;;;52654:11;:22;52666:9;52654:22;;;;;;;;;;;;;;;;;;;;;;;;;52653:23;52616:60;52615:76;;;;;52681:10;:8;:10::i;:::-;52615:76;52594:97;;52702:9;52773:14;52780:6;52773;:14::i;:::-;52769:198;;;52811:1;52804:8;;52769:198;;;52859:17;52866:9;52859:6;:17::i;:::-;52855:112;;;52900:1;52893:8;;52855:112;;;52950:5;52934:21;;52855:112;52769:198;52979:22;53004:13;:80;;53078:6;53004:80;;;53033:29;53041:6;53049;53057:4;53033:7;:29::i;:::-;53004:80;52979:105;;53095:44;53105:6;53113:9;53124:14;53095:9;:44::i;:::-;53159:4;53152:11;;;;;52326:845;;;;;:::o;41087:177::-;41182:4;41206:50;41211:3;:10;;41247:5;41231:23;;41223:32;;41206:4;:50::i;:::-;41199:57;;41087:177;;;;:::o;12124:675::-;12227:1;12208:21;;:7;:21;;;12200:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12280:49;12301:7;12318:1;12322:6;12280:20;:49::i;:::-;12342:22;12367:9;:18;12377:7;12367:18;;;;;;;;;;;;;;;;12342:43;;12422:6;12404:14;:24;;12396:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12541:6;12524:14;:23;12503:9;:18;12513:7;12503:18;;;;;;;;;;;;;;;:44;;;;12658:6;12642:12;;:22;;;;;;;;;;;12719:1;12693:37;;12702:7;12693:37;;;12723:6;12693:37;;;;;;:::i;:::-;;;;;;;;12743:48;12763:7;12780:1;12784:6;12743:19;:48::i;:::-;12189:610;12124:675;;:::o;27373:214::-;27456:123;27490:5;27533:23;;;27558:2;27562:5;27510:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27456:19;:123::i;:::-;27373:214;;;:::o;33545:191::-;33619:16;33638:6;;;;;;;;;;;33619:25;;33664:8;33655:6;;:17;;;;;;;;;;;;;;;;;;33719:8;33688:40;;33709:8;33688:40;;;;;;;;;;;;33608:128;33545:191;:::o;41440:183::-;41538:4;41562:53;41570:3;:10;;41606:5;41590:23;;41582:32;;41562:7;:53::i;:::-;41555:60;;41440:183;;;;:::o;42458:::-;42557:7;42608:22;42612:3;:10;;42624:5;42608:3;:22::i;:::-;42600:31;;42577:56;;42458:183;;;;:::o;41709:192::-;41814:4;41838:55;41848:3;:10;;41884:5;41868:23;;41860:32;;41838:9;:55::i;:::-;41831:62;;41709:192;;;;:::o;36988:109::-;37044:7;37071:3;:11;;:18;;;;37064:25;;36988:109;;;:::o;53179:90::-;53222:4;53260:1;53246:10;;:15;;53239:22;;53179:90;:::o;53277:574::-;53392:7;53412:17;53432:1;53412:21;;53456:1;53448:4;:9;53444:362;;53500:10;;53486:11;;:24;;;;:::i;:::-;53474:36;;53525:46;53535:6;53543:14;;;;;;;;;;;53559:11;;53525:9;:46::i;:::-;53586:25;53592:6;53600:10;;53586:5;:25::i;:::-;53444:362;;;53680:11;;53665:12;;:26;;;;:::i;:::-;53653:38;;53706:47;53716:6;53724:14;;;;;;;;;;;53740:12;;53706:9;:47::i;:::-;53768:26;53774:6;53782:11;;53768:5;:26::i;:::-;53444:362;53834:9;53825:6;:18;;;;:::i;:::-;53818:25;;;53277:574;;;;;:::o;10079:877::-;10226:1;10210:18;;:4;:18;;;10202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10303:1;10289:16;;:2;:16;;;10281:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10358:38;10379:4;10385:2;10389:6;10358:20;:38::i;:::-;10409:19;10431:9;:15;10441:4;10431:15;;;;;;;;;;;;;;;;10409:37;;10494:6;10479:11;:21;;10457:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;10634:6;10620:11;:20;10602:9;:15;10612:4;10602:15;;;;;;;;;;;;;;;:38;;;;10837:6;10820:9;:13;10830:2;10820:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;10887:2;10872:26;;10881:4;10872:26;;;10891:6;10872:26;;;;;;:::i;:::-;;;;;;;;10911:37;10931:4;10937:2;10941:6;10911:19;:37::i;:::-;10191:765;10079:877;;;:::o;34652:414::-;34715:4;34737:21;34747:3;34752:5;34737:9;:21::i;:::-;34732:327;;34775:3;:11;;34792:5;34775:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34958:3;:11;;:18;;;;34936:3;:12;;:19;34949:5;34936:19;;;;;;;;;;;:40;;;;34998:4;34991:11;;;;34732:327;35042:5;35035:12;;34652:414;;;;;:::o;15010:125::-;;;;:::o;15149:124::-;;;;:::o;30837:802::-;31261:23;31287:106;31329:4;31287:106;;;;;;;;;;;;;;;;;31295:5;31287:27;;;;:106;;;;;:::i;:::-;31261:132;;31428:1;31408:10;:17;:21;31404:228;;;31523:10;31512:30;;;;;;;;;;;;:::i;:::-;31486:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;31404:228;30907:732;30837:802;;:::o;35242:1420::-;35308:4;35426:18;35447:3;:12;;:19;35460:5;35447:19;;;;;;;;;;;;35426:40;;35497:1;35483:10;:15;35479:1176;;35858:21;35895:1;35882:10;:14;;;;:::i;:::-;35858:38;;35911:17;35952:1;35931:3;:11;;:18;;;;:22;;;;:::i;:::-;35911:42;;35987:13;35974:9;:26;35970:405;;36021:17;36041:3;:11;;36053:9;36041:22;;;;;;;;:::i;:::-;;;;;;;;;;36021:42;;36195:9;36166:3;:11;;36178:13;36166:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;36306:10;36280:3;:12;;:23;36293:9;36280:23;;;;;;;;;;;:36;;;;36002:373;35970:405;36456:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36551:3;:12;;:19;36564:5;36551:19;;;;;;;;;;;36544:26;;;36594:4;36587:11;;;;;;;35479:1176;36638:5;36631:12;;;35242:1420;;;;;:::o;37451:145::-;37543:7;37570:3;:11;;37582:5;37570:18;;;;;;;;:::i;:::-;;;;;;;;;;37563:25;;37451:145;;;;:::o;36748:154::-;36846:4;36893:1;36870:3;:12;;:19;36883:5;36870:19;;;;;;;;;;;;:24;;36863:31;;36748:154;;;;:::o;21198:229::-;21335:12;21367:52;21389:6;21397:4;21403:1;21406:12;21367:21;:52::i;:::-;21360:59;;21198:229;;;;;:::o;22414:612::-;22584:12;22656:5;22631:21;:30;;22609:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;22739:12;22753:23;22780:6;:11;;22799:5;22820:4;22780:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22738:97;;;;22866:152;22911:6;22936:7;22962:10;22991:12;22866:26;:152::i;:::-;22846:172;;;;22414:612;;;;;;:::o;25544:644::-;25729:12;25758:7;25754:427;;;25807:1;25786:10;:17;:22;25782:290;;26004:18;26015:6;26004:10;:18::i;:::-;25996:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25782:290;26093:10;26086:17;;;;25754:427;26136:33;26144:10;26156:12;26136:7;:33::i;:::-;25544:644;;;;;;;:::o;18246:326::-;18306:4;18563:1;18541:7;:19;;;:23;18534:30;;18246:326;;;:::o;26730:577::-;26936:1;26916:10;:17;:21;26912:388;;;27148:10;27142:17;27205:15;27192:10;27188:2;27184:19;27177:44;26912:388;27275:12;27268:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:77:1;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:329::-;4482:6;4531:2;4519:9;4510:7;4506:23;4502:32;4499:119;;;4537:79;;:::i;:::-;4499:119;4657:1;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4628:117;4423:329;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:329::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:116::-;5593:21;5608:5;5593:21;:::i;:::-;5586:5;5583:32;5573:60;;5629:1;5626;5619:12;5573:60;5523:116;:::o;5645:133::-;5688:5;5726:6;5713:20;5704:29;;5742:30;5766:5;5742:30;:::i;:::-;5645:133;;;;:::o;5784:468::-;5849:6;5857;5906:2;5894:9;5885:7;5881:23;5877:32;5874:119;;;5912:79;;:::i;:::-;5874:119;6032:1;6057:53;6102:7;6093:6;6082:9;6078:22;6057:53;:::i;:::-;6047:63;;6003:117;6159:2;6185:50;6227:7;6218:6;6207:9;6203:22;6185:50;:::i;:::-;6175:60;;6130:115;5784:468;;;;;:::o;6258:118::-;6345:24;6363:5;6345:24;:::i;:::-;6340:3;6333:37;6258:118;;:::o;6382:222::-;6475:4;6513:2;6502:9;6498:18;6490:26;;6526:71;6594:1;6583:9;6579:17;6570:6;6526:71;:::i;:::-;6382:222;;;;:::o;6610:474::-;6678:6;6686;6735:2;6723:9;6714:7;6710:23;6706:32;6703:119;;;6741:79;;:::i;:::-;6703:119;6861:1;6886:53;6931:7;6922:6;6911:9;6907:22;6886:53;:::i;:::-;6876:63;;6832:117;6988:2;7014:53;7059:7;7050:6;7039:9;7035:22;7014:53;:::i;:::-;7004:63;;6959:118;6610:474;;;;;:::o;7090:::-;7158:6;7166;7215:2;7203:9;7194:7;7190:23;7186:32;7183:119;;;7221:79;;:::i;:::-;7183:119;7341:1;7366:53;7411:7;7402:6;7391:9;7387:22;7366:53;:::i;:::-;7356:63;;7312:117;7468:2;7494:53;7539:7;7530:6;7519:9;7515:22;7494:53;:::i;:::-;7484:63;;7439:118;7090:474;;;;;:::o;7570:166::-;7710:18;7706:1;7698:6;7694:14;7687:42;7570:166;:::o;7742:366::-;7884:3;7905:67;7969:2;7964:3;7905:67;:::i;:::-;7898:74;;7981:93;8070:3;7981:93;:::i;:::-;8099:2;8094:3;8090:12;8083:19;;7742:366;;;:::o;8114:419::-;8280:4;8318:2;8307:9;8303:18;8295:26;;8367:9;8361:4;8357:20;8353:1;8342:9;8338:17;8331:47;8395:131;8521:4;8395:131;:::i;:::-;8387:139;;8114:419;;;:::o;8539:180::-;8587:77;8584:1;8577:88;8684:4;8681:1;8674:15;8708:4;8705:1;8698:15;8725:320;8769:6;8806:1;8800:4;8796:12;8786:22;;8853:1;8847:4;8843:12;8874:18;8864:81;;8930:4;8922:6;8918:17;8908:27;;8864:81;8992:2;8984:6;8981:14;8961:18;8958:38;8955:84;;9011:18;;:::i;:::-;8955:84;8776:269;8725:320;;;:::o;9051:169::-;9191:21;9187:1;9179:6;9175:14;9168:45;9051:169;:::o;9226:366::-;9368:3;9389:67;9453:2;9448:3;9389:67;:::i;:::-;9382:74;;9465:93;9554:3;9465:93;:::i;:::-;9583:2;9578:3;9574:12;9567:19;;9226:366;;;:::o;9598:419::-;9764:4;9802:2;9791:9;9787:18;9779:26;;9851:9;9845:4;9841:20;9837:1;9826:9;9822:17;9815:47;9879:131;10005:4;9879:131;:::i;:::-;9871:139;;9598:419;;;:::o;10023:180::-;10071:77;10068:1;10061:88;10168:4;10165:1;10158:15;10192:4;10189:1;10182:15;10209:191;10249:3;10268:20;10286:1;10268:20;:::i;:::-;10263:25;;10302:20;10320:1;10302:20;:::i;:::-;10297:25;;10345:1;10342;10338:9;10331:16;;10366:3;10363:1;10360:10;10357:36;;;10373:18;;:::i;:::-;10357:36;10209:191;;;;:::o;10406:143::-;10463:5;10494:6;10488:13;10479:22;;10510:33;10537:5;10510:33;:::i;:::-;10406:143;;;;:::o;10555:351::-;10625:6;10674:2;10662:9;10653:7;10649:23;10645:32;10642:119;;;10680:79;;:::i;:::-;10642:119;10800:1;10825:64;10881:7;10872:6;10861:9;10857:22;10825:64;:::i;:::-;10815:74;;10771:128;10555:351;;;;:::o;10912:224::-;11052:34;11048:1;11040:6;11036:14;11029:58;11121:7;11116:2;11108:6;11104:15;11097:32;10912:224;:::o;11142:366::-;11284:3;11305:67;11369:2;11364:3;11305:67;:::i;:::-;11298:74;;11381:93;11470:3;11381:93;:::i;:::-;11499:2;11494:3;11490:12;11483:19;;11142:366;;;:::o;11514:419::-;11680:4;11718:2;11707:9;11703:18;11695:26;;11767:9;11761:4;11757:20;11753:1;11742:9;11738:17;11731:47;11795:131;11921:4;11795:131;:::i;:::-;11787:139;;11514:419;;;:::o;11939:180::-;12079:32;12075:1;12067:6;12063:14;12056:56;11939:180;:::o;12125:366::-;12267:3;12288:67;12352:2;12347:3;12288:67;:::i;:::-;12281:74;;12364:93;12453:3;12364:93;:::i;:::-;12482:2;12477:3;12473:12;12466:19;;12125:366;;;:::o;12497:419::-;12663:4;12701:2;12690:9;12686:18;12678:26;;12750:9;12744:4;12740:20;12736:1;12725:9;12721:17;12714:47;12778:131;12904:4;12778:131;:::i;:::-;12770:139;;12497:419;;;:::o;12922:194::-;12962:4;12982:20;13000:1;12982:20;:::i;:::-;12977:25;;13016:20;13034:1;13016:20;:::i;:::-;13011:25;;13060:1;13057;13053:9;13045:17;;13084:1;13078:4;13075:11;13072:37;;;13089:18;;:::i;:::-;13072:37;12922:194;;;;:::o;13122:175::-;13262:27;13258:1;13250:6;13246:14;13239:51;13122:175;:::o;13303:366::-;13445:3;13466:67;13530:2;13525:3;13466:67;:::i;:::-;13459:74;;13542:93;13631:3;13542:93;:::i;:::-;13660:2;13655:3;13651:12;13644:19;;13303:366;;;:::o;13675:419::-;13841:4;13879:2;13868:9;13864:18;13856:26;;13928:9;13922:4;13918:20;13914:1;13903:9;13899:17;13892:47;13956:131;14082:4;13956:131;:::i;:::-;13948:139;;13675:419;;;:::o;14100:180::-;14148:77;14145:1;14138:88;14245:4;14242:1;14235:15;14269:4;14266:1;14259:15;14286:98;14337:6;14371:5;14365:12;14355:22;;14286:98;;;:::o;14390:147::-;14491:11;14528:3;14513:18;;14390:147;;;;:::o;14543:386::-;14647:3;14675:38;14707:5;14675:38;:::i;:::-;14729:88;14810:6;14805:3;14729:88;:::i;:::-;14722:95;;14826:65;14884:6;14879:3;14872:4;14865:5;14861:16;14826:65;:::i;:::-;14916:6;14911:3;14907:16;14900:23;;14651:278;14543:386;;;;:::o;14935:271::-;15065:3;15087:93;15176:3;15167:6;15087:93;:::i;:::-;15080:100;;15197:3;15190:10;;14935:271;;;;:::o;15212:175::-;15352:27;15348:1;15340:6;15336:14;15329:51;15212:175;:::o;15393:366::-;15535:3;15556:67;15620:2;15615:3;15556:67;:::i;:::-;15549:74;;15632:93;15721:3;15632:93;:::i;:::-;15750:2;15745:3;15741:12;15734:19;;15393:366;;;:::o;15765:419::-;15931:4;15969:2;15958:9;15954:18;15946:26;;16018:9;16012:4;16008:20;16004:1;15993:9;15989:17;15982:47;16046:131;16172:4;16046:131;:::i;:::-;16038:139;;15765:419;;;:::o;16190:225::-;16330:34;16326:1;16318:6;16314:14;16307:58;16399:8;16394:2;16386:6;16382:15;16375:33;16190:225;:::o;16421:366::-;16563:3;16584:67;16648:2;16643:3;16584:67;:::i;:::-;16577:74;;16660:93;16749:3;16660:93;:::i;:::-;16778:2;16773:3;16769:12;16762:19;;16421:366;;;:::o;16793:419::-;16959:4;16997:2;16986:9;16982:18;16974:26;;17046:9;17040:4;17036:20;17032:1;17021:9;17017:17;17010:47;17074:131;17200:4;17074:131;:::i;:::-;17066:139;;16793:419;;;:::o;17218:182::-;17358:34;17354:1;17346:6;17342:14;17335:58;17218:182;:::o;17406:366::-;17548:3;17569:67;17633:2;17628:3;17569:67;:::i;:::-;17562:74;;17645:93;17734:3;17645:93;:::i;:::-;17763:2;17758:3;17754:12;17747:19;;17406:366;;;:::o;17778:419::-;17944:4;17982:2;17971:9;17967:18;17959:26;;18031:9;18025:4;18021:20;18017:1;18006:9;18002:17;17995:47;18059:131;18185:4;18059:131;:::i;:::-;18051:139;;17778:419;;;:::o;18203:223::-;18343:34;18339:1;18331:6;18327:14;18320:58;18412:6;18407:2;18399:6;18395:15;18388:31;18203:223;:::o;18432:366::-;18574:3;18595:67;18659:2;18654:3;18595:67;:::i;:::-;18588:74;;18671:93;18760:3;18671:93;:::i;:::-;18789:2;18784:3;18780:12;18773:19;;18432:366;;;:::o;18804:419::-;18970:4;19008:2;18997:9;18993:18;18985:26;;19057:9;19051:4;19047:20;19043:1;19032:9;19028:17;19021:47;19085:131;19211:4;19085:131;:::i;:::-;19077:139;;18804:419;;;:::o;19229:221::-;19369:34;19365:1;19357:6;19353:14;19346:58;19438:4;19433:2;19425:6;19421:15;19414:29;19229:221;:::o;19456:366::-;19598:3;19619:67;19683:2;19678:3;19619:67;:::i;:::-;19612:74;;19695:93;19784:3;19695:93;:::i;:::-;19813:2;19808:3;19804:12;19797:19;;19456:366;;;:::o;19828:419::-;19994:4;20032:2;20021:9;20017:18;20009:26;;20081:9;20075:4;20071:20;20067:1;20056:9;20052:17;20045:47;20109:131;20235:4;20109:131;:::i;:::-;20101:139;;19828:419;;;:::o;20253:179::-;20393:31;20389:1;20381:6;20377:14;20370:55;20253:179;:::o;20438:366::-;20580:3;20601:67;20665:2;20660:3;20601:67;:::i;:::-;20594:74;;20677:93;20766:3;20677:93;:::i;:::-;20795:2;20790:3;20786:12;20779:19;;20438:366;;;:::o;20810:419::-;20976:4;21014:2;21003:9;20999:18;20991:26;;21063:9;21057:4;21053:20;21049:1;21038:9;21034:17;21027:47;21091:131;21217:4;21091:131;:::i;:::-;21083:139;;20810:419;;;:::o;21235:170::-;21375:22;21371:1;21363:6;21359:14;21352:46;21235:170;:::o;21411:366::-;21553:3;21574:67;21638:2;21633:3;21574:67;:::i;:::-;21567:74;;21650:93;21739:3;21650:93;:::i;:::-;21768:2;21763:3;21759:12;21752:19;;21411:366;;;:::o;21783:419::-;21949:4;21987:2;21976:9;21972:18;21964:26;;22036:9;22030:4;22026:20;22022:1;22011:9;22007:17;22000:47;22064:131;22190:4;22064:131;:::i;:::-;22056:139;;21783:419;;;:::o;22208:220::-;22348:34;22344:1;22336:6;22332:14;22325:58;22417:3;22412:2;22404:6;22400:15;22393:28;22208:220;:::o;22434:366::-;22576:3;22597:67;22661:2;22656:3;22597:67;:::i;:::-;22590:74;;22673:93;22762:3;22673:93;:::i;:::-;22791:2;22786:3;22782:12;22775:19;;22434:366;;;:::o;22806:419::-;22972:4;23010:2;22999:9;22995:18;22987:26;;23059:9;23053:4;23049:20;23045:1;23034:9;23030:17;23023:47;23087:131;23213:4;23087:131;:::i;:::-;23079:139;;22806:419;;;:::o;23231:221::-;23371:34;23367:1;23359:6;23355:14;23348:58;23440:4;23435:2;23427:6;23423:15;23416:29;23231:221;:::o;23458:366::-;23600:3;23621:67;23685:2;23680:3;23621:67;:::i;:::-;23614:74;;23697:93;23786:3;23697:93;:::i;:::-;23815:2;23810:3;23806:12;23799:19;;23458:366;;;:::o;23830:419::-;23996:4;24034:2;24023:9;24019:18;24011:26;;24083:9;24077:4;24073:20;24069:1;24058:9;24054:17;24047:47;24111:131;24237:4;24111:131;:::i;:::-;24103:139;;23830:419;;;:::o;24255:332::-;24376:4;24414:2;24403:9;24399:18;24391:26;;24427:71;24495:1;24484:9;24480:17;24471:6;24427:71;:::i;:::-;24508:72;24576:2;24565:9;24561:18;24552:6;24508:72;:::i;:::-;24255:332;;;;;:::o;24593:224::-;24733:34;24729:1;24721:6;24717:14;24710:58;24802:7;24797:2;24789:6;24785:15;24778:32;24593:224;:::o;24823:366::-;24965:3;24986:67;25050:2;25045:3;24986:67;:::i;:::-;24979:74;;25062:93;25151:3;25062:93;:::i;:::-;25180:2;25175:3;25171:12;25164:19;;24823:366;;;:::o;25195:419::-;25361:4;25399:2;25388:9;25384:18;25376:26;;25448:9;25442:4;25438:20;25434:1;25423:9;25419:17;25412:47;25476:131;25602:4;25476:131;:::i;:::-;25468:139;;25195:419;;;:::o;25620:222::-;25760:34;25756:1;25748:6;25744:14;25737:58;25829:5;25824:2;25816:6;25812:15;25805:30;25620:222;:::o;25848:366::-;25990:3;26011:67;26075:2;26070:3;26011:67;:::i;:::-;26004:74;;26087:93;26176:3;26087:93;:::i;:::-;26205:2;26200:3;26196:12;26189:19;;25848:366;;;:::o;26220:419::-;26386:4;26424:2;26413:9;26409:18;26401:26;;26473:9;26467:4;26463:20;26459:1;26448:9;26444:17;26437:47;26501:131;26627:4;26501:131;:::i;:::-;26493:139;;26220:419;;;:::o;26645:225::-;26785:34;26781:1;26773:6;26769:14;26762:58;26854:8;26849:2;26841:6;26837:15;26830:33;26645:225;:::o;26876:366::-;27018:3;27039:67;27103:2;27098:3;27039:67;:::i;:::-;27032:74;;27115:93;27204:3;27115:93;:::i;:::-;27233:2;27228:3;27224:12;27217:19;;26876:366;;;:::o;27248:419::-;27414:4;27452:2;27441:9;27437:18;27429:26;;27501:9;27495:4;27491:20;27487:1;27476:9;27472:17;27465:47;27529:131;27655:4;27529:131;:::i;:::-;27521:139;;27248:419;;;:::o;27673:137::-;27727:5;27758:6;27752:13;27743:22;;27774:30;27798:5;27774:30;:::i;:::-;27673:137;;;;:::o;27816:345::-;27883:6;27932:2;27920:9;27911:7;27907:23;27903:32;27900:119;;;27938:79;;:::i;:::-;27900:119;28058:1;28083:61;28136:7;28127:6;28116:9;28112:22;28083:61;:::i;:::-;28073:71;;28029:125;27816:345;;;;:::o;28167:229::-;28307:34;28303:1;28295:6;28291:14;28284:58;28376:12;28371:2;28363:6;28359:15;28352:37;28167:229;:::o;28402:366::-;28544:3;28565:67;28629:2;28624:3;28565:67;:::i;:::-;28558:74;;28641:93;28730:3;28641:93;:::i;:::-;28759:2;28754:3;28750:12;28743:19;;28402:366;;;:::o;28774:419::-;28940:4;28978:2;28967:9;28963:18;28955:26;;29027:9;29021:4;29017:20;29013:1;29002:9;28998:17;28991:47;29055:131;29181:4;29055:131;:::i;:::-;29047:139;;28774:419;;;:::o;29199:180::-;29247:77;29244:1;29237:88;29344:4;29341:1;29334:15;29368:4;29365:1;29358:15;29385:180;29433:77;29430:1;29423:88;29530:4;29527:1;29520:15;29554:4;29551:1;29544:15;29571:225;29711:34;29707:1;29699:6;29695:14;29688:58;29780:8;29775:2;29767:6;29763:15;29756:33;29571:225;:::o;29802:366::-;29944:3;29965:67;30029:2;30024:3;29965:67;:::i;:::-;29958:74;;30041:93;30130:3;30041:93;:::i;:::-;30159:2;30154:3;30150:12;30143:19;;29802:366;;;:::o;30174:419::-;30340:4;30378:2;30367:9;30363:18;30355:26;;30427:9;30421:4;30417:20;30413:1;30402:9;30398:17;30391:47;30455:131;30581:4;30455:131;:::i;:::-;30447:139;;30174:419;;;:::o;30599:179::-;30739:31;30735:1;30727:6;30723:14;30716:55;30599:179;:::o;30784:366::-;30926:3;30947:67;31011:2;31006:3;30947:67;:::i;:::-;30940:74;;31023:93;31112:3;31023:93;:::i;:::-;31141:2;31136:3;31132:12;31125:19;;30784:366;;;:::o;31156:419::-;31322:4;31360:2;31349:9;31345:18;31337:26;;31409:9;31403:4;31399:20;31395:1;31384:9;31380:17;31373:47;31437:131;31563:4;31437:131;:::i;:::-;31429:139;;31156:419;;;:::o
Swarm Source
ipfs://c112cd6fa5e0a6e3d8b40f08ee583d80241f2faeed0143ed543f3ba0f79d2928
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.