Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Renounce Ownersh... | 20033748 | 99 days ago | IN | 0 ETH | 0.00049364 | ||||
Approve | 20033743 | 99 days ago | IN | 0 ETH | 0.00123221 | ||||
Approve | 20033743 | 99 days ago | IN | 0 ETH | 0.00123221 | ||||
Approve | 20033743 | 99 days ago | IN | 0 ETH | 0.00123221 | ||||
Approve | 20033737 | 99 days ago | IN | 0 ETH | 0.00104973 | ||||
Set Multiple Tru... | 20033735 | 99 days ago | IN | 0 ETH | 0.00362823 | ||||
0x60806040 | 20033715 | 99 days ago | IN | 0 ETH | 0.08043453 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
LOONG
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-06-06 */ // $LOONG is best Chinese Dragon // Twitter: https://x.com/Loongmeme // Telegram: https://t.me/LzDoge // 龙 // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * 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 default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } // File: lzDoge/erc20.sol pragma solidity ^0.8.10; pragma solidity >=0.5.0; interface ILayerZeroUserApplicationConfig { function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external; function setSendVersion(uint16 _version) external; function setReceiveVersion(uint16 _version) external; function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external; } pragma solidity >=0.5.0; interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig { function send(uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable; function receivePayload(uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint _gasLimit, bytes calldata _payload) external; function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64); function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64); function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee); function getChainId() external view returns (uint16); function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external; function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool); function getSendLibraryAddress(address _userApplication) external view returns (address); function getReceiveLibraryAddress(address _userApplication) external view returns (address); function isSendingPayload() external view returns (bool); function isReceivingPayload() external view returns (bool); function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory); function getSendVersion(address _userApplication) external view returns (uint16); function getReceiveVersion(address _userApplication) external view returns (uint16); } pragma solidity >=0.5.0; interface ILayerZeroReceiver { function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external; } abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver { ILayerZeroEndpoint internal endpoint; struct FailedMessages { uint payloadLength; bytes32 payloadHash; } mapping(uint16 => mapping(bytes => mapping(uint => FailedMessages))) public failedMessages; mapping(uint16 => bytes) public trustedRemoteLookup; event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload); function lzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) external override { require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security require(_srcAddress.length == trustedRemoteLookup[_srcChainId].length && keccak256(_srcAddress) == keccak256(trustedRemoteLookup[_srcChainId]), "NonblockingReceiver: invalid source sending contract"); try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) { } catch { failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages(_payload.length, keccak256(_payload)); emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload); } } function onLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public { require(msg.sender == address(this), "NonblockingReceiver: caller must be Bridge."); _LzReceive( _srcChainId, _srcAddress, _nonce, _payload); } function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) virtual internal; function _lzSend(uint16 _dstChainId, bytes memory _payload, address payable _refundAddress, address _zroPaymentAddress, bytes memory _txParam) internal { endpoint.send{value: msg.value}(_dstChainId, trustedRemoteLookup[_dstChainId], _payload, _refundAddress, _zroPaymentAddress, _txParam); } function retryMessage(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes calldata _payload) external payable { FailedMessages storage failedMsg = failedMessages[_srcChainId][_srcAddress][_nonce]; require(failedMsg.payloadHash != bytes32(0), "NonblockingReceiver: no stored message"); require(_payload.length == failedMsg.payloadLength && keccak256(_payload) == failedMsg.payloadHash, "LayerZero: invalid payload"); failedMsg.payloadLength = 0; failedMsg.payloadHash = bytes32(0); this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } function setMultipleTrustedRemotes(uint16[] calldata _chainIds, bytes[] calldata _trustedRemotes) external onlyOwner { require(_chainIds.length == _trustedRemotes.length, "Chain IDs and remotes length mismatch"); for (uint i = 0; i < _chainIds.length; i++) { trustedRemoteLookup[_chainIds[i]] = _trustedRemotes[i]; } } } contract LOONG is ERC20, ERC20Burnable, Ownable, NonblockingReceiver{ uint gasForDestinationLzReceive = 350000; uint256 public chainID; string private constant _name = unicode"龙"; string private constant _symbol = unicode"Loong"; uint256 private _supply = 1000000000 * 10 ** decimals(); constructor(address _layerZeroEndpoint , uint256 _chainID) ERC20(_name, _symbol){ endpoint = ILayerZeroEndpoint(_layerZeroEndpoint); chainID = _chainID; _mint(msg.sender , _supply); } function estimateFeesView(uint16 _chainId , uint256 value) public view returns (uint) { bytes memory payload = abi.encode(msg.sender , value); uint16 version = 1; bytes memory adapterParams = abi.encodePacked(version, gasForDestinationLzReceive); (uint messageFee, ) = endpoint.estimateFees(_chainId, address(this), payload, false, adapterParams); return messageFee; } function traverseOtherChains(uint16 _chainId , uint256 value) public payable { require(msg.value >= estimateFeesView(_chainId , value)); require(balanceOf(msg.sender) >= value); _burn(msg.sender , value); require(trustedRemoteLookup[_chainId].length > 0, "This chain is currently unavailable for travel"); // abi.encode() the payload with the values to send bytes memory payload = abi.encode(msg.sender , value); // encode adapterParams to specify more gas for the destination uint16 version = 1; bytes memory adapterParams = abi.encodePacked(version, gasForDestinationLzReceive); // get the fees we need to pay to LayerZero + Relayer to cover message delivery // you will be refunded for extra gas paid (uint messageFee, ) = endpoint.estimateFees(_chainId, address(this), payload, false, adapterParams); require(msg.value >= messageFee, "LD: msg.value not enough to cover messageFee. Send gas for message fees"); endpoint.send{value: msg.value}( _chainId, // destination chainId trustedRemoteLookup[_chainId], // destination address of nft contract payload, // abi.encoded()'ed bytes payable(msg.sender), // refund address address(0x0), // 'zroPaymentAddress' unused for this adapterParams // txParameters ); } function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) override internal { // decode (address toAddr , uint256 value) = abi.decode(_payload, (address , uint256)); // mint the tokens back into existence on destination chain _mint(toAddr, value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_layerZeroEndpoint","type":"address"},{"internalType":"uint256","name":"_chainID","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","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":"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chainID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"estimateFeesView","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"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":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"stateMutability":"nonpayable","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":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_chainIds","type":"uint16[]"},{"internalType":"bytes[]","name":"_trustedRemotes","type":"bytes[]"}],"name":"setMultipleTrustedRemotes","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"traverseOtherChains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526205573060095561001961016e60201b60201c565b600a6100259190610515565b633b9aca00610034919061055f565b600b55348015610042575f80fd5b5060405161431a38038061431a83398181016040528101906100649190610628565b6040518060400160405280600381526020017fe9be9900000000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4c6f6f6e6700000000000000000000000000000000000000000000000000000081525081600390816100df9190610897565b5080600490816100ef9190610897565b50505061010e61010361017660201b60201c565b61017d60201b60201c565b8160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a8190555061016733600b5461024060201b60201c565b5050610a39565b5f6012905090565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a5906109c0565b60405180910390fd5b6102bf5f838361039a60201b60201c565b8060025f8282546102d091906109de565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161037d9190610a20565b60405180910390a36103965f838361039f60201b60201c565b5050565b505050565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561042657808604811115610402576104016103a4565b5b60018516156104115780820291505b808102905061041f856103d1565b94506103e6565b94509492505050565b5f8261043e57600190506104f9565b8161044b575f90506104f9565b8160018114610461576002811461046b5761049a565b60019150506104f9565b60ff84111561047d5761047c6103a4565b5b8360020a915084821115610494576104936103a4565b5b506104f9565b5060208310610133831016604e8410600b84101617156104cf5782820a9050838111156104ca576104c96103a4565b5b6104f9565b6104dc84848460016103dd565b925090508184048111156104f3576104f26103a4565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61051f82610500565b915061052a83610509565b92506105577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461042f565b905092915050565b5f61056982610500565b915061057483610500565b925082820261058281610500565b91508282048414831517610599576105986103a4565b5b5092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6105cd826105a4565b9050919050565b6105dd816105c3565b81146105e7575f80fd5b50565b5f815190506105f8816105d4565b92915050565b61060781610500565b8114610611575f80fd5b50565b5f81519050610622816105fe565b92915050565b5f806040838503121561063e5761063d6105a0565b5b5f61064b858286016105ea565b925050602061065c85828601610614565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806106e157607f821691505b6020821081036106f4576106f361069d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026107567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261071b565b610760868361071b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61079b61079661079184610500565b610778565b610500565b9050919050565b5f819050919050565b6107b483610781565b6107c86107c0826107a2565b848454610727565b825550505050565b5f90565b6107dc6107d0565b6107e78184846107ab565b505050565b5b8181101561080a576107ff5f826107d4565b6001810190506107ed565b5050565b601f82111561084f57610820816106fa565b6108298461070c565b81016020851015610838578190505b61084c6108448561070c565b8301826107ec565b50505b505050565b5f82821c905092915050565b5f61086f5f1984600802610854565b1980831691505092915050565b5f6108878383610860565b9150826002028217905092915050565b6108a082610666565b67ffffffffffffffff8111156108b9576108b8610670565b5b6108c382546106ca565b6108ce82828561080e565b5f60209050601f8311600181146108ff575f84156108ed578287015190505b6108f7858261087c565b86555061095e565b601f19841661090d866106fa565b5f5b828110156109345784890151825560018201915060208501945060208101905061090f565b86831015610951578489015161094d601f891682610860565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6109aa601f83610966565b91506109b582610976565b602082019050919050565b5f6020820190508181035f8301526109d78161099e565b9050919050565b5f6109e882610500565b91506109f383610500565b9250828201905080821115610a0b57610a0a6103a4565b5b92915050565b610a1a81610500565b82525050565b5f602082019050610a335f830184610a11565b92915050565b6138d480610a465f395ff3fe608060405260043610610164575f3560e01c80637533d788116100d0578063a457c2d711610089578063d1deba1f11610063578063d1deba1f14610553578063d2fcb6d51461056f578063dd62ed3e14610597578063f2fde38b146105d357610164565b8063a457c2d7146104b1578063a9059cbb146104ed578063adc879e91461052957610164565b80637533d788146103a057806379cc6790146103dc5780638cef430d146104045780638da5cb5b146104205780638ee749121461044a57806395d89b411461048757610164565b8063313ce56711610122578063313ce5671461028457806339509351146102ae57806342966c68146102ea5780635b30d0811461031257806370a082311461034e578063715018a61461038a57610164565b80621d35671461016857806306fdde0314610190578063095ea7b3146101ba57806318160ddd146101f65780631c37a8221461022057806323b872dd14610248575b5f80fd5b348015610173575f80fd5b5061018e60048036038101906101899190611ea9565b6105fb565b005b34801561019b575f80fd5b506101a461082e565b6040516101b19190611fa5565b60405180910390f35b3480156101c5575f80fd5b506101e060048036038101906101db9190612052565b6108be565b6040516101ed91906120aa565b60405180910390f35b348015610201575f80fd5b5061020a6108e0565b60405161021791906120d2565b60405180910390f35b34801561022b575f80fd5b5061024660048036038101906102419190611ea9565b6108e9565b005b348015610253575f80fd5b5061026e600480360381019061026991906120eb565b610969565b60405161027b91906120aa565b60405180910390f35b34801561028f575f80fd5b50610298610997565b6040516102a59190612156565b60405180910390f35b3480156102b9575f80fd5b506102d460048036038101906102cf9190612052565b61099f565b6040516102e191906120aa565b60405180910390f35b3480156102f5575f80fd5b50610310600480360381019061030b919061216f565b6109d5565b005b34801561031d575f80fd5b506103386004803603810190610333919061219a565b6109e9565b60405161034591906120d2565b60405180910390f35b348015610359575f80fd5b50610374600480360381019061036f91906121d8565b610aec565b60405161038191906120d2565b60405180910390f35b348015610395575f80fd5b5061039e610b31565b005b3480156103ab575f80fd5b506103c660048036038101906103c19190612203565b610b44565b6040516103d39190612280565b60405180910390f35b3480156103e7575f80fd5b5061040260048036038101906103fd9190612052565b610bdf565b005b61041e6004803603810190610419919061219a565b610bff565b005b34801561042b575f80fd5b50610434610e84565b60405161044191906122af565b60405180910390f35b348015610455575f80fd5b50610470600480360381019061046b91906122c8565b610eac565b60405161047e92919061234c565b60405180910390f35b348015610492575f80fd5b5061049b610efa565b6040516104a89190611fa5565b60405180910390f35b3480156104bc575f80fd5b506104d760048036038101906104d29190612052565b610f8a565b6040516104e491906120aa565b60405180910390f35b3480156104f8575f80fd5b50610513600480360381019061050e9190612052565b610fff565b60405161052091906120aa565b60405180910390f35b348015610534575f80fd5b5061053d611021565b60405161054a91906120d2565b60405180910390f35b61056d600480360381019061056891906123d0565b611027565b005b34801561057a575f80fd5b506105956004803603810190610590919061251a565b6111b7565b005b3480156105a2575f80fd5b506105bd60048036038101906105b89190612598565b61129b565b6040516105ca91906120d2565b60405180910390f35b3480156105de575f80fd5b506105f960048036038101906105f491906121d8565b61131d565b005b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610653575f80fd5b60085f8561ffff1661ffff1681526020019081526020015f20805461067790612603565b905083511480156106bb575060085f8561ffff1661ffff1681526020019081526020015f206040516106a991906126cf565b60405180910390208380519060200120145b6106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f190612755565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016107399493929190612791565b5f604051808303815f87803b158015610750575f80fd5b505af1925050508015610761575060015b61082757604051806040016040528082518152602001828051906020012081525060075f8661ffff1661ffff1681526020019081526020015f20846040516107a99190612812565b90815260200160405180910390205f8467ffffffffffffffff1681526020019081526020015f205f820151815f0155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d8484848460405161081a9493929190612791565b60405180910390a1610828565b5b50505050565b60606003805461083d90612603565b80601f016020809104026020016040519081016040528092919081815260200182805461086990612603565b80156108b45780601f1061088b576101008083540402835291602001916108b4565b820191905f5260205f20905b81548152906001019060200180831161089757829003601f168201915b5050505050905090565b5f806108c861139f565b90506108d58185856113a6565b600191505092915050565b5f600254905090565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90612898565b60405180910390fd5b61096384848484611569565b50505050565b5f8061097361139f565b9050610980858285611595565b61098b858585611620565b60019150509392505050565b5f6012905090565b5f806109a961139f565b90506109ca8185856109bb858961129b565b6109c591906128e3565b6113a6565b600191505092915050565b6109e66109e061139f565b8261188c565b50565b5f8033836040516020016109fe929190612916565b60405160208183030381529060405290505f600190505f81600954604051602001610a2a929190612991565b60405160208183030381529060405290505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108830875f876040518663ffffffff1660e01b8152600401610a9e9594939291906129bc565b6040805180830381865afa158015610ab8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610adc9190612a2f565b5090508094505050505092915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b39611a4f565b610b425f611acd565b565b6008602052805f5260405f205f915090508054610b6090612603565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8c90612603565b8015610bd75780601f10610bae57610100808354040283529160200191610bd7565b820191905f5260205f20905b815481529060010190602001808311610bba57829003601f168201915b505050505081565b610bf182610beb61139f565b83611595565b610bfb828261188c565b5050565b610c0982826109e9565b341015610c14575f80fd5b80610c1e33610aec565b1015610c28575f80fd5b610c32338261188c565b5f60085f8461ffff1661ffff1681526020019081526020015f208054610c5790612603565b905011610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090612add565b60405180910390fd5b5f3382604051602001610cad929190612916565b60405160208183030381529060405290505f600190505f81600954604051602001610cd9929190612991565b60405160208183030381529060405290505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730875f876040518663ffffffff1660e01b8152600401610d4d9594939291906129bc565b6040805180830381865afa158015610d67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8b9190612a2f565b50905080341015610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890612b91565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5803100348860085f8b61ffff1661ffff1681526020019081526020015f2088335f896040518863ffffffff1660e01b8152600401610e4e96959493929190612c50565b5f604051808303818588803b158015610e65575f80fd5b505af1158015610e77573d5f803e3d5ffd5b5050505050505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6007602052825f5260405f2082805160208101820180518482526020830160208501208183528095505050505050602052805f5260405f205f925092505050805f0154908060010154905082565b606060048054610f0990612603565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3590612603565b8015610f805780601f10610f5757610100808354040283529160200191610f80565b820191905f5260205f20905b815481529060010190602001808311610f6357829003601f168201915b5050505050905090565b5f80610f9461139f565b90505f610fa1828661129b565b905083811015610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd90612d34565b60405180910390fd5b610ff382868684036113a6565b60019250505092915050565b5f8061100961139f565b9050611016818585611620565b600191505092915050565b600a5481565b5f60075f8761ffff1661ffff1681526020019081526020015f208560405161104f9190612812565b90815260200160405180910390205f8567ffffffffffffffff1681526020019081526020015f2090505f801b8160010154036110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b790612dc2565b60405180910390fd5b805f0154838390501480156110ef5750806001015483836040516110e5929190612e04565b6040518091039020145b61112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112590612e66565b60405180910390fd5b5f815f01819055505f801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b8152600401611182959493929190612eb0565b5f604051808303815f87803b158015611199575f80fd5b505af11580156111ab573d5f803e3d5ffd5b50505050505050505050565b6111bf611a4f565b818190508484905014611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe90612f73565b60405180910390fd5b5f5b848490508110156112945782828281811061122757611226612f91565b5b90506020028101906112399190612fca565b60085f88888681811061124f5761124e612f91565b5b90506020020160208101906112649190612203565b61ffff1661ffff1681526020019081526020015f2091826112869291906131c1565b508080600101915050611209565b5050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611325611a4f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a906132fe565b60405180910390fd5b61139c81611acd565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b9061338c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611482576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114799061341a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161155c91906120d2565b60405180910390a3505050565b5f808280602001905181019061157f9190613462565b9150915061158d8282611b90565b505050505050565b5f6115a0848461129b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461161a578181101561160c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611603906134ea565b60405180910390fd5b61161984848484036113a6565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590613578565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390613606565b60405180910390fd5b611707838383611cde565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190613694565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161187391906120d2565b60405180910390a3611886848484611ce3565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190613722565b60405180910390fd5b611905825f83611cde565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f906137b0565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a3791906120d2565b60405180910390a3611a4a835f84611ce3565b505050565b611a5761139f565b73ffffffffffffffffffffffffffffffffffffffff16611a75610e84565b73ffffffffffffffffffffffffffffffffffffffff1614611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac290613818565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590613880565b60405180910390fd5b611c095f8383611cde565b8060025f828254611c1a91906128e3565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cc791906120d2565b60405180910390a3611cda5f8383611ce3565b5050565b505050565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f61ffff82169050919050565b611d0f81611cf9565b8114611d19575f80fd5b50565b5f81359050611d2a81611d06565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611d7e82611d38565b810181811067ffffffffffffffff82111715611d9d57611d9c611d48565b5b80604052505050565b5f611daf611ce8565b9050611dbb8282611d75565b919050565b5f67ffffffffffffffff821115611dda57611dd9611d48565b5b611de382611d38565b9050602081019050919050565b828183375f83830152505050565b5f611e10611e0b84611dc0565b611da6565b905082815260208101848484011115611e2c57611e2b611d34565b5b611e37848285611df0565b509392505050565b5f82601f830112611e5357611e52611d30565b5b8135611e63848260208601611dfe565b91505092915050565b5f67ffffffffffffffff82169050919050565b611e8881611e6c565b8114611e92575f80fd5b50565b5f81359050611ea381611e7f565b92915050565b5f805f8060808587031215611ec157611ec0611cf1565b5b5f611ece87828801611d1c565b945050602085013567ffffffffffffffff811115611eef57611eee611cf5565b5b611efb87828801611e3f565b9350506040611f0c87828801611e95565b925050606085013567ffffffffffffffff811115611f2d57611f2c611cf5565b5b611f3987828801611e3f565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f611f7782611f45565b611f818185611f4f565b9350611f91818560208601611f5f565b611f9a81611d38565b840191505092915050565b5f6020820190508181035f830152611fbd8184611f6d565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611fee82611fc5565b9050919050565b611ffe81611fe4565b8114612008575f80fd5b50565b5f8135905061201981611ff5565b92915050565b5f819050919050565b6120318161201f565b811461203b575f80fd5b50565b5f8135905061204c81612028565b92915050565b5f806040838503121561206857612067611cf1565b5b5f6120758582860161200b565b92505060206120868582860161203e565b9150509250929050565b5f8115159050919050565b6120a481612090565b82525050565b5f6020820190506120bd5f83018461209b565b92915050565b6120cc8161201f565b82525050565b5f6020820190506120e55f8301846120c3565b92915050565b5f805f6060848603121561210257612101611cf1565b5b5f61210f8682870161200b565b93505060206121208682870161200b565b92505060406121318682870161203e565b9150509250925092565b5f60ff82169050919050565b6121508161213b565b82525050565b5f6020820190506121695f830184612147565b92915050565b5f6020828403121561218457612183611cf1565b5b5f6121918482850161203e565b91505092915050565b5f80604083850312156121b0576121af611cf1565b5b5f6121bd85828601611d1c565b92505060206121ce8582860161203e565b9150509250929050565b5f602082840312156121ed576121ec611cf1565b5b5f6121fa8482850161200b565b91505092915050565b5f6020828403121561221857612217611cf1565b5b5f61222584828501611d1c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6122528261222e565b61225c8185612238565b935061226c818560208601611f5f565b61227581611d38565b840191505092915050565b5f6020820190508181035f8301526122988184612248565b905092915050565b6122a981611fe4565b82525050565b5f6020820190506122c25f8301846122a0565b92915050565b5f805f606084860312156122df576122de611cf1565b5b5f6122ec86828701611d1c565b935050602084013567ffffffffffffffff81111561230d5761230c611cf5565b5b61231986828701611e3f565b925050604061232a8682870161203e565b9150509250925092565b5f819050919050565b61234681612334565b82525050565b5f60408201905061235f5f8301856120c3565b61236c602083018461233d565b9392505050565b5f80fd5b5f80fd5b5f8083601f8401126123905761238f611d30565b5b8235905067ffffffffffffffff8111156123ad576123ac612373565b5b6020830191508360018202830111156123c9576123c8612377565b5b9250929050565b5f805f805f608086880312156123e9576123e8611cf1565b5b5f6123f688828901611d1c565b955050602086013567ffffffffffffffff81111561241757612416611cf5565b5b61242388828901611e3f565b945050604061243488828901611e95565b935050606086013567ffffffffffffffff81111561245557612454611cf5565b5b6124618882890161237b565b92509250509295509295909350565b5f8083601f84011261248557612484611d30565b5b8235905067ffffffffffffffff8111156124a2576124a1612373565b5b6020830191508360208202830111156124be576124bd612377565b5b9250929050565b5f8083601f8401126124da576124d9611d30565b5b8235905067ffffffffffffffff8111156124f7576124f6612373565b5b60208301915083602082028301111561251357612512612377565b5b9250929050565b5f805f806040858703121561253257612531611cf1565b5b5f85013567ffffffffffffffff81111561254f5761254e611cf5565b5b61255b87828801612470565b9450945050602085013567ffffffffffffffff81111561257e5761257d611cf5565b5b61258a878288016124c5565b925092505092959194509250565b5f80604083850312156125ae576125ad611cf1565b5b5f6125bb8582860161200b565b92505060206125cc8582860161200b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061261a57607f821691505b60208210810361262d5761262c6125d6565b5b50919050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f815461265b81612603565b6126658186612633565b9450600182165f811461267f5760018114612694576126c6565b60ff19831686528115158202860193506126c6565b61269d8561263d565b5f5b838110156126be5781548189015260018201915060208101905061269f565b838801955050505b50505092915050565b5f6126da828461264f565b915081905092915050565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f755f8201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b5f61273f603483611f4f565b915061274a826126e5565b604082019050919050565b5f6020820190508181035f83015261276c81612733565b9050919050565b61277c81611cf9565b82525050565b61278b81611e6c565b82525050565b5f6080820190506127a45f830187612773565b81810360208301526127b68186612248565b90506127c56040830185612782565b81810360608301526127d78184612248565b905095945050505050565b5f6127ec8261222e565b6127f68185612633565b9350612806818560208601611f5f565b80840191505092915050565b5f61281d82846127e2565b915081905092915050565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d7573745f8201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b5f612882602b83611f4f565b915061288d82612828565b604082019050919050565b5f6020820190508181035f8301526128af81612876565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6128ed8261201f565b91506128f88361201f565b92508282019050808211156129105761290f6128b6565b5b92915050565b5f6040820190506129295f8301856122a0565b61293660208301846120c3565b9392505050565b5f8160f01b9050919050565b5f6129538261293d565b9050919050565b61296b61296682611cf9565b612949565b82525050565b5f819050919050565b61298b6129868261201f565b612971565b82525050565b5f61299c828561295a565b6002820191506129ac828461297a565b6020820191508190509392505050565b5f60a0820190506129cf5f830188612773565b6129dc60208301876122a0565b81810360408301526129ee8186612248565b90506129fd606083018561209b565b8181036080830152612a0f8184612248565b90509695505050505050565b5f81519050612a2981612028565b92915050565b5f8060408385031215612a4557612a44611cf1565b5b5f612a5285828601612a1b565b9250506020612a6385828601612a1b565b9150509250929050565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c615f8201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b5f612ac7602e83611f4f565b9150612ad282612a6d565b604082019050919050565b5f6020820190508181035f830152612af481612abb565b9050919050565b7f4c443a206d73672e76616c7565206e6f7420656e6f75676820746f20636f76655f8201527f72206d6573736167654665652e2053656e642067617320666f72206d6573736160208201527f6765206665657300000000000000000000000000000000000000000000000000604082015250565b5f612b7b604783611f4f565b9150612b8682612afb565b606082019050919050565b5f6020820190508181035f830152612ba881612b6f565b9050919050565b5f8154612bbb81612603565b612bc58186612238565b9450600182165f8114612bdf5760018114612bf557612c27565b60ff198316865281151560200286019350612c27565b612bfe8561263d565b5f5b83811015612c1f57815481890152600182019150602081019050612c00565b808801955050505b50505092915050565b5f612c3a82611fc5565b9050919050565b612c4a81612c30565b82525050565b5f60c082019050612c635f830189612773565b8181036020830152612c758188612baf565b90508181036040830152612c898187612248565b9050612c986060830186612c41565b612ca560808301856122a0565b81810360a0830152612cb78184612248565b9050979650505050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612d1e602583611f4f565b9150612d2982612cc4565b604082019050919050565b5f6020820190508181035f830152612d4b81612d12565b9050919050565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d5f8201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b5f612dac602683611f4f565b9150612db782612d52565b604082019050919050565b5f6020820190508181035f830152612dd981612da0565b9050919050565b5f612deb8385612633565b9350612df8838584611df0565b82840190509392505050565b5f612e10828486612de0565b91508190509392505050565b7f4c617965725a65726f3a20696e76616c6964207061796c6f61640000000000005f82015250565b5f612e50601a83611f4f565b9150612e5b82612e1c565b602082019050919050565b5f6020820190508181035f830152612e7d81612e44565b9050919050565b5f612e8f8385612238565b9350612e9c838584611df0565b612ea583611d38565b840190509392505050565b5f608082019050612ec35f830188612773565b8181036020830152612ed58187612248565b9050612ee46040830186612782565b8181036060830152612ef7818486612e84565b90509695505050505050565b7f436861696e2049447320616e642072656d6f746573206c656e677468206d69735f8201527f6d61746368000000000000000000000000000000000000000000000000000000602082015250565b5f612f5d602583611f4f565b9150612f6882612f03565b604082019050919050565b5f6020820190508181035f830152612f8a81612f51565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112612fe657612fe5612fbe565b5b80840192508235915067ffffffffffffffff82111561300857613007612fc2565b5b60208301925060018202360383131561302457613023612fc6565b5b509250929050565b5f82905092915050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026130807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613045565b61308a8683613045565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6130c56130c06130bb8461201f565b6130a2565b61201f565b9050919050565b5f819050919050565b6130de836130ab565b6130f26130ea826130cc565b848454613051565b825550505050565b5f90565b6131066130fa565b6131118184846130d5565b505050565b5b81811015613134576131295f826130fe565b600181019050613117565b5050565b601f8211156131795761314a8161263d565b61315384613036565b81016020851015613162578190505b61317661316e85613036565b830182613116565b50505b505050565b5f82821c905092915050565b5f6131995f198460080261317e565b1980831691505092915050565b5f6131b1838361318a565b9150826002028217905092915050565b6131cb838361302c565b67ffffffffffffffff8111156131e4576131e3611d48565b5b6131ee8254612603565b6131f9828285613138565b5f601f831160018114613226575f8415613214578287013590505b61321e85826131a6565b865550613285565b601f1984166132348661263d565b5f5b8281101561325b57848901358255600182019150602085019450602081019050613236565b868310156132785784890135613274601f89168261318a565b8355505b6001600288020188555050505b50505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6132e8602683611f4f565b91506132f38261328e565b604082019050919050565b5f6020820190508181035f830152613315816132dc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613376602483611f4f565b91506133818261331c565b604082019050919050565b5f6020820190508181035f8301526133a38161336a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613404602283611f4f565b915061340f826133aa565b604082019050919050565b5f6020820190508181035f830152613431816133f8565b9050919050565b61344181612c30565b811461344b575f80fd5b50565b5f8151905061345c81613438565b92915050565b5f806040838503121561347857613477611cf1565b5b5f6134858582860161344e565b925050602061349685828601612a1b565b9150509250929050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6134d4601d83611f4f565b91506134df826134a0565b602082019050919050565b5f6020820190508181035f830152613501816134c8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613562602583611f4f565b915061356d82613508565b604082019050919050565b5f6020820190508181035f83015261358f81613556565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6135f0602383611f4f565b91506135fb82613596565b604082019050919050565b5f6020820190508181035f83015261361d816135e4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61367e602683611f4f565b915061368982613624565b604082019050919050565b5f6020820190508181035f8301526136ab81613672565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61370c602183611f4f565b9150613717826136b2565b604082019050919050565b5f6020820190508181035f83015261373981613700565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f61379a602283611f4f565b91506137a582613740565b604082019050919050565b5f6020820190508181035f8301526137c78161378e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613802602083611f4f565b915061380d826137ce565b602082019050919050565b5f6020820190508181035f83015261382f816137f6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f61386a601f83611f4f565b915061387582613836565b602082019050919050565b5f6020820190508181035f8301526138978161385e565b905091905056fea26469706673582212202890e715c9185a60d572d04d813e9c9bfb8a037bc1c45882383a10472a14095964736f6c634300081a003300000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000065
Deployed Bytecode
0x608060405260043610610164575f3560e01c80637533d788116100d0578063a457c2d711610089578063d1deba1f11610063578063d1deba1f14610553578063d2fcb6d51461056f578063dd62ed3e14610597578063f2fde38b146105d357610164565b8063a457c2d7146104b1578063a9059cbb146104ed578063adc879e91461052957610164565b80637533d788146103a057806379cc6790146103dc5780638cef430d146104045780638da5cb5b146104205780638ee749121461044a57806395d89b411461048757610164565b8063313ce56711610122578063313ce5671461028457806339509351146102ae57806342966c68146102ea5780635b30d0811461031257806370a082311461034e578063715018a61461038a57610164565b80621d35671461016857806306fdde0314610190578063095ea7b3146101ba57806318160ddd146101f65780631c37a8221461022057806323b872dd14610248575b5f80fd5b348015610173575f80fd5b5061018e60048036038101906101899190611ea9565b6105fb565b005b34801561019b575f80fd5b506101a461082e565b6040516101b19190611fa5565b60405180910390f35b3480156101c5575f80fd5b506101e060048036038101906101db9190612052565b6108be565b6040516101ed91906120aa565b60405180910390f35b348015610201575f80fd5b5061020a6108e0565b60405161021791906120d2565b60405180910390f35b34801561022b575f80fd5b5061024660048036038101906102419190611ea9565b6108e9565b005b348015610253575f80fd5b5061026e600480360381019061026991906120eb565b610969565b60405161027b91906120aa565b60405180910390f35b34801561028f575f80fd5b50610298610997565b6040516102a59190612156565b60405180910390f35b3480156102b9575f80fd5b506102d460048036038101906102cf9190612052565b61099f565b6040516102e191906120aa565b60405180910390f35b3480156102f5575f80fd5b50610310600480360381019061030b919061216f565b6109d5565b005b34801561031d575f80fd5b506103386004803603810190610333919061219a565b6109e9565b60405161034591906120d2565b60405180910390f35b348015610359575f80fd5b50610374600480360381019061036f91906121d8565b610aec565b60405161038191906120d2565b60405180910390f35b348015610395575f80fd5b5061039e610b31565b005b3480156103ab575f80fd5b506103c660048036038101906103c19190612203565b610b44565b6040516103d39190612280565b60405180910390f35b3480156103e7575f80fd5b5061040260048036038101906103fd9190612052565b610bdf565b005b61041e6004803603810190610419919061219a565b610bff565b005b34801561042b575f80fd5b50610434610e84565b60405161044191906122af565b60405180910390f35b348015610455575f80fd5b50610470600480360381019061046b91906122c8565b610eac565b60405161047e92919061234c565b60405180910390f35b348015610492575f80fd5b5061049b610efa565b6040516104a89190611fa5565b60405180910390f35b3480156104bc575f80fd5b506104d760048036038101906104d29190612052565b610f8a565b6040516104e491906120aa565b60405180910390f35b3480156104f8575f80fd5b50610513600480360381019061050e9190612052565b610fff565b60405161052091906120aa565b60405180910390f35b348015610534575f80fd5b5061053d611021565b60405161054a91906120d2565b60405180910390f35b61056d600480360381019061056891906123d0565b611027565b005b34801561057a575f80fd5b506105956004803603810190610590919061251a565b6111b7565b005b3480156105a2575f80fd5b506105bd60048036038101906105b89190612598565b61129b565b6040516105ca91906120d2565b60405180910390f35b3480156105de575f80fd5b506105f960048036038101906105f491906121d8565b61131d565b005b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610653575f80fd5b60085f8561ffff1661ffff1681526020019081526020015f20805461067790612603565b905083511480156106bb575060085f8561ffff1661ffff1681526020019081526020015f206040516106a991906126cf565b60405180910390208380519060200120145b6106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f190612755565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016107399493929190612791565b5f604051808303815f87803b158015610750575f80fd5b505af1925050508015610761575060015b61082757604051806040016040528082518152602001828051906020012081525060075f8661ffff1661ffff1681526020019081526020015f20846040516107a99190612812565b90815260200160405180910390205f8467ffffffffffffffff1681526020019081526020015f205f820151815f0155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d8484848460405161081a9493929190612791565b60405180910390a1610828565b5b50505050565b60606003805461083d90612603565b80601f016020809104026020016040519081016040528092919081815260200182805461086990612603565b80156108b45780601f1061088b576101008083540402835291602001916108b4565b820191905f5260205f20905b81548152906001019060200180831161089757829003601f168201915b5050505050905090565b5f806108c861139f565b90506108d58185856113a6565b600191505092915050565b5f600254905090565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90612898565b60405180910390fd5b61096384848484611569565b50505050565b5f8061097361139f565b9050610980858285611595565b61098b858585611620565b60019150509392505050565b5f6012905090565b5f806109a961139f565b90506109ca8185856109bb858961129b565b6109c591906128e3565b6113a6565b600191505092915050565b6109e66109e061139f565b8261188c565b50565b5f8033836040516020016109fe929190612916565b60405160208183030381529060405290505f600190505f81600954604051602001610a2a929190612991565b60405160208183030381529060405290505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108830875f876040518663ffffffff1660e01b8152600401610a9e9594939291906129bc565b6040805180830381865afa158015610ab8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610adc9190612a2f565b5090508094505050505092915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b39611a4f565b610b425f611acd565b565b6008602052805f5260405f205f915090508054610b6090612603565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8c90612603565b8015610bd75780601f10610bae57610100808354040283529160200191610bd7565b820191905f5260205f20905b815481529060010190602001808311610bba57829003601f168201915b505050505081565b610bf182610beb61139f565b83611595565b610bfb828261188c565b5050565b610c0982826109e9565b341015610c14575f80fd5b80610c1e33610aec565b1015610c28575f80fd5b610c32338261188c565b5f60085f8461ffff1661ffff1681526020019081526020015f208054610c5790612603565b905011610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090612add565b60405180910390fd5b5f3382604051602001610cad929190612916565b60405160208183030381529060405290505f600190505f81600954604051602001610cd9929190612991565b60405160208183030381529060405290505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730875f876040518663ffffffff1660e01b8152600401610d4d9594939291906129bc565b6040805180830381865afa158015610d67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8b9190612a2f565b50905080341015610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890612b91565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5803100348860085f8b61ffff1661ffff1681526020019081526020015f2088335f896040518863ffffffff1660e01b8152600401610e4e96959493929190612c50565b5f604051808303818588803b158015610e65575f80fd5b505af1158015610e77573d5f803e3d5ffd5b5050505050505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6007602052825f5260405f2082805160208101820180518482526020830160208501208183528095505050505050602052805f5260405f205f925092505050805f0154908060010154905082565b606060048054610f0990612603565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3590612603565b8015610f805780601f10610f5757610100808354040283529160200191610f80565b820191905f5260205f20905b815481529060010190602001808311610f6357829003601f168201915b5050505050905090565b5f80610f9461139f565b90505f610fa1828661129b565b905083811015610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd90612d34565b60405180910390fd5b610ff382868684036113a6565b60019250505092915050565b5f8061100961139f565b9050611016818585611620565b600191505092915050565b600a5481565b5f60075f8761ffff1661ffff1681526020019081526020015f208560405161104f9190612812565b90815260200160405180910390205f8567ffffffffffffffff1681526020019081526020015f2090505f801b8160010154036110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b790612dc2565b60405180910390fd5b805f0154838390501480156110ef5750806001015483836040516110e5929190612e04565b6040518091039020145b61112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112590612e66565b60405180910390fd5b5f815f01819055505f801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b8152600401611182959493929190612eb0565b5f604051808303815f87803b158015611199575f80fd5b505af11580156111ab573d5f803e3d5ffd5b50505050505050505050565b6111bf611a4f565b818190508484905014611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe90612f73565b60405180910390fd5b5f5b848490508110156112945782828281811061122757611226612f91565b5b90506020028101906112399190612fca565b60085f88888681811061124f5761124e612f91565b5b90506020020160208101906112649190612203565b61ffff1661ffff1681526020019081526020015f2091826112869291906131c1565b508080600101915050611209565b5050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611325611a4f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a906132fe565b60405180910390fd5b61139c81611acd565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b9061338c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611482576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114799061341a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161155c91906120d2565b60405180910390a3505050565b5f808280602001905181019061157f9190613462565b9150915061158d8282611b90565b505050505050565b5f6115a0848461129b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461161a578181101561160c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611603906134ea565b60405180910390fd5b61161984848484036113a6565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590613578565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390613606565b60405180910390fd5b611707838383611cde565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190613694565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161187391906120d2565b60405180910390a3611886848484611ce3565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190613722565b60405180910390fd5b611905825f83611cde565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f906137b0565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a3791906120d2565b60405180910390a3611a4a835f84611ce3565b505050565b611a5761139f565b73ffffffffffffffffffffffffffffffffffffffff16611a75610e84565b73ffffffffffffffffffffffffffffffffffffffff1614611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac290613818565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590613880565b60405180910390fd5b611c095f8383611cde565b8060025f828254611c1a91906128e3565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cc791906120d2565b60405180910390a3611cda5f8383611ce3565b5050565b505050565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f61ffff82169050919050565b611d0f81611cf9565b8114611d19575f80fd5b50565b5f81359050611d2a81611d06565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611d7e82611d38565b810181811067ffffffffffffffff82111715611d9d57611d9c611d48565b5b80604052505050565b5f611daf611ce8565b9050611dbb8282611d75565b919050565b5f67ffffffffffffffff821115611dda57611dd9611d48565b5b611de382611d38565b9050602081019050919050565b828183375f83830152505050565b5f611e10611e0b84611dc0565b611da6565b905082815260208101848484011115611e2c57611e2b611d34565b5b611e37848285611df0565b509392505050565b5f82601f830112611e5357611e52611d30565b5b8135611e63848260208601611dfe565b91505092915050565b5f67ffffffffffffffff82169050919050565b611e8881611e6c565b8114611e92575f80fd5b50565b5f81359050611ea381611e7f565b92915050565b5f805f8060808587031215611ec157611ec0611cf1565b5b5f611ece87828801611d1c565b945050602085013567ffffffffffffffff811115611eef57611eee611cf5565b5b611efb87828801611e3f565b9350506040611f0c87828801611e95565b925050606085013567ffffffffffffffff811115611f2d57611f2c611cf5565b5b611f3987828801611e3f565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f611f7782611f45565b611f818185611f4f565b9350611f91818560208601611f5f565b611f9a81611d38565b840191505092915050565b5f6020820190508181035f830152611fbd8184611f6d565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611fee82611fc5565b9050919050565b611ffe81611fe4565b8114612008575f80fd5b50565b5f8135905061201981611ff5565b92915050565b5f819050919050565b6120318161201f565b811461203b575f80fd5b50565b5f8135905061204c81612028565b92915050565b5f806040838503121561206857612067611cf1565b5b5f6120758582860161200b565b92505060206120868582860161203e565b9150509250929050565b5f8115159050919050565b6120a481612090565b82525050565b5f6020820190506120bd5f83018461209b565b92915050565b6120cc8161201f565b82525050565b5f6020820190506120e55f8301846120c3565b92915050565b5f805f6060848603121561210257612101611cf1565b5b5f61210f8682870161200b565b93505060206121208682870161200b565b92505060406121318682870161203e565b9150509250925092565b5f60ff82169050919050565b6121508161213b565b82525050565b5f6020820190506121695f830184612147565b92915050565b5f6020828403121561218457612183611cf1565b5b5f6121918482850161203e565b91505092915050565b5f80604083850312156121b0576121af611cf1565b5b5f6121bd85828601611d1c565b92505060206121ce8582860161203e565b9150509250929050565b5f602082840312156121ed576121ec611cf1565b5b5f6121fa8482850161200b565b91505092915050565b5f6020828403121561221857612217611cf1565b5b5f61222584828501611d1c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6122528261222e565b61225c8185612238565b935061226c818560208601611f5f565b61227581611d38565b840191505092915050565b5f6020820190508181035f8301526122988184612248565b905092915050565b6122a981611fe4565b82525050565b5f6020820190506122c25f8301846122a0565b92915050565b5f805f606084860312156122df576122de611cf1565b5b5f6122ec86828701611d1c565b935050602084013567ffffffffffffffff81111561230d5761230c611cf5565b5b61231986828701611e3f565b925050604061232a8682870161203e565b9150509250925092565b5f819050919050565b61234681612334565b82525050565b5f60408201905061235f5f8301856120c3565b61236c602083018461233d565b9392505050565b5f80fd5b5f80fd5b5f8083601f8401126123905761238f611d30565b5b8235905067ffffffffffffffff8111156123ad576123ac612373565b5b6020830191508360018202830111156123c9576123c8612377565b5b9250929050565b5f805f805f608086880312156123e9576123e8611cf1565b5b5f6123f688828901611d1c565b955050602086013567ffffffffffffffff81111561241757612416611cf5565b5b61242388828901611e3f565b945050604061243488828901611e95565b935050606086013567ffffffffffffffff81111561245557612454611cf5565b5b6124618882890161237b565b92509250509295509295909350565b5f8083601f84011261248557612484611d30565b5b8235905067ffffffffffffffff8111156124a2576124a1612373565b5b6020830191508360208202830111156124be576124bd612377565b5b9250929050565b5f8083601f8401126124da576124d9611d30565b5b8235905067ffffffffffffffff8111156124f7576124f6612373565b5b60208301915083602082028301111561251357612512612377565b5b9250929050565b5f805f806040858703121561253257612531611cf1565b5b5f85013567ffffffffffffffff81111561254f5761254e611cf5565b5b61255b87828801612470565b9450945050602085013567ffffffffffffffff81111561257e5761257d611cf5565b5b61258a878288016124c5565b925092505092959194509250565b5f80604083850312156125ae576125ad611cf1565b5b5f6125bb8582860161200b565b92505060206125cc8582860161200b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061261a57607f821691505b60208210810361262d5761262c6125d6565b5b50919050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f815461265b81612603565b6126658186612633565b9450600182165f811461267f5760018114612694576126c6565b60ff19831686528115158202860193506126c6565b61269d8561263d565b5f5b838110156126be5781548189015260018201915060208101905061269f565b838801955050505b50505092915050565b5f6126da828461264f565b915081905092915050565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f755f8201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b5f61273f603483611f4f565b915061274a826126e5565b604082019050919050565b5f6020820190508181035f83015261276c81612733565b9050919050565b61277c81611cf9565b82525050565b61278b81611e6c565b82525050565b5f6080820190506127a45f830187612773565b81810360208301526127b68186612248565b90506127c56040830185612782565b81810360608301526127d78184612248565b905095945050505050565b5f6127ec8261222e565b6127f68185612633565b9350612806818560208601611f5f565b80840191505092915050565b5f61281d82846127e2565b915081905092915050565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d7573745f8201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b5f612882602b83611f4f565b915061288d82612828565b604082019050919050565b5f6020820190508181035f8301526128af81612876565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6128ed8261201f565b91506128f88361201f565b92508282019050808211156129105761290f6128b6565b5b92915050565b5f6040820190506129295f8301856122a0565b61293660208301846120c3565b9392505050565b5f8160f01b9050919050565b5f6129538261293d565b9050919050565b61296b61296682611cf9565b612949565b82525050565b5f819050919050565b61298b6129868261201f565b612971565b82525050565b5f61299c828561295a565b6002820191506129ac828461297a565b6020820191508190509392505050565b5f60a0820190506129cf5f830188612773565b6129dc60208301876122a0565b81810360408301526129ee8186612248565b90506129fd606083018561209b565b8181036080830152612a0f8184612248565b90509695505050505050565b5f81519050612a2981612028565b92915050565b5f8060408385031215612a4557612a44611cf1565b5b5f612a5285828601612a1b565b9250506020612a6385828601612a1b565b9150509250929050565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c615f8201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b5f612ac7602e83611f4f565b9150612ad282612a6d565b604082019050919050565b5f6020820190508181035f830152612af481612abb565b9050919050565b7f4c443a206d73672e76616c7565206e6f7420656e6f75676820746f20636f76655f8201527f72206d6573736167654665652e2053656e642067617320666f72206d6573736160208201527f6765206665657300000000000000000000000000000000000000000000000000604082015250565b5f612b7b604783611f4f565b9150612b8682612afb565b606082019050919050565b5f6020820190508181035f830152612ba881612b6f565b9050919050565b5f8154612bbb81612603565b612bc58186612238565b9450600182165f8114612bdf5760018114612bf557612c27565b60ff198316865281151560200286019350612c27565b612bfe8561263d565b5f5b83811015612c1f57815481890152600182019150602081019050612c00565b808801955050505b50505092915050565b5f612c3a82611fc5565b9050919050565b612c4a81612c30565b82525050565b5f60c082019050612c635f830189612773565b8181036020830152612c758188612baf565b90508181036040830152612c898187612248565b9050612c986060830186612c41565b612ca560808301856122a0565b81810360a0830152612cb78184612248565b9050979650505050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612d1e602583611f4f565b9150612d2982612cc4565b604082019050919050565b5f6020820190508181035f830152612d4b81612d12565b9050919050565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d5f8201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b5f612dac602683611f4f565b9150612db782612d52565b604082019050919050565b5f6020820190508181035f830152612dd981612da0565b9050919050565b5f612deb8385612633565b9350612df8838584611df0565b82840190509392505050565b5f612e10828486612de0565b91508190509392505050565b7f4c617965725a65726f3a20696e76616c6964207061796c6f61640000000000005f82015250565b5f612e50601a83611f4f565b9150612e5b82612e1c565b602082019050919050565b5f6020820190508181035f830152612e7d81612e44565b9050919050565b5f612e8f8385612238565b9350612e9c838584611df0565b612ea583611d38565b840190509392505050565b5f608082019050612ec35f830188612773565b8181036020830152612ed58187612248565b9050612ee46040830186612782565b8181036060830152612ef7818486612e84565b90509695505050505050565b7f436861696e2049447320616e642072656d6f746573206c656e677468206d69735f8201527f6d61746368000000000000000000000000000000000000000000000000000000602082015250565b5f612f5d602583611f4f565b9150612f6882612f03565b604082019050919050565b5f6020820190508181035f830152612f8a81612f51565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112612fe657612fe5612fbe565b5b80840192508235915067ffffffffffffffff82111561300857613007612fc2565b5b60208301925060018202360383131561302457613023612fc6565b5b509250929050565b5f82905092915050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026130807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613045565b61308a8683613045565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6130c56130c06130bb8461201f565b6130a2565b61201f565b9050919050565b5f819050919050565b6130de836130ab565b6130f26130ea826130cc565b848454613051565b825550505050565b5f90565b6131066130fa565b6131118184846130d5565b505050565b5b81811015613134576131295f826130fe565b600181019050613117565b5050565b601f8211156131795761314a8161263d565b61315384613036565b81016020851015613162578190505b61317661316e85613036565b830182613116565b50505b505050565b5f82821c905092915050565b5f6131995f198460080261317e565b1980831691505092915050565b5f6131b1838361318a565b9150826002028217905092915050565b6131cb838361302c565b67ffffffffffffffff8111156131e4576131e3611d48565b5b6131ee8254612603565b6131f9828285613138565b5f601f831160018114613226575f8415613214578287013590505b61321e85826131a6565b865550613285565b601f1984166132348661263d565b5f5b8281101561325b57848901358255600182019150602085019450602081019050613236565b868310156132785784890135613274601f89168261318a565b8355505b6001600288020188555050505b50505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6132e8602683611f4f565b91506132f38261328e565b604082019050919050565b5f6020820190508181035f830152613315816132dc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613376602483611f4f565b91506133818261331c565b604082019050919050565b5f6020820190508181035f8301526133a38161336a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613404602283611f4f565b915061340f826133aa565b604082019050919050565b5f6020820190508181035f830152613431816133f8565b9050919050565b61344181612c30565b811461344b575f80fd5b50565b5f8151905061345c81613438565b92915050565b5f806040838503121561347857613477611cf1565b5b5f6134858582860161344e565b925050602061349685828601612a1b565b9150509250929050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6134d4601d83611f4f565b91506134df826134a0565b602082019050919050565b5f6020820190508181035f830152613501816134c8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613562602583611f4f565b915061356d82613508565b604082019050919050565b5f6020820190508181035f83015261358f81613556565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6135f0602383611f4f565b91506135fb82613596565b604082019050919050565b5f6020820190508181035f83015261361d816135e4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61367e602683611f4f565b915061368982613624565b604082019050919050565b5f6020820190508181035f8301526136ab81613672565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61370c602183611f4f565b9150613717826136b2565b604082019050919050565b5f6020820190508181035f83015261373981613700565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f61379a602283611f4f565b91506137a582613740565b604082019050919050565b5f6020820190508181035f8301526137c78161378e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613802602083611f4f565b915061380d826137ce565b602082019050919050565b5f6020820190508181035f83015261382f816137f6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f61386a601f83611f4f565b915061387582613836565b602082019050919050565b5f6020820190508181035f8301526138978161385e565b905091905056fea26469706673582212202890e715c9185a60d572d04d813e9c9bfb8a037bc1c45882383a10472a14095964736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000065
-----Decoded View---------------
Arg [0] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675
Arg [1] : _chainID (uint256): 101
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000065
Deployed Bytecode Sourcemap
26983:2894:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24478:775;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9429:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11789:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10558:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25261:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12570:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10400:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13240:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21005:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27523:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10729:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2884:103;;;;;;;;;;;;;:::i;:::-;;24324:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21415:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27951:1575;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2243:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24227:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;9648:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13981:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11062:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27105:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25987:618;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26613:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11318:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3142:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24478:775;24640:8;;;;;;;;;;;24618:31;;:10;:31;;;24610:40;;;;;;24761:19;:32;24781:11;24761:32;;;;;;;;;;;;;;;:39;;;;;:::i;:::-;;;24739:11;:18;:61;:134;;;;;24840:19;:32;24860:11;24840:32;;;;;;;;;;;;;;;24830:43;;;;;;:::i;:::-;;;;;;;;24814:11;24804:22;;;;;;:69;24739:134;24731:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;24959:4;:16;;;24976:11;24989;25002:6;25010:8;24959:60;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24955:291;;25105:52;;;;;;;;25120:8;:15;25105:52;;;;25147:8;25137:19;;;;;;25105:52;;;25054:14;:27;25069:11;25054:27;;;;;;;;;;;;;;;25082:11;25054:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;25095:6;25054:48;;;;;;;;;;;;;:103;;;;;;;;;;;;;;;;;;;25177:57;25191:11;25204;25217:6;25225:8;25177:57;;;;;;;;;:::i;:::-;;;;;;;;24955:291;;;;24478:775;;;;:::o;9429:100::-;9483:13;9516:5;9509:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9429:100;:::o;11789:201::-;11872:4;11889:13;11905:12;:10;:12::i;:::-;11889:28;;11928:32;11937:5;11944:7;11953:6;11928:8;:32::i;:::-;11978:4;11971:11;;;11789:201;;;;:::o;10558:108::-;10619:7;10646:12;;10639:19;;10558:108;:::o;25261:280::-;25414:4;25392:27;;:10;:27;;;25384:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25478:55;25490:11;25503;25516:6;25524:8;25478:10;:55::i;:::-;25261:280;;;;:::o;12570:261::-;12667:4;12684:15;12702:12;:10;:12::i;:::-;12684:30;;12725:38;12741:4;12747:7;12756:6;12725:15;:38::i;:::-;12774:27;12784:4;12790:2;12794:6;12774:9;:27::i;:::-;12819:4;12812:11;;;12570:261;;;;;:::o;10400:93::-;10458:5;10483:2;10476:9;;10400:93;:::o;13240:238::-;13328:4;13345:13;13361:12;:10;:12::i;:::-;13345:28;;13384:64;13393:5;13400:7;13437:10;13409:25;13419:5;13426:7;13409:9;:25::i;:::-;:38;;;;:::i;:::-;13384:8;:64::i;:::-;13466:4;13459:11;;;13240:238;;;;:::o;21005:91::-;21061:27;21067:12;:10;:12::i;:::-;21081:6;21061:5;:27::i;:::-;21005:91;:::o;27523:422::-;27603:4;27620:20;27654:10;27667:5;27643:30;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27620:53;;27686:14;27703:1;27686:18;;27715:26;27761:7;27770:26;;27744:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27715:82;;27811:15;27832:8;;;;;;;;;;;:21;;;27854:8;27872:4;27879:7;27888:5;27895:13;27832:77;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27810:99;;;27927:10;27920:17;;;;;;27523:422;;;;:::o;10729:127::-;10803:7;10830:9;:18;10840:7;10830:18;;;;;;;;;;;;;;;;10823:25;;10729:127;;;:::o;2884:103::-;2129:13;:11;:13::i;:::-;2949:30:::1;2976:1;2949:18;:30::i;:::-;2884:103::o:0;24324:51::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21415:164::-;21492:46;21508:7;21517:12;:10;:12::i;:::-;21531:6;21492:15;:46::i;:::-;21549:22;21555:7;21564:6;21549:5;:22::i;:::-;21415:164;;:::o;27951:1575::-;28060:34;28077:8;28088:5;28060:16;:34::i;:::-;28047:9;:47;;28039:56;;;;;;28139:5;28114:21;28124:10;28114:9;:21::i;:::-;:30;;28106:39;;;;;;28156:25;28162:10;28175:5;28156;:25::i;:::-;28239:1;28200:19;:29;28220:8;28200:29;;;;;;;;;;;;;;;:36;;;;;:::i;:::-;;;:40;28192:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;28373:20;28407:10;28420:5;28396:30;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28373:53;;28512:14;28529:1;28512:18;;28541:26;28587:7;28596:26;;28570:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28541:82;;28778:15;28799:8;;;;;;;;;;;:21;;;28821:8;28839:4;28846:7;28855:5;28862:13;28799:77;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28777:99;;;28918:10;28905:9;:23;;28897:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;29017:8;;;;;;;;;;;:13;;;29038:9;29063:8;29135:19;:29;29155:8;29135:29;;;;;;;;;;;;;;;29223:7;29306:10;29373:3;29453:13;29017:499;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28028:1498;;;;27951:1575;;:::o;2243:87::-;2289:7;2316:6;;;;;;;;;;;2309:13;;2243:87;:::o;24227:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9648:104::-;9704:13;9737:7;9730:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9648:104;:::o;13981:436::-;14074:4;14091:13;14107:12;:10;:12::i;:::-;14091:28;;14130:24;14157:25;14167:5;14174:7;14157:9;:25::i;:::-;14130:52;;14221:15;14201:16;:35;;14193:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14314:60;14323:5;14330:7;14358:15;14339:16;:34;14314:8;:60::i;:::-;14405:4;14398:11;;;;13981:436;;;;:::o;11062:193::-;11141:4;11158:13;11174:12;:10;:12::i;:::-;11158:28;;11197;11207:5;11214:2;11218:6;11197:9;:28::i;:::-;11243:4;11236:11;;;11062:193;;;;:::o;27105:22::-;;;;:::o;25987:618::-;26123:32;26158:14;:27;26173:11;26158:27;;;;;;;;;;;;;;;26186:11;26158:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;26199:6;26158:48;;;;;;;;;;;;;26123:83;;26258:1;26250:10;;26225:9;:21;;;:35;26217:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;26341:9;:23;;;26322:8;;:15;;:42;:90;;;;;26391:9;:21;;;26378:8;;26368:19;;;;;;;:::i;:::-;;;;;;;;:44;26322:90;26314:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;26480:1;26454:9;:23;;:27;;;;26524:1;26516:10;;26492:9;:21;;:34;;;;26537:4;:16;;;26554:11;26567;26580:6;26588:8;;26537:60;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26112:493;25987:618;;;;;:::o;26613:365::-;2129:13;:11;:13::i;:::-;26769:15:::1;;:22;;26749:9;;:16;;:42;26741:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;26851:6;26846:125;26867:9;;:16;;26863:1;:20;26846:125;;;26941:15;;26957:1;26941:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;26905:19;:33;26925:9;;26935:1;26925:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26905:33;;;;;;;;;;;;;;;:54;;;;;;;:::i;:::-;;26885:3;;;;;;;26846:125;;;;26613:365:::0;;;;:::o;11318:151::-;11407:7;11434:11;:18;11446:5;11434:18;;;;;;;;;;;;;;;:27;11453:7;11434:27;;;;;;;;;;;;;;;;11427:34;;11318:151;;;;:::o;3142:201::-;2129:13;:11;:13::i;:::-;3251:1:::1;3231:22;;:8;:22;;::::0;3223:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3307:28;3326:8;3307:18;:28::i;:::-;3142:201:::0;:::o;794:98::-;847:7;874:10;867:17;;794:98;:::o;17974:346::-;18093:1;18076:19;;:5;:19;;;18068:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18174:1;18155:21;;:7;:21;;;18147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18258:6;18228:11;:18;18240:5;18228:18;;;;;;;;;;;;;;;:27;18247:7;18228:27;;;;;;;;;;;;;;;:36;;;;18296:7;18280:32;;18289:5;18280:32;;;18305:6;18280:32;;;;;;:::i;:::-;;;;;;;;17974:346;;;:::o;29534:338::-;29687:14;29704:13;29732:8;29721:41;;;;;;;;;;;;:::i;:::-;29686:76;;;;29844:20;29850:6;29858:5;29844;:20::i;:::-;29656:216;;29534:338;;;;:::o;18611:419::-;18712:24;18739:25;18749:5;18756:7;18739:9;:25::i;:::-;18712:52;;18799:17;18779:16;:37;18775:248;;18861:6;18841:16;:26;;18833:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18945:51;18954:5;18961:7;18989:6;18970:16;:25;18945:8;:51::i;:::-;18775:248;18701:329;18611:419;;;:::o;14887:806::-;15000:1;14984:18;;:4;:18;;;14976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15077:1;15063:16;;:2;:16;;;15055:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15132:38;15153:4;15159:2;15163:6;15132:20;:38::i;:::-;15183:19;15205:9;:15;15215:4;15205:15;;;;;;;;;;;;;;;;15183:37;;15254:6;15239:11;:21;;15231:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15371:6;15357:11;:20;15339:9;:15;15349:4;15339:15;;;;;;;;;;;;;;;:38;;;;15574:6;15557:9;:13;15567:2;15557:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15624:2;15609:26;;15618:4;15609:26;;;15628:6;15609:26;;;;;;:::i;:::-;;;;;;;;15648:37;15668:4;15674:2;15678:6;15648:19;:37::i;:::-;14965:728;14887:806;;;:::o;16861:675::-;16964:1;16945:21;;:7;:21;;;16937:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17017:49;17038:7;17055:1;17059:6;17017:20;:49::i;:::-;17079:22;17104:9;:18;17114:7;17104:18;;;;;;;;;;;;;;;;17079:43;;17159:6;17141:14;:24;;17133:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17278:6;17261:14;:23;17240:9;:18;17250:7;17240:18;;;;;;;;;;;;;;;:44;;;;17395:6;17379:12;;:22;;;;;;;;;;;17456:1;17430:37;;17439:7;17430:37;;;17460:6;17430:37;;;;;;:::i;:::-;;;;;;;;17480:48;17500:7;17517:1;17521:6;17480:19;:48::i;:::-;16926:610;16861:675;;:::o;2408:132::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2408:132::o;3503:191::-;3577:16;3596:6;;;;;;;;;;;3577:25;;3622:8;3613:6;;:17;;;;;;;;;;;;;;;;;;3677:8;3646:40;;3667:8;3646:40;;;;;;;;;;;;3566:128;3503:191;:::o;15980:548::-;16083:1;16064:21;;:7;:21;;;16056:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;16134:49;16163:1;16167:7;16176:6;16134:20;:49::i;:::-;16212:6;16196:12;;:22;;;;;;;:::i;:::-;;;;;;;;16389:6;16367:9;:18;16377:7;16367:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;16443:7;16422:37;;16439:1;16422:37;;;16452:6;16422:37;;;;;;:::i;:::-;;;;;;;;16472:48;16500:1;16504:7;16513:6;16472:19;:48::i;:::-;15980:548;;:::o;19630:91::-;;;;:::o;20325:90::-;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:89;370:7;410:6;403:5;399:18;388:29;;334:89;;;:::o;429:120::-;501:23;518:5;501:23;:::i;:::-;494:5;491:34;481:62;;539:1;536;529:12;481:62;429:120;:::o;555:137::-;600:5;638:6;625:20;616:29;;654:32;680:5;654:32;:::i;:::-;555:137;;;;:::o;698:117::-;807:1;804;797:12;821:117;930:1;927;920:12;944:102;985:6;1036:2;1032:7;1027:2;1020:5;1016:14;1012:28;1002:38;;944:102;;;:::o;1052:180::-;1100:77;1097:1;1090:88;1197:4;1194:1;1187:15;1221:4;1218:1;1211:15;1238:281;1321:27;1343:4;1321:27;:::i;:::-;1313:6;1309:40;1451:6;1439:10;1436:22;1415:18;1403:10;1400:34;1397:62;1394:88;;;1462:18;;:::i;:::-;1394:88;1502:10;1498:2;1491:22;1281:238;1238:281;;:::o;1525:129::-;1559:6;1586:20;;:::i;:::-;1576:30;;1615:33;1643:4;1635:6;1615:33;:::i;:::-;1525:129;;;:::o;1660:307::-;1721:4;1811:18;1803:6;1800:30;1797:56;;;1833:18;;:::i;:::-;1797:56;1871:29;1893:6;1871:29;:::i;:::-;1863:37;;1955:4;1949;1945:15;1937:23;;1660:307;;;:::o;1973:148::-;2071:6;2066:3;2061;2048:30;2112:1;2103:6;2098:3;2094:16;2087:27;1973:148;;;:::o;2127:423::-;2204:5;2229:65;2245:48;2286:6;2245:48;:::i;:::-;2229:65;:::i;:::-;2220:74;;2317:6;2310:5;2303:21;2355:4;2348:5;2344:16;2393:3;2384:6;2379:3;2375:16;2372:25;2369:112;;;2400:79;;:::i;:::-;2369:112;2490:54;2537:6;2532:3;2527;2490:54;:::i;:::-;2210:340;2127:423;;;;;:::o;2569:338::-;2624:5;2673:3;2666:4;2658:6;2654:17;2650:27;2640:122;;2681:79;;:::i;:::-;2640:122;2798:6;2785:20;2823:78;2897:3;2889:6;2882:4;2874:6;2870:17;2823:78;:::i;:::-;2814:87;;2630:277;2569:338;;;;:::o;2913:101::-;2949:7;2989:18;2982:5;2978:30;2967:41;;2913:101;;;:::o;3020:120::-;3092:23;3109:5;3092:23;:::i;:::-;3085:5;3082:34;3072:62;;3130:1;3127;3120:12;3072:62;3020:120;:::o;3146:137::-;3191:5;3229:6;3216:20;3207:29;;3245:32;3271:5;3245:32;:::i;:::-;3146:137;;;;:::o;3289:1117::-;3391:6;3399;3407;3415;3464:3;3452:9;3443:7;3439:23;3435:33;3432:120;;;3471:79;;:::i;:::-;3432:120;3591:1;3616:52;3660:7;3651:6;3640:9;3636:22;3616:52;:::i;:::-;3606:62;;3562:116;3745:2;3734:9;3730:18;3717:32;3776:18;3768:6;3765:30;3762:117;;;3798:79;;:::i;:::-;3762:117;3903:62;3957:7;3948:6;3937:9;3933:22;3903:62;:::i;:::-;3893:72;;3688:287;4014:2;4040:52;4084:7;4075:6;4064:9;4060:22;4040:52;:::i;:::-;4030:62;;3985:117;4169:2;4158:9;4154:18;4141:32;4200:18;4192:6;4189:30;4186:117;;;4222:79;;:::i;:::-;4186:117;4327:62;4381:7;4372:6;4361:9;4357:22;4327:62;:::i;:::-;4317:72;;4112:287;3289:1117;;;;;;;:::o;4412:99::-;4464:6;4498:5;4492:12;4482:22;;4412:99;;;:::o;4517:169::-;4601:11;4635:6;4630:3;4623:19;4675:4;4670:3;4666:14;4651:29;;4517:169;;;;:::o;4692:139::-;4781:6;4776:3;4771;4765:23;4822:1;4813:6;4808:3;4804:16;4797:27;4692:139;;;:::o;4837:377::-;4925:3;4953:39;4986:5;4953:39;:::i;:::-;5008:71;5072:6;5067:3;5008:71;:::i;:::-;5001:78;;5088:65;5146:6;5141:3;5134:4;5127:5;5123:16;5088:65;:::i;:::-;5178:29;5200:6;5178:29;:::i;:::-;5173:3;5169:39;5162:46;;4929:285;4837:377;;;;:::o;5220:313::-;5333:4;5371:2;5360:9;5356:18;5348:26;;5420:9;5414:4;5410:20;5406:1;5395:9;5391:17;5384:47;5448:78;5521:4;5512:6;5448:78;:::i;:::-;5440:86;;5220:313;;;;:::o;5539:126::-;5576:7;5616:42;5609:5;5605:54;5594:65;;5539:126;;;:::o;5671:96::-;5708:7;5737:24;5755:5;5737:24;:::i;:::-;5726:35;;5671:96;;;:::o;5773:122::-;5846:24;5864:5;5846:24;:::i;:::-;5839:5;5836:35;5826:63;;5885:1;5882;5875:12;5826:63;5773:122;:::o;5901:139::-;5947:5;5985:6;5972:20;5963:29;;6001:33;6028:5;6001:33;:::i;:::-;5901:139;;;;:::o;6046:77::-;6083:7;6112:5;6101:16;;6046:77;;;:::o;6129:122::-;6202:24;6220:5;6202:24;:::i;:::-;6195:5;6192:35;6182:63;;6241:1;6238;6231:12;6182:63;6129:122;:::o;6257:139::-;6303:5;6341:6;6328:20;6319:29;;6357:33;6384:5;6357:33;:::i;:::-;6257:139;;;;:::o;6402:474::-;6470:6;6478;6527:2;6515:9;6506:7;6502:23;6498:32;6495:119;;;6533:79;;:::i;:::-;6495:119;6653:1;6678:53;6723:7;6714:6;6703:9;6699:22;6678:53;:::i;:::-;6668:63;;6624:117;6780:2;6806:53;6851:7;6842:6;6831:9;6827:22;6806:53;:::i;:::-;6796:63;;6751:118;6402:474;;;;;:::o;6882:90::-;6916:7;6959:5;6952:13;6945:21;6934:32;;6882:90;;;:::o;6978:109::-;7059:21;7074:5;7059:21;:::i;:::-;7054:3;7047:34;6978:109;;:::o;7093:210::-;7180:4;7218:2;7207:9;7203:18;7195:26;;7231:65;7293:1;7282:9;7278:17;7269:6;7231:65;:::i;:::-;7093:210;;;;:::o;7309:118::-;7396:24;7414:5;7396:24;:::i;:::-;7391:3;7384:37;7309:118;;:::o;7433:222::-;7526:4;7564:2;7553:9;7549:18;7541:26;;7577:71;7645:1;7634:9;7630:17;7621:6;7577:71;:::i;:::-;7433:222;;;;:::o;7661:619::-;7738:6;7746;7754;7803:2;7791:9;7782:7;7778:23;7774:32;7771:119;;;7809:79;;:::i;:::-;7771:119;7929:1;7954:53;7999:7;7990:6;7979:9;7975:22;7954:53;:::i;:::-;7944:63;;7900:117;8056:2;8082:53;8127:7;8118:6;8107:9;8103:22;8082:53;:::i;:::-;8072:63;;8027:118;8184:2;8210:53;8255:7;8246:6;8235:9;8231:22;8210:53;:::i;:::-;8200:63;;8155:118;7661:619;;;;;:::o;8286:86::-;8321:7;8361:4;8354:5;8350:16;8339:27;;8286:86;;;:::o;8378:112::-;8461:22;8477:5;8461:22;:::i;:::-;8456:3;8449:35;8378:112;;:::o;8496:214::-;8585:4;8623:2;8612:9;8608:18;8600:26;;8636:67;8700:1;8689:9;8685:17;8676:6;8636:67;:::i;:::-;8496:214;;;;:::o;8716:329::-;8775:6;8824:2;8812:9;8803:7;8799:23;8795:32;8792:119;;;8830:79;;:::i;:::-;8792:119;8950:1;8975:53;9020:7;9011:6;9000:9;8996:22;8975:53;:::i;:::-;8965:63;;8921:117;8716:329;;;;:::o;9051:472::-;9118:6;9126;9175:2;9163:9;9154:7;9150:23;9146:32;9143:119;;;9181:79;;:::i;:::-;9143:119;9301:1;9326:52;9370:7;9361:6;9350:9;9346:22;9326:52;:::i;:::-;9316:62;;9272:116;9427:2;9453:53;9498:7;9489:6;9478:9;9474:22;9453:53;:::i;:::-;9443:63;;9398:118;9051:472;;;;;:::o;9529:329::-;9588:6;9637:2;9625:9;9616:7;9612:23;9608:32;9605:119;;;9643:79;;:::i;:::-;9605:119;9763:1;9788:53;9833:7;9824:6;9813:9;9809:22;9788:53;:::i;:::-;9778:63;;9734:117;9529:329;;;;:::o;9864:327::-;9922:6;9971:2;9959:9;9950:7;9946:23;9942:32;9939:119;;;9977:79;;:::i;:::-;9939:119;10097:1;10122:52;10166:7;10157:6;10146:9;10142:22;10122:52;:::i;:::-;10112:62;;10068:116;9864:327;;;;:::o;10197:98::-;10248:6;10282:5;10276:12;10266:22;;10197:98;;;:::o;10301:168::-;10384:11;10418:6;10413:3;10406:19;10458:4;10453:3;10449:14;10434:29;;10301:168;;;;:::o;10475:373::-;10561:3;10589:38;10621:5;10589:38;:::i;:::-;10643:70;10706:6;10701:3;10643:70;:::i;:::-;10636:77;;10722:65;10780:6;10775:3;10768:4;10761:5;10757:16;10722:65;:::i;:::-;10812:29;10834:6;10812:29;:::i;:::-;10807:3;10803:39;10796:46;;10565:283;10475:373;;;;:::o;10854:309::-;10965:4;11003:2;10992:9;10988:18;10980:26;;11052:9;11046:4;11042:20;11038:1;11027:9;11023:17;11016:47;11080:76;11151:4;11142:6;11080:76;:::i;:::-;11072:84;;10854:309;;;;:::o;11169:118::-;11256:24;11274:5;11256:24;:::i;:::-;11251:3;11244:37;11169:118;;:::o;11293:222::-;11386:4;11424:2;11413:9;11409:18;11401:26;;11437:71;11505:1;11494:9;11490:17;11481:6;11437:71;:::i;:::-;11293:222;;;;:::o;11521:795::-;11606:6;11614;11622;11671:2;11659:9;11650:7;11646:23;11642:32;11639:119;;;11677:79;;:::i;:::-;11639:119;11797:1;11822:52;11866:7;11857:6;11846:9;11842:22;11822:52;:::i;:::-;11812:62;;11768:116;11951:2;11940:9;11936:18;11923:32;11982:18;11974:6;11971:30;11968:117;;;12004:79;;:::i;:::-;11968:117;12109:62;12163:7;12154:6;12143:9;12139:22;12109:62;:::i;:::-;12099:72;;11894:287;12220:2;12246:53;12291:7;12282:6;12271:9;12267:22;12246:53;:::i;:::-;12236:63;;12191:118;11521:795;;;;;:::o;12322:77::-;12359:7;12388:5;12377:16;;12322:77;;;:::o;12405:118::-;12492:24;12510:5;12492:24;:::i;:::-;12487:3;12480:37;12405:118;;:::o;12529:332::-;12650:4;12688:2;12677:9;12673:18;12665:26;;12701:71;12769:1;12758:9;12754:17;12745:6;12701:71;:::i;:::-;12782:72;12850:2;12839:9;12835:18;12826:6;12782:72;:::i;:::-;12529:332;;;;;:::o;12867:117::-;12976:1;12973;12966:12;12990:117;13099:1;13096;13089:12;13126:552;13183:8;13193:6;13243:3;13236:4;13228:6;13224:17;13220:27;13210:122;;13251:79;;:::i;:::-;13210:122;13364:6;13351:20;13341:30;;13394:18;13386:6;13383:30;13380:117;;;13416:79;;:::i;:::-;13380:117;13530:4;13522:6;13518:17;13506:29;;13584:3;13576:4;13568:6;13564:17;13554:8;13550:32;13547:41;13544:128;;;13591:79;;:::i;:::-;13544:128;13126:552;;;;;:::o;13684:1137::-;13788:6;13796;13804;13812;13820;13869:3;13857:9;13848:7;13844:23;13840:33;13837:120;;;13876:79;;:::i;:::-;13837:120;13996:1;14021:52;14065:7;14056:6;14045:9;14041:22;14021:52;:::i;:::-;14011:62;;13967:116;14150:2;14139:9;14135:18;14122:32;14181:18;14173:6;14170:30;14167:117;;;14203:79;;:::i;:::-;14167:117;14308:62;14362:7;14353:6;14342:9;14338:22;14308:62;:::i;:::-;14298:72;;14093:287;14419:2;14445:52;14489:7;14480:6;14469:9;14465:22;14445:52;:::i;:::-;14435:62;;14390:117;14574:2;14563:9;14559:18;14546:32;14605:18;14597:6;14594:30;14591:117;;;14627:79;;:::i;:::-;14591:117;14740:64;14796:7;14787:6;14776:9;14772:22;14740:64;:::i;:::-;14722:82;;;;14517:297;13684:1137;;;;;;;;:::o;14843:567::-;14915:8;14925:6;14975:3;14968:4;14960:6;14956:17;14952:27;14942:122;;14983:79;;:::i;:::-;14942:122;15096:6;15083:20;15073:30;;15126:18;15118:6;15115:30;15112:117;;;15148:79;;:::i;:::-;15112:117;15262:4;15254:6;15250:17;15238:29;;15316:3;15308:4;15300:6;15296:17;15286:8;15282:32;15279:41;15276:128;;;15323:79;;:::i;:::-;15276:128;14843:567;;;;;:::o;15431:579::-;15515:8;15525:6;15575:3;15568:4;15560:6;15556:17;15552:27;15542:122;;15583:79;;:::i;:::-;15542:122;15696:6;15683:20;15673:30;;15726:18;15718:6;15715:30;15712:117;;;15748:79;;:::i;:::-;15712:117;15862:4;15854:6;15850:17;15838:29;;15916:3;15908:4;15900:6;15896:17;15886:8;15882:32;15879:41;15876:128;;;15923:79;;:::i;:::-;15876:128;15431:579;;;;;:::o;16016:954::-;16148:6;16156;16164;16172;16221:2;16209:9;16200:7;16196:23;16192:32;16189:119;;;16227:79;;:::i;:::-;16189:119;16375:1;16364:9;16360:17;16347:31;16405:18;16397:6;16394:30;16391:117;;;16427:79;;:::i;:::-;16391:117;16540:79;16611:7;16602:6;16591:9;16587:22;16540:79;:::i;:::-;16522:97;;;;16318:311;16696:2;16685:9;16681:18;16668:32;16727:18;16719:6;16716:30;16713:117;;;16749:79;;:::i;:::-;16713:117;16862:91;16945:7;16936:6;16925:9;16921:22;16862:91;:::i;:::-;16844:109;;;;16639:324;16016:954;;;;;;;:::o;16976:474::-;17044:6;17052;17101:2;17089:9;17080:7;17076:23;17072:32;17069:119;;;17107:79;;:::i;:::-;17069:119;17227:1;17252:53;17297:7;17288:6;17277:9;17273:22;17252:53;:::i;:::-;17242:63;;17198:117;17354:2;17380:53;17425:7;17416:6;17405:9;17401:22;17380:53;:::i;:::-;17370:63;;17325:118;16976:474;;;;;:::o;17456:180::-;17504:77;17501:1;17494:88;17601:4;17598:1;17591:15;17625:4;17622:1;17615:15;17642:320;17686:6;17723:1;17717:4;17713:12;17703:22;;17770:1;17764:4;17760:12;17791:18;17781:81;;17847:4;17839:6;17835:17;17825:27;;17781:81;17909:2;17901:6;17898:14;17878:18;17875:38;17872:84;;17928:18;;:::i;:::-;17872:84;17693:269;17642:320;;;:::o;17968:147::-;18069:11;18106:3;18091:18;;17968:147;;;;:::o;18121:140::-;18169:4;18192:3;18184:11;;18215:3;18212:1;18205:14;18249:4;18246:1;18236:18;18228:26;;18121:140;;;:::o;18289:870::-;18390:3;18427:5;18421:12;18456:36;18482:9;18456:36;:::i;:::-;18508:88;18589:6;18584:3;18508:88;:::i;:::-;18501:95;;18627:1;18616:9;18612:17;18643:1;18638:166;;;;18818:1;18813:340;;;;18605:548;;18638:166;18722:4;18718:9;18707;18703:25;18698:3;18691:38;18784:6;18777:14;18770:22;18762:6;18758:35;18753:3;18749:45;18742:52;;18638:166;;18813:340;18880:37;18911:5;18880:37;:::i;:::-;18939:1;18953:154;18967:6;18964:1;18961:13;18953:154;;;19041:7;19035:14;19031:1;19026:3;19022:11;19015:35;19091:1;19082:7;19078:15;19067:26;;18989:4;18986:1;18982:12;18977:17;;18953:154;;;19136:6;19131:3;19127:16;19120:23;;18820:333;;18605:548;;18394:765;;18289:870;;;;:::o;19165:265::-;19292:3;19314:90;19400:3;19391:6;19314:90;:::i;:::-;19307:97;;19421:3;19414:10;;19165:265;;;;:::o;19436:239::-;19576:34;19572:1;19564:6;19560:14;19553:58;19645:22;19640:2;19632:6;19628:15;19621:47;19436:239;:::o;19681:366::-;19823:3;19844:67;19908:2;19903:3;19844:67;:::i;:::-;19837:74;;19920:93;20009:3;19920:93;:::i;:::-;20038:2;20033:3;20029:12;20022:19;;19681:366;;;:::o;20053:419::-;20219:4;20257:2;20246:9;20242:18;20234:26;;20306:9;20300:4;20296:20;20292:1;20281:9;20277:17;20270:47;20334:131;20460:4;20334:131;:::i;:::-;20326:139;;20053:419;;;:::o;20478:115::-;20563:23;20580:5;20563:23;:::i;:::-;20558:3;20551:36;20478:115;;:::o;20599:::-;20684:23;20701:5;20684:23;:::i;:::-;20679:3;20672:36;20599:115;;:::o;20720:719::-;20929:4;20967:3;20956:9;20952:19;20944:27;;20981:69;21047:1;21036:9;21032:17;21023:6;20981:69;:::i;:::-;21097:9;21091:4;21087:20;21082:2;21071:9;21067:18;21060:48;21125:76;21196:4;21187:6;21125:76;:::i;:::-;21117:84;;21211:70;21277:2;21266:9;21262:18;21253:6;21211:70;:::i;:::-;21328:9;21322:4;21318:20;21313:2;21302:9;21298:18;21291:48;21356:76;21427:4;21418:6;21356:76;:::i;:::-;21348:84;;20720:719;;;;;;;:::o;21445:386::-;21549:3;21577:38;21609:5;21577:38;:::i;:::-;21631:88;21712:6;21707:3;21631:88;:::i;:::-;21624:95;;21728:65;21786:6;21781:3;21774:4;21767:5;21763:16;21728:65;:::i;:::-;21818:6;21813:3;21809:16;21802:23;;21553:278;21445:386;;;;:::o;21837:271::-;21967:3;21989:93;22078:3;22069:6;21989:93;:::i;:::-;21982:100;;22099:3;22092:10;;21837:271;;;;:::o;22114:230::-;22254:34;22250:1;22242:6;22238:14;22231:58;22323:13;22318:2;22310:6;22306:15;22299:38;22114:230;:::o;22350:366::-;22492:3;22513:67;22577:2;22572:3;22513:67;:::i;:::-;22506:74;;22589:93;22678:3;22589:93;:::i;:::-;22707:2;22702:3;22698:12;22691:19;;22350:366;;;:::o;22722:419::-;22888:4;22926:2;22915:9;22911:18;22903:26;;22975:9;22969:4;22965:20;22961:1;22950:9;22946:17;22939:47;23003:131;23129:4;23003:131;:::i;:::-;22995:139;;22722:419;;;:::o;23147:180::-;23195:77;23192:1;23185:88;23292:4;23289:1;23282:15;23316:4;23313:1;23306:15;23333:191;23373:3;23392:20;23410:1;23392:20;:::i;:::-;23387:25;;23426:20;23444:1;23426:20;:::i;:::-;23421:25;;23469:1;23466;23462:9;23455:16;;23490:3;23487:1;23484:10;23481:36;;;23497:18;;:::i;:::-;23481:36;23333:191;;;;:::o;23530:332::-;23651:4;23689:2;23678:9;23674:18;23666:26;;23702:71;23770:1;23759:9;23755:17;23746:6;23702:71;:::i;:::-;23783:72;23851:2;23840:9;23836:18;23827:6;23783:72;:::i;:::-;23530:332;;;;;:::o;23868:96::-;23902:8;23951:5;23946:3;23942:15;23921:36;;23868:96;;;:::o;23970:94::-;24008:7;24037:21;24052:5;24037:21;:::i;:::-;24026:32;;23970:94;;;:::o;24070:153::-;24173:43;24192:23;24209:5;24192:23;:::i;:::-;24173:43;:::i;:::-;24168:3;24161:56;24070:153;;:::o;24229:79::-;24268:7;24297:5;24286:16;;24229:79;;;:::o;24314:157::-;24419:45;24439:24;24457:5;24439:24;:::i;:::-;24419:45;:::i;:::-;24414:3;24407:58;24314:157;;:::o;24477:392::-;24615:3;24630:73;24699:3;24690:6;24630:73;:::i;:::-;24728:1;24723:3;24719:11;24712:18;;24740:75;24811:3;24802:6;24740:75;:::i;:::-;24840:2;24835:3;24831:12;24824:19;;24860:3;24853:10;;24477:392;;;;;:::o;24875:822::-;25108:4;25146:3;25135:9;25131:19;25123:27;;25160:69;25226:1;25215:9;25211:17;25202:6;25160:69;:::i;:::-;25239:72;25307:2;25296:9;25292:18;25283:6;25239:72;:::i;:::-;25358:9;25352:4;25348:20;25343:2;25332:9;25328:18;25321:48;25386:76;25457:4;25448:6;25386:76;:::i;:::-;25378:84;;25472:66;25534:2;25523:9;25519:18;25510:6;25472:66;:::i;:::-;25586:9;25580:4;25576:20;25570:3;25559:9;25555:19;25548:49;25614:76;25685:4;25676:6;25614:76;:::i;:::-;25606:84;;24875:822;;;;;;;;:::o;25703:143::-;25760:5;25791:6;25785:13;25776:22;;25807:33;25834:5;25807:33;:::i;:::-;25703:143;;;;:::o;25852:507::-;25931:6;25939;25988:2;25976:9;25967:7;25963:23;25959:32;25956:119;;;25994:79;;:::i;:::-;25956:119;26114:1;26139:64;26195:7;26186:6;26175:9;26171:22;26139:64;:::i;:::-;26129:74;;26085:128;26252:2;26278:64;26334:7;26325:6;26314:9;26310:22;26278:64;:::i;:::-;26268:74;;26223:129;25852:507;;;;;:::o;26365:233::-;26505:34;26501:1;26493:6;26489:14;26482:58;26574:16;26569:2;26561:6;26557:15;26550:41;26365:233;:::o;26604:366::-;26746:3;26767:67;26831:2;26826:3;26767:67;:::i;:::-;26760:74;;26843:93;26932:3;26843:93;:::i;:::-;26961:2;26956:3;26952:12;26945:19;;26604:366;;;:::o;26976:419::-;27142:4;27180:2;27169:9;27165:18;27157:26;;27229:9;27223:4;27219:20;27215:1;27204:9;27200:17;27193:47;27257:131;27383:4;27257:131;:::i;:::-;27249:139;;26976:419;;;:::o;27401:295::-;27541:34;27537:1;27529:6;27525:14;27518:58;27610:34;27605:2;27597:6;27593:15;27586:59;27679:9;27674:2;27666:6;27662:15;27655:34;27401:295;:::o;27702:366::-;27844:3;27865:67;27929:2;27924:3;27865:67;:::i;:::-;27858:74;;27941:93;28030:3;27941:93;:::i;:::-;28059:2;28054:3;28050:12;28043:19;;27702:366;;;:::o;28074:419::-;28240:4;28278:2;28267:9;28263:18;28255:26;;28327:9;28321:4;28317:20;28313:1;28302:9;28298:17;28291:47;28355:131;28481:4;28355:131;:::i;:::-;28347:139;;28074:419;;;:::o;28521:827::-;28604:3;28641:5;28635:12;28670:36;28696:9;28670:36;:::i;:::-;28722:70;28785:6;28780:3;28722:70;:::i;:::-;28715:77;;28823:1;28812:9;28808:17;28839:1;28834:164;;;;29012:1;29007:335;;;;28801:541;;28834:164;28918:4;28914:9;28903;28899:25;28894:3;28887:38;28978:6;28971:14;28964:22;28958:4;28954:33;28949:3;28945:43;28938:50;;28834:164;;29007:335;29074:37;29105:5;29074:37;:::i;:::-;29133:1;29147:154;29161:6;29158:1;29155:13;29147:154;;;29235:7;29229:14;29225:1;29220:3;29216:11;29209:35;29285:1;29276:7;29272:15;29261:26;;29183:4;29180:1;29176:12;29171:17;;29147:154;;;29330:1;29325:3;29321:11;29314:18;;29014:328;;28801:541;;28608:740;;28521:827;;;;:::o;29354:104::-;29399:7;29428:24;29446:5;29428:24;:::i;:::-;29417:35;;29354:104;;;:::o;29464:142::-;29567:32;29593:5;29567:32;:::i;:::-;29562:3;29555:45;29464:142;;:::o;29612:1058::-;29910:4;29948:3;29937:9;29933:19;29925:27;;29962:69;30028:1;30017:9;30013:17;30004:6;29962:69;:::i;:::-;30078:9;30072:4;30068:20;30063:2;30052:9;30048:18;30041:48;30106:73;30174:4;30165:6;30106:73;:::i;:::-;30098:81;;30226:9;30220:4;30216:20;30211:2;30200:9;30196:18;30189:48;30254:76;30325:4;30316:6;30254:76;:::i;:::-;30246:84;;30340:88;30424:2;30413:9;30409:18;30400:6;30340:88;:::i;:::-;30438:73;30506:3;30495:9;30491:19;30482:6;30438:73;:::i;:::-;30559:9;30553:4;30549:20;30543:3;30532:9;30528:19;30521:49;30587:76;30658:4;30649:6;30587:76;:::i;:::-;30579:84;;29612:1058;;;;;;;;;:::o;30676:224::-;30816:34;30812:1;30804:6;30800:14;30793:58;30885:7;30880:2;30872:6;30868:15;30861:32;30676:224;:::o;30906:366::-;31048:3;31069:67;31133:2;31128:3;31069:67;:::i;:::-;31062:74;;31145:93;31234:3;31145:93;:::i;:::-;31263:2;31258:3;31254:12;31247:19;;30906:366;;;:::o;31278:419::-;31444:4;31482:2;31471:9;31467:18;31459:26;;31531:9;31525:4;31521:20;31517:1;31506:9;31502:17;31495:47;31559:131;31685:4;31559:131;:::i;:::-;31551:139;;31278:419;;;:::o;31703:225::-;31843:34;31839:1;31831:6;31827:14;31820:58;31912:8;31907:2;31899:6;31895:15;31888:33;31703:225;:::o;31934:366::-;32076:3;32097:67;32161:2;32156:3;32097:67;:::i;:::-;32090:74;;32173:93;32262:3;32173:93;:::i;:::-;32291:2;32286:3;32282:12;32275:19;;31934:366;;;:::o;32306:419::-;32472:4;32510:2;32499:9;32495:18;32487:26;;32559:9;32553:4;32549:20;32545:1;32534:9;32530:17;32523:47;32587:131;32713:4;32587:131;:::i;:::-;32579:139;;32306:419;;;:::o;32753:327::-;32867:3;32888:88;32969:6;32964:3;32888:88;:::i;:::-;32881:95;;32986:56;33035:6;33030:3;33023:5;32986:56;:::i;:::-;33067:6;33062:3;33058:16;33051:23;;32753:327;;;;;:::o;33086:291::-;33226:3;33248:103;33347:3;33338:6;33330;33248:103;:::i;:::-;33241:110;;33368:3;33361:10;;33086:291;;;;;:::o;33383:176::-;33523:28;33519:1;33511:6;33507:14;33500:52;33383:176;:::o;33565:366::-;33707:3;33728:67;33792:2;33787:3;33728:67;:::i;:::-;33721:74;;33804:93;33893:3;33804:93;:::i;:::-;33922:2;33917:3;33913:12;33906:19;;33565:366;;;:::o;33937:419::-;34103:4;34141:2;34130:9;34126:18;34118:26;;34190:9;34184:4;34180:20;34176:1;34165:9;34161:17;34154:47;34218:131;34344:4;34218:131;:::i;:::-;34210:139;;33937:419;;;:::o;34384:314::-;34480:3;34501:70;34564:6;34559:3;34501:70;:::i;:::-;34494:77;;34581:56;34630:6;34625:3;34618:5;34581:56;:::i;:::-;34662:29;34684:6;34662:29;:::i;:::-;34657:3;34653:39;34646:46;;34384:314;;;;;:::o;34704:739::-;34923:4;34961:3;34950:9;34946:19;34938:27;;34975:69;35041:1;35030:9;35026:17;35017:6;34975:69;:::i;:::-;35091:9;35085:4;35081:20;35076:2;35065:9;35061:18;35054:48;35119:76;35190:4;35181:6;35119:76;:::i;:::-;35111:84;;35205:70;35271:2;35260:9;35256:18;35247:6;35205:70;:::i;:::-;35322:9;35316:4;35312:20;35307:2;35296:9;35292:18;35285:48;35350:86;35431:4;35422:6;35414;35350:86;:::i;:::-;35342:94;;34704:739;;;;;;;;:::o;35449:224::-;35589:34;35585:1;35577:6;35573:14;35566:58;35658:7;35653:2;35645:6;35641:15;35634:32;35449:224;:::o;35679:366::-;35821:3;35842:67;35906:2;35901:3;35842:67;:::i;:::-;35835:74;;35918:93;36007:3;35918:93;:::i;:::-;36036:2;36031:3;36027:12;36020:19;;35679:366;;;:::o;36051:419::-;36217:4;36255:2;36244:9;36240:18;36232:26;;36304:9;36298:4;36294:20;36290:1;36279:9;36275:17;36268:47;36332:131;36458:4;36332:131;:::i;:::-;36324:139;;36051:419;;;:::o;36476:180::-;36524:77;36521:1;36514:88;36621:4;36618:1;36611:15;36645:4;36642:1;36635:15;36662:117;36771:1;36768;36761:12;36785:117;36894:1;36891;36884:12;36908:117;37017:1;37014;37007:12;37031:724;37108:4;37114:6;37170:11;37157:25;37270:1;37264:4;37260:12;37249:8;37233:14;37229:29;37225:48;37205:18;37201:73;37191:168;;37278:79;;:::i;:::-;37191:168;37390:18;37380:8;37376:33;37368:41;;37442:4;37429:18;37419:28;;37470:18;37462:6;37459:30;37456:117;;;37492:79;;:::i;:::-;37456:117;37600:2;37594:4;37590:13;37582:21;;37657:4;37649:6;37645:17;37629:14;37625:38;37619:4;37615:49;37612:136;;;37667:79;;:::i;:::-;37612:136;37121:634;37031:724;;;;;:::o;37761:96::-;37819:6;37847:3;37837:13;;37761:96;;;;:::o;37863:93::-;37900:6;37947:2;37942;37935:5;37931:14;37927:23;37917:33;;37863:93;;;:::o;37962:107::-;38006:8;38056:5;38050:4;38046:16;38025:37;;37962:107;;;;:::o;38075:393::-;38144:6;38194:1;38182:10;38178:18;38217:97;38247:66;38236:9;38217:97;:::i;:::-;38335:39;38365:8;38354:9;38335:39;:::i;:::-;38323:51;;38407:4;38403:9;38396:5;38392:21;38383:30;;38456:4;38446:8;38442:19;38435:5;38432:30;38422:40;;38151:317;;38075:393;;;;;:::o;38474:60::-;38502:3;38523:5;38516:12;;38474:60;;;:::o;38540:142::-;38590:9;38623:53;38641:34;38650:24;38668:5;38650:24;:::i;:::-;38641:34;:::i;:::-;38623:53;:::i;:::-;38610:66;;38540:142;;;:::o;38688:75::-;38731:3;38752:5;38745:12;;38688:75;;;:::o;38769:269::-;38879:39;38910:7;38879:39;:::i;:::-;38940:91;38989:41;39013:16;38989:41;:::i;:::-;38981:6;38974:4;38968:11;38940:91;:::i;:::-;38934:4;38927:105;38845:193;38769:269;;;:::o;39044:73::-;39089:3;39044:73;:::o;39123:189::-;39200:32;;:::i;:::-;39241:65;39299:6;39291;39285:4;39241:65;:::i;:::-;39176:136;39123:189;;:::o;39318:186::-;39378:120;39395:3;39388:5;39385:14;39378:120;;;39449:39;39486:1;39479:5;39449:39;:::i;:::-;39422:1;39415:5;39411:13;39402:22;;39378:120;;;39318:186;;:::o;39510:541::-;39610:2;39605:3;39602:11;39599:445;;;39644:37;39675:5;39644:37;:::i;:::-;39727:29;39745:10;39727:29;:::i;:::-;39717:8;39713:44;39910:2;39898:10;39895:18;39892:49;;;39931:8;39916:23;;39892:49;39954:80;40010:22;40028:3;40010:22;:::i;:::-;40000:8;39996:37;39983:11;39954:80;:::i;:::-;39614:430;;39599:445;39510:541;;;:::o;40057:117::-;40111:8;40161:5;40155:4;40151:16;40130:37;;40057:117;;;;:::o;40180:169::-;40224:6;40257:51;40305:1;40301:6;40293:5;40290:1;40286:13;40257:51;:::i;:::-;40253:56;40338:4;40332;40328:15;40318:25;;40231:118;40180:169;;;;:::o;40354:295::-;40430:4;40576:29;40601:3;40595:4;40576:29;:::i;:::-;40568:37;;40638:3;40635:1;40631:11;40625:4;40622:21;40614:29;;40354:295;;;;:::o;40654:1398::-;40776:43;40815:3;40810;40776:43;:::i;:::-;40884:18;40876:6;40873:30;40870:56;;;40906:18;;:::i;:::-;40870:56;40950:38;40982:4;40976:11;40950:38;:::i;:::-;41035:66;41094:6;41086;41080:4;41035:66;:::i;:::-;41128:1;41157:2;41149:6;41146:14;41174:1;41169:631;;;;41844:1;41861:6;41858:84;;;41917:9;41912:3;41908:19;41895:33;41886:42;;41858:84;41968:67;42028:6;42021:5;41968:67;:::i;:::-;41962:4;41955:81;41817:229;41139:907;;41169:631;41221:4;41217:9;41209:6;41205:22;41255:36;41286:4;41255:36;:::i;:::-;41313:1;41327:215;41341:7;41338:1;41335:14;41327:215;;;41427:9;41422:3;41418:19;41405:33;41397:6;41390:49;41478:1;41470:6;41466:14;41456:24;;41525:2;41514:9;41510:18;41497:31;;41364:4;41361:1;41357:12;41352:17;;41327:215;;;41570:6;41561:7;41558:19;41555:186;;;41635:9;41630:3;41626:19;41613:33;41678:48;41720:4;41712:6;41708:17;41697:9;41678:48;:::i;:::-;41670:6;41663:64;41578:163;41555:186;41787:1;41783;41775:6;41771:14;41767:22;41761:4;41754:36;41176:624;;;41139:907;;40751:1301;;;40654:1398;;;:::o;42058:225::-;42198:34;42194:1;42186:6;42182:14;42175:58;42267:8;42262:2;42254:6;42250:15;42243:33;42058:225;:::o;42289:366::-;42431:3;42452:67;42516:2;42511:3;42452:67;:::i;:::-;42445:74;;42528:93;42617:3;42528:93;:::i;:::-;42646:2;42641:3;42637:12;42630:19;;42289:366;;;:::o;42661:419::-;42827:4;42865:2;42854:9;42850:18;42842:26;;42914:9;42908:4;42904:20;42900:1;42889:9;42885:17;42878:47;42942:131;43068:4;42942:131;:::i;:::-;42934:139;;42661:419;;;:::o;43086:223::-;43226:34;43222:1;43214:6;43210:14;43203:58;43295:6;43290:2;43282:6;43278:15;43271:31;43086:223;:::o;43315:366::-;43457:3;43478:67;43542:2;43537:3;43478:67;:::i;:::-;43471:74;;43554:93;43643:3;43554:93;:::i;:::-;43672:2;43667:3;43663:12;43656:19;;43315:366;;;:::o;43687:419::-;43853:4;43891:2;43880:9;43876:18;43868:26;;43940:9;43934:4;43930:20;43926:1;43915:9;43911:17;43904:47;43968:131;44094:4;43968:131;:::i;:::-;43960:139;;43687:419;;;:::o;44112:221::-;44252:34;44248:1;44240:6;44236:14;44229:58;44321:4;44316:2;44308:6;44304:15;44297:29;44112:221;:::o;44339:366::-;44481:3;44502:67;44566:2;44561:3;44502:67;:::i;:::-;44495:74;;44578:93;44667:3;44578:93;:::i;:::-;44696:2;44691:3;44687:12;44680:19;;44339:366;;;:::o;44711:419::-;44877:4;44915:2;44904:9;44900:18;44892:26;;44964:9;44958:4;44954:20;44950:1;44939:9;44935:17;44928:47;44992:131;45118:4;44992:131;:::i;:::-;44984:139;;44711:419;;;:::o;45136:138::-;45217:32;45243:5;45217:32;:::i;:::-;45210:5;45207:43;45197:71;;45264:1;45261;45254:12;45197:71;45136:138;:::o;45280:159::-;45345:5;45376:6;45370:13;45361:22;;45392:41;45427:5;45392:41;:::i;:::-;45280:159;;;;:::o;45445:523::-;45532:6;45540;45589:2;45577:9;45568:7;45564:23;45560:32;45557:119;;;45595:79;;:::i;:::-;45557:119;45715:1;45740:72;45804:7;45795:6;45784:9;45780:22;45740:72;:::i;:::-;45730:82;;45686:136;45861:2;45887:64;45943:7;45934:6;45923:9;45919:22;45887:64;:::i;:::-;45877:74;;45832:129;45445:523;;;;;:::o;45974:179::-;46114:31;46110:1;46102:6;46098:14;46091:55;45974:179;:::o;46159:366::-;46301:3;46322:67;46386:2;46381:3;46322:67;:::i;:::-;46315:74;;46398:93;46487:3;46398:93;:::i;:::-;46516:2;46511:3;46507:12;46500:19;;46159:366;;;:::o;46531:419::-;46697:4;46735:2;46724:9;46720:18;46712:26;;46784:9;46778:4;46774:20;46770:1;46759:9;46755:17;46748:47;46812:131;46938:4;46812:131;:::i;:::-;46804:139;;46531:419;;;:::o;46956:224::-;47096:34;47092:1;47084:6;47080:14;47073:58;47165:7;47160:2;47152:6;47148:15;47141:32;46956:224;:::o;47186:366::-;47328:3;47349:67;47413:2;47408:3;47349:67;:::i;:::-;47342:74;;47425:93;47514:3;47425:93;:::i;:::-;47543:2;47538:3;47534:12;47527:19;;47186:366;;;:::o;47558:419::-;47724:4;47762:2;47751:9;47747:18;47739:26;;47811:9;47805:4;47801:20;47797:1;47786:9;47782:17;47775:47;47839:131;47965:4;47839:131;:::i;:::-;47831:139;;47558:419;;;:::o;47983:222::-;48123:34;48119:1;48111:6;48107:14;48100:58;48192:5;48187:2;48179:6;48175:15;48168:30;47983:222;:::o;48211:366::-;48353:3;48374:67;48438:2;48433:3;48374:67;:::i;:::-;48367:74;;48450:93;48539:3;48450:93;:::i;:::-;48568:2;48563:3;48559:12;48552:19;;48211:366;;;:::o;48583:419::-;48749:4;48787:2;48776:9;48772:18;48764:26;;48836:9;48830:4;48826:20;48822:1;48811:9;48807:17;48800:47;48864:131;48990:4;48864:131;:::i;:::-;48856:139;;48583:419;;;:::o;49008:225::-;49148:34;49144:1;49136:6;49132:14;49125:58;49217:8;49212:2;49204:6;49200:15;49193:33;49008:225;:::o;49239:366::-;49381:3;49402:67;49466:2;49461:3;49402:67;:::i;:::-;49395:74;;49478:93;49567:3;49478:93;:::i;:::-;49596:2;49591:3;49587:12;49580:19;;49239:366;;;:::o;49611:419::-;49777:4;49815:2;49804:9;49800:18;49792:26;;49864:9;49858:4;49854:20;49850:1;49839:9;49835:17;49828:47;49892:131;50018:4;49892:131;:::i;:::-;49884:139;;49611:419;;;:::o;50036:220::-;50176:34;50172:1;50164:6;50160:14;50153:58;50245:3;50240:2;50232:6;50228:15;50221:28;50036:220;:::o;50262:366::-;50404:3;50425:67;50489:2;50484:3;50425:67;:::i;:::-;50418:74;;50501:93;50590:3;50501:93;:::i;:::-;50619:2;50614:3;50610:12;50603:19;;50262:366;;;:::o;50634:419::-;50800:4;50838:2;50827:9;50823:18;50815:26;;50887:9;50881:4;50877:20;50873:1;50862:9;50858:17;50851:47;50915:131;51041:4;50915:131;:::i;:::-;50907:139;;50634:419;;;:::o;51059:221::-;51199:34;51195:1;51187:6;51183:14;51176:58;51268:4;51263:2;51255:6;51251:15;51244:29;51059:221;:::o;51286:366::-;51428:3;51449:67;51513:2;51508:3;51449:67;:::i;:::-;51442:74;;51525:93;51614:3;51525:93;:::i;:::-;51643:2;51638:3;51634:12;51627:19;;51286:366;;;:::o;51658:419::-;51824:4;51862:2;51851:9;51847:18;51839:26;;51911:9;51905:4;51901:20;51897:1;51886:9;51882:17;51875:47;51939:131;52065:4;51939:131;:::i;:::-;51931:139;;51658:419;;;:::o;52083:182::-;52223:34;52219:1;52211:6;52207:14;52200:58;52083:182;:::o;52271:366::-;52413:3;52434:67;52498:2;52493:3;52434:67;:::i;:::-;52427:74;;52510:93;52599:3;52510:93;:::i;:::-;52628:2;52623:3;52619:12;52612:19;;52271:366;;;:::o;52643:419::-;52809:4;52847:2;52836:9;52832:18;52824:26;;52896:9;52890:4;52886:20;52882:1;52871:9;52867:17;52860:47;52924:131;53050:4;52924:131;:::i;:::-;52916:139;;52643:419;;;:::o;53068:181::-;53208:33;53204:1;53196:6;53192:14;53185:57;53068:181;:::o;53255:366::-;53397:3;53418:67;53482:2;53477:3;53418:67;:::i;:::-;53411:74;;53494:93;53583:3;53494:93;:::i;:::-;53612:2;53607:3;53603:12;53596:19;;53255:366;;;:::o;53627:419::-;53793:4;53831:2;53820:9;53816:18;53808:26;;53880:9;53874:4;53870:20;53866:1;53855:9;53851:17;53844:47;53908:131;54034:4;53908:131;:::i;:::-;53900:139;;53627:419;;;:::o
Swarm Source
ipfs://2890e715c9185a60d572d04d813e9c9bfb8a037bc1c45882383a10472a140959
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 25 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.