Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
PreSale
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-19 */ // SPDX-License-Identifier: MIT AND UNLICENSED // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.4) (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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File @openzeppelin/contracts/access/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated 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/security/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File @openzeppelin/contracts/utils/structs/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol) // This file was procedurally generated from scripts/generate/templates/EnumerableSet.js. pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ```solidity * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. * * [WARNING] * ==== * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure * unusable. * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. * * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an * array of EnumerableSet. * ==== */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { bytes32[] memory store = _values(set._inner); bytes32[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values in the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } // File contracts/presale2.sol // Original license: SPDX_License_Identifier: UNLICENSED pragma solidity 0.8.19; contract PreSale is Ownable, ReentrancyGuard { using Address for address payable; using EnumerableSet for EnumerableSet.AddressSet; mapping(uint256 => address) public userIndex; mapping(address => UserData) public users; struct UserData { uint256 ftmContributed; uint256 bonesBought; bool preRegistered; bool once; } constructor() Ownable() {} uint256 public walletMax = 5000 ether; uint256 public walletMin = 500 ether; uint256 public totalContribution; uint256 public userCount; uint256 public presaleStartTime = 1734634800; uint256 public bonePrice = 1e18; uint256 public totalbonesBought; bool public end; bool public openForAll; uint256 public hardCap = 150000 ether; event buy(address buyer, uint256 amountContributed, uint256 bonesBought); event TimeSet(uint256 presaleStartTime); event End(bool status); event WalletParametersSet(uint256 walletMin, uint256 walletMax); event OpenForAllSet(bool status); event HardCapSet(uint256 newHardCap); function setHardCap(uint256 _hardCap) public onlyOwner { require(_hardCap > 0, "Hard cap must be greater than zero"); hardCap = _hardCap; emit HardCapSet(_hardCap); } function setWalletParameters(uint256 _walletMin, uint256 _walletMax) public onlyOwner { walletMin = _walletMin; walletMax = _walletMax; emit WalletParametersSet(_walletMin, _walletMax); } function setEnd(bool _end) public onlyOwner { end = _end; emit End(_end); } function setRegisterPre(address _addr, bool _status) public onlyOwner { require(_addr != address(0), "Invalid address"); UserData storage user = users[_addr]; user.preRegistered = _status; } function addRegisterMultiplePre(address[] memory _addrs) public onlyOwner { for (uint256 i = 0; i < _addrs.length; i++) { require(_addrs[i] != address(0), "Invalid address in array"); UserData storage user = users[_addrs[i]]; user.preRegistered = true; } } function setTime( uint256 _presaleStartTime ) public onlyOwner { presaleStartTime = _presaleStartTime; emit TimeSet(_presaleStartTime); } function WithdrawFTM(uint256 amount) public onlyOwner { payable(msg.sender).transfer(amount); } function WithdrawFTMcall(uint256 amount) public onlyOwner { require(address(this).balance >= amount, "Not enough balance"); payable(msg.sender).sendValue(amount); } function renounceOwnership() public virtual override onlyOwner { revert("Ownership renunciation is disabled"); } function setOpenForAll(bool _status) public onlyOwner { openForAll = _status; emit OpenForAllSet(_status); } // public call function function Buy() public payable nonReentrant { uint256 amount = msg.value; UserData storage user = users[msg.sender]; totalContribution += amount; require(end == false, "presale is stopped"); require(block.timestamp > presaleStartTime, "Not started yet!"); require(user.once == false, "Only one time allowed"); require(amount >= walletMin && amount <= walletMax, "Buy amount out of range"); require(openForAll || user.preRegistered, "Not registered"); require(totalContribution + amount <= hardCap, "Hard cap reached"); user.once = true; user.ftmContributed += amount; user.bonesBought += (bonePrice * amount) / 1e18; totalbonesBought += (bonePrice * amount) / 1e18; emit buy(msg.sender,amount,(bonePrice * amount) / 1e18); } function checkContractBalance() public view returns (uint256) { return address(this).balance; } function getUserData(address _user) public view returns (UserData memory) { return users[_user]; } receive() external payable { revert("Direct FTM transfers not allowed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"End","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newHardCap","type":"uint256"}],"name":"HardCapSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"OpenForAllSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"presaleStartTime","type":"uint256"}],"name":"TimeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"walletMax","type":"uint256"}],"name":"WalletParametersSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountContributed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonesBought","type":"uint256"}],"name":"buy","type":"event"},{"inputs":[],"name":"Buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawFTM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawFTMcall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"}],"name":"addRegisterMultiplePre","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bonePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"end","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserData","outputs":[{"components":[{"internalType":"uint256","name":"ftmContributed","type":"uint256"},{"internalType":"uint256","name":"bonesBought","type":"uint256"},{"internalType":"bool","name":"preRegistered","type":"bool"},{"internalType":"bool","name":"once","type":"bool"}],"internalType":"struct PreSale.UserData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hardCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_end","type":"bool"}],"name":"setEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hardCap","type":"uint256"}],"name":"setHardCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setOpenForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setRegisterPre","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleStartTime","type":"uint256"}],"name":"setTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletMin","type":"uint256"},{"internalType":"uint256","name":"_walletMax","type":"uint256"}],"name":"setWalletParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalContribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalbonesBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"userCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"userIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"ftmContributed","type":"uint256"},{"internalType":"uint256","name":"bonesBought","type":"uint256"},{"internalType":"bool","name":"preRegistered","type":"bool"},{"internalType":"bool","name":"once","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405269010f0cf064dd59200000600455681b1ae4d6e2ef5000006005556367646d30600855670de0b6b3a7640000600955691fc3842bd1f071c00000600c5534801561004d57600080fd5b5061006a61005f61007660201b60201c565b61007e60201b60201c565b60018081905550610142565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122c280620001526000396000f3fe6080604052600436106101a05760003560e01c8063be54eba5116100ec578063efbe1c1c1161008a578063f2fde38b11610064578063f2fde38b146105a2578063fb86a404146105cb578063fe314524146105f6578063ffc9896b14610621576101e0565b8063efbe1c1c14610523578063f0e3d1ba1461054e578063f10c8fe314610577576101e0565b8063c9dc5bc6116100c6578063c9dc5bc61461047b578063d18d944b146104a6578063d85afe3b146104cf578063da99e881146104fa576101e0565b8063be54eba5146103ec578063bf1a49d414610415578063c37dfd6e1461043e576101e0565b8063715018a611610159578063925ca20c11610133578063925ca20c1461034e578063974c86b514610377578063a82524b214610381578063a87430ba146103ac576101e0565b8063715018a6146102e157806373a8f514146102f85780638da5cb5b14610323576101e0565b806307973ccf146101e55780630dcf4b8f146102105780633beb26c41461023b5780634a1d4e631461026457806350312c9e1461028d5780636692514f146102b8576101e0565b366101e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d790611418565b60405180910390fd5b600080fd5b3480156101f157600080fd5b506101fa61065e565b6040516102079190611451565b60405180910390f35b34801561021c57600080fd5b50610225610664565b6040516102329190611451565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d91906114ac565b61066a565b005b34801561027057600080fd5b5061028b600480360381019061028691906114ac565b6106b3565b005b34801561029957600080fd5b506102a261072a565b6040516102af9190611451565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da91906114ac565b610732565b005b3480156102ed57600080fd5b506102f6610784565b005b34801561030457600080fd5b5061030d6107c7565b60405161031a9190611451565b60405180910390f35b34801561032f57600080fd5b506103386107cd565b604051610345919061151a565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190611599565b6107f6565b005b61037f6108d1565b005b34801561038d57600080fd5b50610396610c4c565b6040516103a39190611451565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce91906115d9565b610c52565b6040516103e39493929190611615565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e919061165a565b610c9c565b005b34801561042157600080fd5b5061043c600480360381019061043791906117e0565b610cf8565b005b34801561044a57600080fd5b50610465600480360381019061046091906114ac565b610e27565b604051610472919061151a565b60405180910390f35b34801561048757600080fd5b50610490610e5a565b60405161049d9190611829565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906114ac565b610e6d565b005b3480156104db57600080fd5b506104e4610ef9565b6040516104f19190611451565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190611844565b610eff565b005b34801561052f57600080fd5b50610538610f52565b6040516105459190611829565b60405180910390f35b34801561055a57600080fd5b506105756004803603810190610570919061165a565b610f65565b005b34801561058357600080fd5b5061058c610fc1565b6040516105999190611451565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c491906115d9565b610fc7565b005b3480156105d757600080fd5b506105e061104a565b6040516105ed9190611451565b60405180910390f35b34801561060257600080fd5b5061060b611050565b6040516106189190611451565b60405180910390f35b34801561062d57600080fd5b50610648600480360381019061064391906115d9565b611056565b60405161065591906118f7565b60405180910390f35b60075481565b60065481565b6106726110f9565b806008819055507f442838d6fd5d665f7e178d487609a403ef51f3626ed47bc205e2d4295711cf28816040516106a89190611451565b60405180910390a150565b6106bb6110f9565b804710156106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f59061195e565b60405180910390fd5b610727813373ffffffffffffffffffffffffffffffffffffffff1661117790919063ffffffff16565b50565b600047905090565b61073a6110f9565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610780573d6000803e3d6000fd5b5050565b61078c6110f9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107be906119f0565b60405180910390fd5b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107fe6110f9565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361086d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086490611a5c565b60405180910390fd5b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160020160006101000a81548160ff021916908315150217905550505050565b6108d961126b565b60003490506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600660008282546109339190611aab565b9250508190555060001515600b60009054906101000a900460ff16151514610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098790611b2b565b60405180910390fd5b60085442116109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb90611b97565b60405180910390fd5b600015158160020160019054906101000a900460ff16151514610a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2390611c03565b60405180910390fd5b6005548210158015610a4057506004548211155b610a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7690611c6f565b60405180910390fd5b600b60019054906101000a900460ff1680610aa857508060020160009054906101000a900460ff165b610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90611cdb565b60405180910390fd5b600c5482600654610af89190611aab565b1115610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3090611d47565b60405180910390fd5b60018160020160016101000a81548160ff02191690831515021790555081816000016000828254610b6a9190611aab565b92505081905550670de0b6b3a764000082600954610b889190611d67565b610b929190611dd8565b816001016000828254610ba59190611aab565b92505081905550670de0b6b3a764000082600954610bc39190611d67565b610bcd9190611dd8565b600a6000828254610bde9190611aab565b925050819055507fa59ac6dd8b1d00e4c8ba9abba262aaac3d4d05e77324205b07a39a002e479b5f3383670de0b6b3a764000085600954610c1f9190611d67565b610c299190611dd8565b604051610c3893929190611e09565b60405180910390a15050610c4a6112ba565b565b60085481565b60036020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905084565b610ca46110f9565b80600b60016101000a81548160ff0219169083151502179055507fc6ee91f277747645bb645c271d108c2b590ce8191ff120582597c43d7b463fe781604051610ced9190611829565b60405180910390a150565b610d006110f9565b60005b8151811015610e2357600073ffffffffffffffffffffffffffffffffffffffff16828281518110610d3757610d36611e40565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90611ebb565b60405180910390fd5b600060036000848481518110610dae57610dad611e40565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160020160006101000a81548160ff021916908315150217905550508080610e1b90611edb565b915050610d03565b5050565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60019054906101000a900460ff1681565b610e756110f9565b60008111610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90611f95565b60405180910390fd5b80600c819055507f917681cdf3d8a5ef720fb56128d5382782db742feb1d89fc6d376111254537b181604051610eee9190611451565b60405180910390a150565b60055481565b610f076110f9565b81600581905550806004819055507fce04aa61eda600992913a5486c90a49b9bee640d4b208249cdb41e2c46f005618282604051610f46929190611fb5565b60405180910390a15050565b600b60009054906101000a900460ff1681565b610f6d6110f9565b80600b60006101000a81548160ff0219169083151502179055507f3e883667baa27834636706acfa6dd8c0ba584fcc0968c2dfa029aa58bbb14fc181604051610fb69190611829565b60405180910390a150565b60095481565b610fcf6110f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361103e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103590612050565b60405180910390fd5b611047816112c3565b50565b600c5481565b60045481565b61105e61138f565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180608001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff161515151581526020016002820160019054906101000a900460ff1615151515815250509050919050565b611101611387565b73ffffffffffffffffffffffffffffffffffffffff1661111f6107cd565b73ffffffffffffffffffffffffffffffffffffffff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c906120bc565b60405180910390fd5b565b804710156111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190612128565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516111e090612179565b60006040518083038185875af1925050503d806000811461121d576040519150601f19603f3d011682016040523d82523d6000602084013e611222565b606091505b5050905080611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90612200565b60405180910390fd5b505050565b6002600154036112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a79061226c565b60405180910390fd5b6002600181905550565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b604051806080016040528060008152602001600081526020016000151581526020016000151581525090565b600082825260208201905092915050565b7f4469726563742046544d207472616e7366657273206e6f7420616c6c6f776564600082015250565b60006114026020836113bb565b915061140d826113cc565b602082019050919050565b60006020820190508181036000830152611431816113f5565b9050919050565b6000819050919050565b61144b81611438565b82525050565b60006020820190506114666000830184611442565b92915050565b6000604051905090565b600080fd5b600080fd5b61148981611438565b811461149457600080fd5b50565b6000813590506114a681611480565b92915050565b6000602082840312156114c2576114c1611476565b5b60006114d084828501611497565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611504826114d9565b9050919050565b611514816114f9565b82525050565b600060208201905061152f600083018461150b565b92915050565b61153e816114f9565b811461154957600080fd5b50565b60008135905061155b81611535565b92915050565b60008115159050919050565b61157681611561565b811461158157600080fd5b50565b6000813590506115938161156d565b92915050565b600080604083850312156115b0576115af611476565b5b60006115be8582860161154c565b92505060206115cf85828601611584565b9150509250929050565b6000602082840312156115ef576115ee611476565b5b60006115fd8482850161154c565b91505092915050565b61160f81611561565b82525050565b600060808201905061162a6000830187611442565b6116376020830186611442565b6116446040830185611606565b6116516060830184611606565b95945050505050565b6000602082840312156116705761166f611476565b5b600061167e84828501611584565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6116d58261168c565b810181811067ffffffffffffffff821117156116f4576116f361169d565b5b80604052505050565b600061170761146c565b905061171382826116cc565b919050565b600067ffffffffffffffff8211156117335761173261169d565b5b602082029050602081019050919050565b600080fd5b600061175c61175784611718565b6116fd565b9050808382526020820190506020840283018581111561177f5761177e611744565b5b835b818110156117a85780611794888261154c565b845260208401935050602081019050611781565b5050509392505050565b600082601f8301126117c7576117c6611687565b5b81356117d7848260208601611749565b91505092915050565b6000602082840312156117f6576117f5611476565b5b600082013567ffffffffffffffff8111156118145761181361147b565b5b611820848285016117b2565b91505092915050565b600060208201905061183e6000830184611606565b92915050565b6000806040838503121561185b5761185a611476565b5b600061186985828601611497565b925050602061187a85828601611497565b9150509250929050565b61188d81611438565b82525050565b61189c81611561565b82525050565b6080820160008201516118b86000850182611884565b5060208201516118cb6020850182611884565b5060408201516118de6040850182611893565b5060608201516118f16060850182611893565b50505050565b600060808201905061190c60008301846118a2565b92915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b60006119486012836113bb565b915061195382611912565b602082019050919050565b600060208201905081810360008301526119778161193b565b9050919050565b7f4f776e6572736869702072656e756e63696174696f6e2069732064697361626c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006119da6022836113bb565b91506119e58261197e565b604082019050919050565b60006020820190508181036000830152611a09816119cd565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000611a46600f836113bb565b9150611a5182611a10565b602082019050919050565b60006020820190508181036000830152611a7581611a39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ab682611438565b9150611ac183611438565b9250828201905080821115611ad957611ad8611a7c565b5b92915050565b7f70726573616c652069732073746f707065640000000000000000000000000000600082015250565b6000611b156012836113bb565b9150611b2082611adf565b602082019050919050565b60006020820190508181036000830152611b4481611b08565b9050919050565b7f4e6f742073746172746564207965742100000000000000000000000000000000600082015250565b6000611b816010836113bb565b9150611b8c82611b4b565b602082019050919050565b60006020820190508181036000830152611bb081611b74565b9050919050565b7f4f6e6c79206f6e652074696d6520616c6c6f7765640000000000000000000000600082015250565b6000611bed6015836113bb565b9150611bf882611bb7565b602082019050919050565b60006020820190508181036000830152611c1c81611be0565b9050919050565b7f42757920616d6f756e74206f7574206f662072616e6765000000000000000000600082015250565b6000611c596017836113bb565b9150611c6482611c23565b602082019050919050565b60006020820190508181036000830152611c8881611c4c565b9050919050565b7f4e6f742072656769737465726564000000000000000000000000000000000000600082015250565b6000611cc5600e836113bb565b9150611cd082611c8f565b602082019050919050565b60006020820190508181036000830152611cf481611cb8565b9050919050565b7f4861726420636170207265616368656400000000000000000000000000000000600082015250565b6000611d316010836113bb565b9150611d3c82611cfb565b602082019050919050565b60006020820190508181036000830152611d6081611d24565b9050919050565b6000611d7282611438565b9150611d7d83611438565b9250828202611d8b81611438565b91508282048414831517611da257611da1611a7c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611de382611438565b9150611dee83611438565b925082611dfe57611dfd611da9565b5b828204905092915050565b6000606082019050611e1e600083018661150b565b611e2b6020830185611442565b611e386040830184611442565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e76616c6964206164647265737320696e2061727261790000000000000000600082015250565b6000611ea56018836113bb565b9150611eb082611e6f565b602082019050919050565b60006020820190508181036000830152611ed481611e98565b9050919050565b6000611ee682611438565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f1857611f17611a7c565b5b600182019050919050565b7f4861726420636170206d7573742062652067726561746572207468616e207a6560008201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f7f6022836113bb565b9150611f8a82611f23565b604082019050919050565b60006020820190508181036000830152611fae81611f72565b9050919050565b6000604082019050611fca6000830185611442565b611fd76020830184611442565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061203a6026836113bb565b915061204582611fde565b604082019050919050565b600060208201905081810360008301526120698161202d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006120a66020836113bb565b91506120b182612070565b602082019050919050565b600060208201905081810360008301526120d581612099565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000612112601d836113bb565b915061211d826120dc565b602082019050919050565b6000602082019050818103600083015261214181612105565b9050919050565b600081905092915050565b50565b6000612163600083612148565b915061216e82612153565b600082019050919050565b600061218482612156565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006121ea603a836113bb565b91506121f58261218e565b604082019050919050565b60006020820190508181036000830152612219816121dd565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612256601f836113bb565b915061226182612220565b602082019050919050565b6000602082019050818103600083015261228581612249565b905091905056fea2646970667358221220d869281f4f5f701047b55af33d153097106e7cf85694e81e8a60c82947a5292664736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101a05760003560e01c8063be54eba5116100ec578063efbe1c1c1161008a578063f2fde38b11610064578063f2fde38b146105a2578063fb86a404146105cb578063fe314524146105f6578063ffc9896b14610621576101e0565b8063efbe1c1c14610523578063f0e3d1ba1461054e578063f10c8fe314610577576101e0565b8063c9dc5bc6116100c6578063c9dc5bc61461047b578063d18d944b146104a6578063d85afe3b146104cf578063da99e881146104fa576101e0565b8063be54eba5146103ec578063bf1a49d414610415578063c37dfd6e1461043e576101e0565b8063715018a611610159578063925ca20c11610133578063925ca20c1461034e578063974c86b514610377578063a82524b214610381578063a87430ba146103ac576101e0565b8063715018a6146102e157806373a8f514146102f85780638da5cb5b14610323576101e0565b806307973ccf146101e55780630dcf4b8f146102105780633beb26c41461023b5780634a1d4e631461026457806350312c9e1461028d5780636692514f146102b8576101e0565b366101e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d790611418565b60405180910390fd5b600080fd5b3480156101f157600080fd5b506101fa61065e565b6040516102079190611451565b60405180910390f35b34801561021c57600080fd5b50610225610664565b6040516102329190611451565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d91906114ac565b61066a565b005b34801561027057600080fd5b5061028b600480360381019061028691906114ac565b6106b3565b005b34801561029957600080fd5b506102a261072a565b6040516102af9190611451565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da91906114ac565b610732565b005b3480156102ed57600080fd5b506102f6610784565b005b34801561030457600080fd5b5061030d6107c7565b60405161031a9190611451565b60405180910390f35b34801561032f57600080fd5b506103386107cd565b604051610345919061151a565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190611599565b6107f6565b005b61037f6108d1565b005b34801561038d57600080fd5b50610396610c4c565b6040516103a39190611451565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce91906115d9565b610c52565b6040516103e39493929190611615565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e919061165a565b610c9c565b005b34801561042157600080fd5b5061043c600480360381019061043791906117e0565b610cf8565b005b34801561044a57600080fd5b50610465600480360381019061046091906114ac565b610e27565b604051610472919061151a565b60405180910390f35b34801561048757600080fd5b50610490610e5a565b60405161049d9190611829565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906114ac565b610e6d565b005b3480156104db57600080fd5b506104e4610ef9565b6040516104f19190611451565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190611844565b610eff565b005b34801561052f57600080fd5b50610538610f52565b6040516105459190611829565b60405180910390f35b34801561055a57600080fd5b506105756004803603810190610570919061165a565b610f65565b005b34801561058357600080fd5b5061058c610fc1565b6040516105999190611451565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c491906115d9565b610fc7565b005b3480156105d757600080fd5b506105e061104a565b6040516105ed9190611451565b60405180910390f35b34801561060257600080fd5b5061060b611050565b6040516106189190611451565b60405180910390f35b34801561062d57600080fd5b50610648600480360381019061064391906115d9565b611056565b60405161065591906118f7565b60405180910390f35b60075481565b60065481565b6106726110f9565b806008819055507f442838d6fd5d665f7e178d487609a403ef51f3626ed47bc205e2d4295711cf28816040516106a89190611451565b60405180910390a150565b6106bb6110f9565b804710156106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f59061195e565b60405180910390fd5b610727813373ffffffffffffffffffffffffffffffffffffffff1661117790919063ffffffff16565b50565b600047905090565b61073a6110f9565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610780573d6000803e3d6000fd5b5050565b61078c6110f9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107be906119f0565b60405180910390fd5b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107fe6110f9565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361086d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086490611a5c565b60405180910390fd5b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160020160006101000a81548160ff021916908315150217905550505050565b6108d961126b565b60003490506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081600660008282546109339190611aab565b9250508190555060001515600b60009054906101000a900460ff16151514610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098790611b2b565b60405180910390fd5b60085442116109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb90611b97565b60405180910390fd5b600015158160020160019054906101000a900460ff16151514610a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2390611c03565b60405180910390fd5b6005548210158015610a4057506004548211155b610a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7690611c6f565b60405180910390fd5b600b60019054906101000a900460ff1680610aa857508060020160009054906101000a900460ff165b610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90611cdb565b60405180910390fd5b600c5482600654610af89190611aab565b1115610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3090611d47565b60405180910390fd5b60018160020160016101000a81548160ff02191690831515021790555081816000016000828254610b6a9190611aab565b92505081905550670de0b6b3a764000082600954610b889190611d67565b610b929190611dd8565b816001016000828254610ba59190611aab565b92505081905550670de0b6b3a764000082600954610bc39190611d67565b610bcd9190611dd8565b600a6000828254610bde9190611aab565b925050819055507fa59ac6dd8b1d00e4c8ba9abba262aaac3d4d05e77324205b07a39a002e479b5f3383670de0b6b3a764000085600954610c1f9190611d67565b610c299190611dd8565b604051610c3893929190611e09565b60405180910390a15050610c4a6112ba565b565b60085481565b60036020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905084565b610ca46110f9565b80600b60016101000a81548160ff0219169083151502179055507fc6ee91f277747645bb645c271d108c2b590ce8191ff120582597c43d7b463fe781604051610ced9190611829565b60405180910390a150565b610d006110f9565b60005b8151811015610e2357600073ffffffffffffffffffffffffffffffffffffffff16828281518110610d3757610d36611e40565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90611ebb565b60405180910390fd5b600060036000848481518110610dae57610dad611e40565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160020160006101000a81548160ff021916908315150217905550508080610e1b90611edb565b915050610d03565b5050565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60019054906101000a900460ff1681565b610e756110f9565b60008111610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90611f95565b60405180910390fd5b80600c819055507f917681cdf3d8a5ef720fb56128d5382782db742feb1d89fc6d376111254537b181604051610eee9190611451565b60405180910390a150565b60055481565b610f076110f9565b81600581905550806004819055507fce04aa61eda600992913a5486c90a49b9bee640d4b208249cdb41e2c46f005618282604051610f46929190611fb5565b60405180910390a15050565b600b60009054906101000a900460ff1681565b610f6d6110f9565b80600b60006101000a81548160ff0219169083151502179055507f3e883667baa27834636706acfa6dd8c0ba584fcc0968c2dfa029aa58bbb14fc181604051610fb69190611829565b60405180910390a150565b60095481565b610fcf6110f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361103e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103590612050565b60405180910390fd5b611047816112c3565b50565b600c5481565b60045481565b61105e61138f565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180608001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff161515151581526020016002820160019054906101000a900460ff1615151515815250509050919050565b611101611387565b73ffffffffffffffffffffffffffffffffffffffff1661111f6107cd565b73ffffffffffffffffffffffffffffffffffffffff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c906120bc565b60405180910390fd5b565b804710156111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190612128565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516111e090612179565b60006040518083038185875af1925050503d806000811461121d576040519150601f19603f3d011682016040523d82523d6000602084013e611222565b606091505b5050905080611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90612200565b60405180910390fd5b505050565b6002600154036112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a79061226c565b60405180910390fd5b6002600181905550565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b604051806080016040528060008152602001600081526020016000151581526020016000151581525090565b600082825260208201905092915050565b7f4469726563742046544d207472616e7366657273206e6f7420616c6c6f776564600082015250565b60006114026020836113bb565b915061140d826113cc565b602082019050919050565b60006020820190508181036000830152611431816113f5565b9050919050565b6000819050919050565b61144b81611438565b82525050565b60006020820190506114666000830184611442565b92915050565b6000604051905090565b600080fd5b600080fd5b61148981611438565b811461149457600080fd5b50565b6000813590506114a681611480565b92915050565b6000602082840312156114c2576114c1611476565b5b60006114d084828501611497565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611504826114d9565b9050919050565b611514816114f9565b82525050565b600060208201905061152f600083018461150b565b92915050565b61153e816114f9565b811461154957600080fd5b50565b60008135905061155b81611535565b92915050565b60008115159050919050565b61157681611561565b811461158157600080fd5b50565b6000813590506115938161156d565b92915050565b600080604083850312156115b0576115af611476565b5b60006115be8582860161154c565b92505060206115cf85828601611584565b9150509250929050565b6000602082840312156115ef576115ee611476565b5b60006115fd8482850161154c565b91505092915050565b61160f81611561565b82525050565b600060808201905061162a6000830187611442565b6116376020830186611442565b6116446040830185611606565b6116516060830184611606565b95945050505050565b6000602082840312156116705761166f611476565b5b600061167e84828501611584565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6116d58261168c565b810181811067ffffffffffffffff821117156116f4576116f361169d565b5b80604052505050565b600061170761146c565b905061171382826116cc565b919050565b600067ffffffffffffffff8211156117335761173261169d565b5b602082029050602081019050919050565b600080fd5b600061175c61175784611718565b6116fd565b9050808382526020820190506020840283018581111561177f5761177e611744565b5b835b818110156117a85780611794888261154c565b845260208401935050602081019050611781565b5050509392505050565b600082601f8301126117c7576117c6611687565b5b81356117d7848260208601611749565b91505092915050565b6000602082840312156117f6576117f5611476565b5b600082013567ffffffffffffffff8111156118145761181361147b565b5b611820848285016117b2565b91505092915050565b600060208201905061183e6000830184611606565b92915050565b6000806040838503121561185b5761185a611476565b5b600061186985828601611497565b925050602061187a85828601611497565b9150509250929050565b61188d81611438565b82525050565b61189c81611561565b82525050565b6080820160008201516118b86000850182611884565b5060208201516118cb6020850182611884565b5060408201516118de6040850182611893565b5060608201516118f16060850182611893565b50505050565b600060808201905061190c60008301846118a2565b92915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b60006119486012836113bb565b915061195382611912565b602082019050919050565b600060208201905081810360008301526119778161193b565b9050919050565b7f4f776e6572736869702072656e756e63696174696f6e2069732064697361626c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006119da6022836113bb565b91506119e58261197e565b604082019050919050565b60006020820190508181036000830152611a09816119cd565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000611a46600f836113bb565b9150611a5182611a10565b602082019050919050565b60006020820190508181036000830152611a7581611a39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ab682611438565b9150611ac183611438565b9250828201905080821115611ad957611ad8611a7c565b5b92915050565b7f70726573616c652069732073746f707065640000000000000000000000000000600082015250565b6000611b156012836113bb565b9150611b2082611adf565b602082019050919050565b60006020820190508181036000830152611b4481611b08565b9050919050565b7f4e6f742073746172746564207965742100000000000000000000000000000000600082015250565b6000611b816010836113bb565b9150611b8c82611b4b565b602082019050919050565b60006020820190508181036000830152611bb081611b74565b9050919050565b7f4f6e6c79206f6e652074696d6520616c6c6f7765640000000000000000000000600082015250565b6000611bed6015836113bb565b9150611bf882611bb7565b602082019050919050565b60006020820190508181036000830152611c1c81611be0565b9050919050565b7f42757920616d6f756e74206f7574206f662072616e6765000000000000000000600082015250565b6000611c596017836113bb565b9150611c6482611c23565b602082019050919050565b60006020820190508181036000830152611c8881611c4c565b9050919050565b7f4e6f742072656769737465726564000000000000000000000000000000000000600082015250565b6000611cc5600e836113bb565b9150611cd082611c8f565b602082019050919050565b60006020820190508181036000830152611cf481611cb8565b9050919050565b7f4861726420636170207265616368656400000000000000000000000000000000600082015250565b6000611d316010836113bb565b9150611d3c82611cfb565b602082019050919050565b60006020820190508181036000830152611d6081611d24565b9050919050565b6000611d7282611438565b9150611d7d83611438565b9250828202611d8b81611438565b91508282048414831517611da257611da1611a7c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611de382611438565b9150611dee83611438565b925082611dfe57611dfd611da9565b5b828204905092915050565b6000606082019050611e1e600083018661150b565b611e2b6020830185611442565b611e386040830184611442565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e76616c6964206164647265737320696e2061727261790000000000000000600082015250565b6000611ea56018836113bb565b9150611eb082611e6f565b602082019050919050565b60006020820190508181036000830152611ed481611e98565b9050919050565b6000611ee682611438565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f1857611f17611a7c565b5b600182019050919050565b7f4861726420636170206d7573742062652067726561746572207468616e207a6560008201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f7f6022836113bb565b9150611f8a82611f23565b604082019050919050565b60006020820190508181036000830152611fae81611f72565b9050919050565b6000604082019050611fca6000830185611442565b611fd76020830184611442565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061203a6026836113bb565b915061204582611fde565b604082019050919050565b600060208201905081810360008301526120698161202d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006120a66020836113bb565b91506120b182612070565b602082019050919050565b600060208201905081810360008301526120d581612099565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000612112601d836113bb565b915061211d826120dc565b602082019050919050565b6000602082019050818103600083015261214181612105565b9050919050565b600081905092915050565b50565b6000612163600083612148565b915061216e82612153565b600082019050919050565b600061218482612156565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006121ea603a836113bb565b91506121f58261218e565b604082019050919050565b60006020820190508181036000830152612219816121dd565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612256601f836113bb565b915061226182612220565b602082019050919050565b6000602082019050818103600083015261228581612249565b905091905056fea2646970667358221220d869281f4f5f701047b55af33d153097106e7cf85694e81e8a60c82947a5292664736f6c63430008130033
Deployed Bytecode Sourcemap
30410:4196:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34553:42;;;;;;;;;;:::i;:::-;;;;;;;;30410:4196;;;;30962:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30923:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32620:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32919:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34278:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32802;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33114:126;;;;;;;;;;;;;:::i;:::-;;31082:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2410:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32064:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33416:854;;;:::i;:::-;;30993:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30610:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33248:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32294:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30559:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31142:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31525:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30880:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31731:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31120:15;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31958:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31044:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3309:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31171:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30836;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34395:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30962:24;;;;:::o;30923:32::-;;;;:::o;32620:174::-;2296:13;:11;:13::i;:::-;32727:17:::1;32708:16;:36;;;;32760:26;32768:17;32760:26;;;;;;:::i;:::-;;;;;;;;32620:174:::0;:::o;32919:187::-;2296:13;:11;:13::i;:::-;33021:6:::1;32996:21;:31;;32988:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33061:37;33091:6;33069:10;33061:29;;;;:37;;;;:::i;:::-;32919:187:::0;:::o;34278:109::-;34331:7;34358:21;34351:28;;34278:109;:::o;32802:::-;2296:13;:11;:13::i;:::-;32875:10:::1;32867:28;;:36;32896:6;32867:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32802:109:::0;:::o;33114:126::-;2296:13;:11;:13::i;:::-;33188:44:::1;;;;;;;;;;:::i;:::-;;;;;;;;31082:31:::0;;;;:::o;2410:87::-;2456:7;2483:6;;;;;;;;;;;2476:13;;2410:87;:::o;32064:222::-;2296:13;:11;:13::i;:::-;32170:1:::1;32153:19;;:5;:19;;::::0;32145:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32203:21;32227:5;:12;32233:5;32227:12;;;;;;;;;;;;;;;32203:36;;32271:7;32250:4;:18;;;:28;;;;;;;;;;;;;;;;;;32134:152;32064:222:::0;;:::o;33416:854::-;6270:21;:19;:21::i;:::-;33470:14:::1;33487:9;33470:26;;33507:21;33531:5;:17;33537:10;33531:17;;;;;;;;;;;;;;;33507:41;;33580:6;33559:17;;:27;;;;;;;:::i;:::-;;;;;;;;33612:5;33605:12;;:3;;;;;;;;;;;:12;;;33597:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;33677:16;;33659:15;:34;33651:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33746:5;33733:18;;:4;:9;;;;;;;;;;;;:18;;;33725:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;33806:9;;33796:6;:19;;:42;;;;;33829:9;;33819:6;:19;;33796:42;33788:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33885:10;;;;;;;;;;;:32;;;;33899:4;:18;;;;;;;;;;;;33885:32;33877:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;33985:7;;33975:6;33955:17;;:26;;;;:::i;:::-;:37;;33947:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34036:4;34024;:9;;;:16;;;;;;;;;;;;;;;;;;34074:6;34051:4;:19;;;:29;;;;;;;:::i;:::-;;;;;;;;34134:4;34124:6;34112:9;;:18;;;;:::i;:::-;34111:27;;;;:::i;:::-;34091:4;:16;;;:47;;;;;;;:::i;:::-;;;;;;;;34192:4;34182:6;34170:9;;:18;;;;:::i;:::-;34169:27;;;;:::i;:::-;34149:16;;:47;;;;;;;:::i;:::-;;;;;;;;34212:50;34216:10;34227:6;34257:4;34247:6;34235:9;;:18;;;;:::i;:::-;34234:27;;;;:::i;:::-;34212:50;;;;;;;;:::i;:::-;;;;;;;;33459:811;;6314:20:::0;:18;:20::i;:::-;33416:854::o;30993:44::-;;;;:::o;30610:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33248:131::-;2296:13;:11;:13::i;:::-;33326:7:::1;33313:10;;:20;;;;;;;;;;;;;;;;;;33349:22;33363:7;33349:22;;;;;;:::i;:::-;;;;;;;;33248:131:::0;:::o;32294:318::-;2296:13;:11;:13::i;:::-;32384:9:::1;32379:226;32403:6;:13;32399:1;:17;32379:226;;;32467:1;32446:23;;:6;32453:1;32446:9;;;;;;;;:::i;:::-;;;;;;;;:23;;::::0;32438:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32513:21;32537:5;:16;32543:6;32550:1;32543:9;;;;;;;;:::i;:::-;;;;;;;;32537:16;;;;;;;;;;;;;;;32513:40;;32589:4;32568;:18;;;:25;;;;;;;;;;;;;;;;;;32423:182;32418:3;;;;;:::i;:::-;;;;32379:226;;;;32294:318:::0;:::o;30559:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;31142:22::-;;;;;;;;;;;;;:::o;31525:198::-;2296:13;:11;:13::i;:::-;31610:1:::1;31599:8;:12;31591:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;31671:8;31661:7;:18;;;;31695:20;31706:8;31695:20;;;;;;:::i;:::-;;;;;;;;31525:198:::0;:::o;30880:36::-;;;;:::o;31731:219::-;2296:13;:11;:13::i;:::-;31840:10:::1;31828:9;:22;;;;31873:10;31861:9;:22;;;;31899:43;31919:10;31931;31899:43;;;;;;;:::i;:::-;;;;;;;;31731:219:::0;;:::o;31120:15::-;;;;;;;;;;;;;:::o;31958:98::-;2296:13;:11;:13::i;:::-;32019:4:::1;32013:3;;:10;;;;;;;;;;;;;;;;;;32039:9;32043:4;32039:9;;;;;;:::i;:::-;;;;;;;;31958:98:::0;:::o;31044:31::-;;;;:::o;3309:201::-;2296:13;:11;:13::i;:::-;3418:1:::1;3398:22;;:8;:22;;::::0;3390:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3474:28;3493:8;3474:18;:28::i;:::-;3309:201:::0;:::o;31171:37::-;;;;:::o;30836:::-;;;;:::o;34395:112::-;34452:15;;:::i;:::-;34487:5;:12;34493:5;34487:12;;;;;;;;;;;;;;;34480:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34395:112;;;:::o;2575:132::-;2650:12;:10;:12::i;:::-;2639:23;;:7;:5;:7::i;:::-;:23;;;2631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2575:132::o;9955:317::-;10070:6;10045:21;:31;;10037:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10124:12;10142:9;:14;;10164:6;10142:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10123:52;;;10194:7;10186:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10026:246;9955:317;;:::o;6350:293::-;5752:1;6484:7;;:19;6476:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5752:1;6617:7;:18;;;;6350:293::o;6651:213::-;5708:1;6834:7;:22;;;;6651:213::o;3670:191::-;3744:16;3763:6;;;;;;;;;;;3744:25;;3789:8;3780:6;;:17;;;;;;;;;;;;;;;;;;3844:8;3813:40;;3834:8;3813:40;;;;;;;;;;;;3733:128;3670:191;:::o;799:98::-;852:7;879:10;872:17;;799:98;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:169:1:-;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:182::-;322:34;318:1;310:6;306:14;299:58;182:182;:::o;370:366::-;512:3;533:67;597:2;592:3;533:67;:::i;:::-;526:74;;609:93;698:3;609:93;:::i;:::-;727:2;722:3;718:12;711:19;;370:366;;;:::o;742:419::-;908:4;946:2;935:9;931:18;923:26;;995:9;989:4;985:20;981:1;970:9;966:17;959:47;1023:131;1149:4;1023:131;:::i;:::-;1015:139;;742:419;;;:::o;1167:77::-;1204:7;1233:5;1222:16;;1167:77;;;:::o;1250:118::-;1337:24;1355:5;1337:24;:::i;:::-;1332:3;1325:37;1250:118;;:::o;1374:222::-;1467:4;1505:2;1494:9;1490:18;1482:26;;1518:71;1586:1;1575:9;1571:17;1562:6;1518:71;:::i;:::-;1374:222;;;;:::o;1602:75::-;1635:6;1668:2;1662:9;1652:19;;1602:75;:::o;1683:117::-;1792:1;1789;1782:12;1806:117;1915:1;1912;1905:12;1929:122;2002:24;2020:5;2002:24;:::i;:::-;1995:5;1992:35;1982:63;;2041:1;2038;2031:12;1982:63;1929:122;:::o;2057:139::-;2103:5;2141:6;2128:20;2119:29;;2157:33;2184:5;2157:33;:::i;:::-;2057:139;;;;:::o;2202:329::-;2261:6;2310:2;2298:9;2289:7;2285:23;2281:32;2278:119;;;2316:79;;:::i;:::-;2278:119;2436:1;2461:53;2506:7;2497:6;2486:9;2482:22;2461:53;:::i;:::-;2451:63;;2407:117;2202:329;;;;:::o;2537:126::-;2574:7;2614:42;2607:5;2603:54;2592:65;;2537:126;;;:::o;2669:96::-;2706:7;2735:24;2753:5;2735:24;:::i;:::-;2724:35;;2669:96;;;:::o;2771:118::-;2858:24;2876:5;2858:24;:::i;:::-;2853:3;2846:37;2771:118;;:::o;2895:222::-;2988:4;3026:2;3015:9;3011:18;3003:26;;3039:71;3107:1;3096:9;3092:17;3083:6;3039:71;:::i;:::-;2895:222;;;;:::o;3123:122::-;3196:24;3214:5;3196:24;:::i;:::-;3189:5;3186:35;3176:63;;3235:1;3232;3225:12;3176:63;3123:122;:::o;3251:139::-;3297:5;3335:6;3322:20;3313:29;;3351:33;3378:5;3351:33;:::i;:::-;3251:139;;;;:::o;3396:90::-;3430:7;3473:5;3466:13;3459:21;3448:32;;3396:90;;;:::o;3492:116::-;3562:21;3577:5;3562:21;:::i;:::-;3555:5;3552:32;3542:60;;3598:1;3595;3588:12;3542:60;3492:116;:::o;3614:133::-;3657:5;3695:6;3682:20;3673:29;;3711:30;3735:5;3711:30;:::i;:::-;3614:133;;;;:::o;3753:468::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:50;4196:7;4187:6;4176:9;4172:22;4154:50;:::i;:::-;4144:60;;4099:115;3753:468;;;;;:::o;4227:329::-;4286:6;4335:2;4323:9;4314:7;4310:23;4306:32;4303:119;;;4341:79;;:::i;:::-;4303:119;4461:1;4486:53;4531:7;4522:6;4511:9;4507:22;4486:53;:::i;:::-;4476:63;;4432:117;4227:329;;;;:::o;4562:109::-;4643:21;4658:5;4643:21;:::i;:::-;4638:3;4631:34;4562:109;;:::o;4677:529::-;4842:4;4880:3;4869:9;4865:19;4857:27;;4894:71;4962:1;4951:9;4947:17;4938:6;4894:71;:::i;:::-;4975:72;5043:2;5032:9;5028:18;5019:6;4975:72;:::i;:::-;5057:66;5119:2;5108:9;5104:18;5095:6;5057:66;:::i;:::-;5133;5195:2;5184:9;5180:18;5171:6;5133:66;:::i;:::-;4677:529;;;;;;;:::o;5212:323::-;5268:6;5317:2;5305:9;5296:7;5292:23;5288:32;5285:119;;;5323:79;;:::i;:::-;5285:119;5443:1;5468:50;5510:7;5501:6;5490:9;5486:22;5468:50;:::i;:::-;5458:60;;5414:114;5212:323;;;;:::o;5541:117::-;5650:1;5647;5640:12;5664:102;5705:6;5756:2;5752:7;5747:2;5740:5;5736:14;5732:28;5722:38;;5664:102;;;:::o;5772:180::-;5820:77;5817:1;5810:88;5917:4;5914:1;5907:15;5941:4;5938:1;5931:15;5958:281;6041:27;6063:4;6041:27;:::i;:::-;6033:6;6029:40;6171:6;6159:10;6156:22;6135:18;6123:10;6120:34;6117:62;6114:88;;;6182:18;;:::i;:::-;6114:88;6222:10;6218:2;6211:22;6001:238;5958:281;;:::o;6245:129::-;6279:6;6306:20;;:::i;:::-;6296:30;;6335:33;6363:4;6355:6;6335:33;:::i;:::-;6245:129;;;:::o;6380:311::-;6457:4;6547:18;6539:6;6536:30;6533:56;;;6569:18;;:::i;:::-;6533:56;6619:4;6611:6;6607:17;6599:25;;6679:4;6673;6669:15;6661:23;;6380:311;;;:::o;6697:117::-;6806:1;6803;6796:12;6837:710;6933:5;6958:81;6974:64;7031:6;6974:64;:::i;:::-;6958:81;:::i;:::-;6949:90;;7059:5;7088:6;7081:5;7074:21;7122:4;7115:5;7111:16;7104:23;;7175:4;7167:6;7163:17;7155:6;7151:30;7204:3;7196:6;7193:15;7190:122;;;7223:79;;:::i;:::-;7190:122;7338:6;7321:220;7355:6;7350:3;7347:15;7321:220;;;7430:3;7459:37;7492:3;7480:10;7459:37;:::i;:::-;7454:3;7447:50;7526:4;7521:3;7517:14;7510:21;;7397:144;7381:4;7376:3;7372:14;7365:21;;7321:220;;;7325:21;6939:608;;6837:710;;;;;:::o;7570:370::-;7641:5;7690:3;7683:4;7675:6;7671:17;7667:27;7657:122;;7698:79;;:::i;:::-;7657:122;7815:6;7802:20;7840:94;7930:3;7922:6;7915:4;7907:6;7903:17;7840:94;:::i;:::-;7831:103;;7647:293;7570:370;;;;:::o;7946:539::-;8030:6;8079:2;8067:9;8058:7;8054:23;8050:32;8047:119;;;8085:79;;:::i;:::-;8047:119;8233:1;8222:9;8218:17;8205:31;8263:18;8255:6;8252:30;8249:117;;;8285:79;;:::i;:::-;8249:117;8390:78;8460:7;8451:6;8440:9;8436:22;8390:78;:::i;:::-;8380:88;;8176:302;7946:539;;;;:::o;8491:210::-;8578:4;8616:2;8605:9;8601:18;8593:26;;8629:65;8691:1;8680:9;8676:17;8667:6;8629:65;:::i;:::-;8491:210;;;;:::o;8707:474::-;8775:6;8783;8832:2;8820:9;8811:7;8807:23;8803:32;8800:119;;;8838:79;;:::i;:::-;8800:119;8958:1;8983:53;9028:7;9019:6;9008:9;9004:22;8983:53;:::i;:::-;8973:63;;8929:117;9085:2;9111:53;9156:7;9147:6;9136:9;9132:22;9111:53;:::i;:::-;9101:63;;9056:118;8707:474;;;;;:::o;9187:108::-;9264:24;9282:5;9264:24;:::i;:::-;9259:3;9252:37;9187:108;;:::o;9301:99::-;9372:21;9387:5;9372:21;:::i;:::-;9367:3;9360:34;9301:99;;:::o;9464:871::-;9613:4;9608:3;9604:14;9710:4;9703:5;9699:16;9693:23;9729:63;9786:4;9781:3;9777:14;9763:12;9729:63;:::i;:::-;9628:174;9891:4;9884:5;9880:16;9874:23;9910:63;9967:4;9962:3;9958:14;9944:12;9910:63;:::i;:::-;9812:171;10074:4;10067:5;10063:16;10057:23;10093:57;10144:4;10139:3;10135:14;10121:12;10093:57;:::i;:::-;9993:167;10242:4;10235:5;10231:16;10225:23;10261:57;10312:4;10307:3;10303:14;10289:12;10261:57;:::i;:::-;10170:158;9582:753;9464:871;;:::o;10341:327::-;10486:4;10524:3;10513:9;10509:19;10501:27;;10538:123;10658:1;10647:9;10643:17;10634:6;10538:123;:::i;:::-;10341:327;;;;:::o;10674:168::-;10814:20;10810:1;10802:6;10798:14;10791:44;10674:168;:::o;10848:366::-;10990:3;11011:67;11075:2;11070:3;11011:67;:::i;:::-;11004:74;;11087:93;11176:3;11087:93;:::i;:::-;11205:2;11200:3;11196:12;11189:19;;10848:366;;;:::o;11220:419::-;11386:4;11424:2;11413:9;11409:18;11401:26;;11473:9;11467:4;11463:20;11459:1;11448:9;11444:17;11437:47;11501:131;11627:4;11501:131;:::i;:::-;11493:139;;11220:419;;;:::o;11645:221::-;11785:34;11781:1;11773:6;11769:14;11762:58;11854:4;11849:2;11841:6;11837:15;11830:29;11645:221;:::o;11872:366::-;12014:3;12035:67;12099:2;12094:3;12035:67;:::i;:::-;12028:74;;12111:93;12200:3;12111:93;:::i;:::-;12229:2;12224:3;12220:12;12213:19;;11872:366;;;:::o;12244:419::-;12410:4;12448:2;12437:9;12433:18;12425:26;;12497:9;12491:4;12487:20;12483:1;12472:9;12468:17;12461:47;12525:131;12651:4;12525:131;:::i;:::-;12517:139;;12244:419;;;:::o;12669:165::-;12809:17;12805:1;12797:6;12793:14;12786:41;12669:165;:::o;12840:366::-;12982:3;13003:67;13067:2;13062:3;13003:67;:::i;:::-;12996:74;;13079:93;13168:3;13079:93;:::i;:::-;13197:2;13192:3;13188:12;13181:19;;12840:366;;;:::o;13212:419::-;13378:4;13416:2;13405:9;13401:18;13393:26;;13465:9;13459:4;13455:20;13451:1;13440:9;13436:17;13429:47;13493:131;13619:4;13493:131;:::i;:::-;13485:139;;13212:419;;;:::o;13637:180::-;13685:77;13682:1;13675:88;13782:4;13779:1;13772:15;13806:4;13803:1;13796:15;13823:191;13863:3;13882:20;13900:1;13882:20;:::i;:::-;13877:25;;13916:20;13934:1;13916:20;:::i;:::-;13911:25;;13959:1;13956;13952:9;13945:16;;13980:3;13977:1;13974:10;13971:36;;;13987:18;;:::i;:::-;13971:36;13823:191;;;;:::o;14020:168::-;14160:20;14156:1;14148:6;14144:14;14137:44;14020:168;:::o;14194:366::-;14336:3;14357:67;14421:2;14416:3;14357:67;:::i;:::-;14350:74;;14433:93;14522:3;14433:93;:::i;:::-;14551:2;14546:3;14542:12;14535:19;;14194:366;;;:::o;14566:419::-;14732:4;14770:2;14759:9;14755:18;14747:26;;14819:9;14813:4;14809:20;14805:1;14794:9;14790:17;14783:47;14847:131;14973:4;14847:131;:::i;:::-;14839:139;;14566:419;;;:::o;14991:166::-;15131:18;15127:1;15119:6;15115:14;15108:42;14991:166;:::o;15163:366::-;15305:3;15326:67;15390:2;15385:3;15326:67;:::i;:::-;15319:74;;15402:93;15491:3;15402:93;:::i;:::-;15520:2;15515:3;15511:12;15504:19;;15163:366;;;:::o;15535:419::-;15701:4;15739:2;15728:9;15724:18;15716:26;;15788:9;15782:4;15778:20;15774:1;15763:9;15759:17;15752:47;15816:131;15942:4;15816:131;:::i;:::-;15808:139;;15535:419;;;:::o;15960:171::-;16100:23;16096:1;16088:6;16084:14;16077:47;15960:171;:::o;16137:366::-;16279:3;16300:67;16364:2;16359:3;16300:67;:::i;:::-;16293:74;;16376:93;16465:3;16376:93;:::i;:::-;16494:2;16489:3;16485:12;16478:19;;16137:366;;;:::o;16509:419::-;16675:4;16713:2;16702:9;16698:18;16690:26;;16762:9;16756:4;16752:20;16748:1;16737:9;16733:17;16726:47;16790:131;16916:4;16790:131;:::i;:::-;16782:139;;16509:419;;;:::o;16934:173::-;17074:25;17070:1;17062:6;17058:14;17051:49;16934:173;:::o;17113:366::-;17255:3;17276:67;17340:2;17335:3;17276:67;:::i;:::-;17269:74;;17352:93;17441:3;17352:93;:::i;:::-;17470:2;17465:3;17461:12;17454:19;;17113:366;;;:::o;17485:419::-;17651:4;17689:2;17678:9;17674:18;17666:26;;17738:9;17732:4;17728:20;17724:1;17713:9;17709:17;17702:47;17766:131;17892:4;17766:131;:::i;:::-;17758:139;;17485:419;;;:::o;17910:164::-;18050:16;18046:1;18038:6;18034:14;18027:40;17910:164;:::o;18080:366::-;18222:3;18243:67;18307:2;18302:3;18243:67;:::i;:::-;18236:74;;18319:93;18408:3;18319:93;:::i;:::-;18437:2;18432:3;18428:12;18421:19;;18080:366;;;:::o;18452:419::-;18618:4;18656:2;18645:9;18641:18;18633:26;;18705:9;18699:4;18695:20;18691:1;18680:9;18676:17;18669:47;18733:131;18859:4;18733:131;:::i;:::-;18725:139;;18452:419;;;:::o;18877:166::-;19017:18;19013:1;19005:6;19001:14;18994:42;18877:166;:::o;19049:366::-;19191:3;19212:67;19276:2;19271:3;19212:67;:::i;:::-;19205:74;;19288:93;19377:3;19288:93;:::i;:::-;19406:2;19401:3;19397:12;19390:19;;19049:366;;;:::o;19421:419::-;19587:4;19625:2;19614:9;19610:18;19602:26;;19674:9;19668:4;19664:20;19660:1;19649:9;19645:17;19638:47;19702:131;19828:4;19702:131;:::i;:::-;19694:139;;19421:419;;;:::o;19846:410::-;19886:7;19909:20;19927:1;19909:20;:::i;:::-;19904:25;;19943:20;19961:1;19943:20;:::i;:::-;19938:25;;19998:1;19995;19991:9;20020:30;20038:11;20020:30;:::i;:::-;20009:41;;20199:1;20190:7;20186:15;20183:1;20180:22;20160:1;20153:9;20133:83;20110:139;;20229:18;;:::i;:::-;20110:139;19894:362;19846:410;;;;:::o;20262:180::-;20310:77;20307:1;20300:88;20407:4;20404:1;20397:15;20431:4;20428:1;20421:15;20448:185;20488:1;20505:20;20523:1;20505:20;:::i;:::-;20500:25;;20539:20;20557:1;20539:20;:::i;:::-;20534:25;;20578:1;20568:35;;20583:18;;:::i;:::-;20568:35;20625:1;20622;20618:9;20613:14;;20448:185;;;;:::o;20639:442::-;20788:4;20826:2;20815:9;20811:18;20803:26;;20839:71;20907:1;20896:9;20892:17;20883:6;20839:71;:::i;:::-;20920:72;20988:2;20977:9;20973:18;20964:6;20920:72;:::i;:::-;21002;21070:2;21059:9;21055:18;21046:6;21002:72;:::i;:::-;20639:442;;;;;;:::o;21087:180::-;21135:77;21132:1;21125:88;21232:4;21229:1;21222:15;21256:4;21253:1;21246:15;21273:174;21413:26;21409:1;21401:6;21397:14;21390:50;21273:174;:::o;21453:366::-;21595:3;21616:67;21680:2;21675:3;21616:67;:::i;:::-;21609:74;;21692:93;21781:3;21692:93;:::i;:::-;21810:2;21805:3;21801:12;21794:19;;21453:366;;;:::o;21825:419::-;21991:4;22029:2;22018:9;22014:18;22006:26;;22078:9;22072:4;22068:20;22064:1;22053:9;22049:17;22042:47;22106:131;22232:4;22106:131;:::i;:::-;22098:139;;21825:419;;;:::o;22250:233::-;22289:3;22312:24;22330:5;22312:24;:::i;:::-;22303:33;;22358:66;22351:5;22348:77;22345:103;;22428:18;;:::i;:::-;22345:103;22475:1;22468:5;22464:13;22457:20;;22250:233;;;:::o;22489:221::-;22629:34;22625:1;22617:6;22613:14;22606:58;22698:4;22693:2;22685:6;22681:15;22674:29;22489:221;:::o;22716:366::-;22858:3;22879:67;22943:2;22938:3;22879:67;:::i;:::-;22872:74;;22955:93;23044:3;22955:93;:::i;:::-;23073:2;23068:3;23064:12;23057:19;;22716:366;;;:::o;23088:419::-;23254:4;23292:2;23281:9;23277:18;23269:26;;23341:9;23335:4;23331:20;23327:1;23316:9;23312:17;23305:47;23369:131;23495:4;23369:131;:::i;:::-;23361:139;;23088:419;;;:::o;23513:332::-;23634:4;23672:2;23661:9;23657:18;23649:26;;23685:71;23753:1;23742:9;23738:17;23729:6;23685:71;:::i;:::-;23766:72;23834:2;23823:9;23819:18;23810:6;23766:72;:::i;:::-;23513:332;;;;;:::o;23851:225::-;23991:34;23987:1;23979:6;23975:14;23968:58;24060:8;24055:2;24047:6;24043:15;24036:33;23851:225;:::o;24082:366::-;24224:3;24245:67;24309:2;24304:3;24245:67;:::i;:::-;24238:74;;24321:93;24410:3;24321:93;:::i;:::-;24439:2;24434:3;24430:12;24423:19;;24082:366;;;:::o;24454:419::-;24620:4;24658:2;24647:9;24643:18;24635:26;;24707:9;24701:4;24697:20;24693:1;24682:9;24678:17;24671:47;24735:131;24861:4;24735:131;:::i;:::-;24727:139;;24454:419;;;:::o;24879:182::-;25019:34;25015:1;25007:6;25003:14;24996:58;24879:182;:::o;25067:366::-;25209:3;25230:67;25294:2;25289:3;25230:67;:::i;:::-;25223:74;;25306:93;25395:3;25306:93;:::i;:::-;25424:2;25419:3;25415:12;25408:19;;25067:366;;;:::o;25439:419::-;25605:4;25643:2;25632:9;25628:18;25620:26;;25692:9;25686:4;25682:20;25678:1;25667:9;25663:17;25656:47;25720:131;25846:4;25720:131;:::i;:::-;25712:139;;25439:419;;;:::o;25864:179::-;26004:31;26000:1;25992:6;25988:14;25981:55;25864:179;:::o;26049:366::-;26191:3;26212:67;26276:2;26271:3;26212:67;:::i;:::-;26205:74;;26288:93;26377:3;26288:93;:::i;:::-;26406:2;26401:3;26397:12;26390:19;;26049:366;;;:::o;26421:419::-;26587:4;26625:2;26614:9;26610:18;26602:26;;26674:9;26668:4;26664:20;26660:1;26649:9;26645:17;26638:47;26702:131;26828:4;26702:131;:::i;:::-;26694:139;;26421:419;;;:::o;26846:147::-;26947:11;26984:3;26969:18;;26846:147;;;;:::o;26999:114::-;;:::o;27119:398::-;27278:3;27299:83;27380:1;27375:3;27299:83;:::i;:::-;27292:90;;27391:93;27480:3;27391:93;:::i;:::-;27509:1;27504:3;27500:11;27493:18;;27119:398;;;:::o;27523:379::-;27707:3;27729:147;27872:3;27729:147;:::i;:::-;27722:154;;27893:3;27886:10;;27523:379;;;:::o;27908:245::-;28048:34;28044:1;28036:6;28032:14;28025:58;28117:28;28112:2;28104:6;28100:15;28093:53;27908:245;:::o;28159:366::-;28301:3;28322:67;28386:2;28381:3;28322:67;:::i;:::-;28315:74;;28398:93;28487:3;28398:93;:::i;:::-;28516:2;28511:3;28507:12;28500:19;;28159:366;;;:::o;28531:419::-;28697:4;28735:2;28724:9;28720:18;28712:26;;28784:9;28778:4;28774:20;28770:1;28759:9;28755:17;28748:47;28812:131;28938:4;28812:131;:::i;:::-;28804:139;;28531:419;;;:::o;28956:181::-;29096:33;29092:1;29084:6;29080:14;29073:57;28956:181;:::o;29143:366::-;29285:3;29306:67;29370:2;29365:3;29306:67;:::i;:::-;29299:74;;29382:93;29471:3;29382:93;:::i;:::-;29500:2;29495:3;29491:12;29484:19;;29143:366;;;:::o;29515:419::-;29681:4;29719:2;29708:9;29704:18;29696:26;;29768:9;29762:4;29758:20;29754:1;29743:9;29739:17;29732:47;29796:131;29922:4;29796:131;:::i;:::-;29788:139;;29515:419;;;:::o
Swarm Source
ipfs://d869281f4f5f701047b55af33d153097106e7cf85694e81e8a60c82947a52926
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.