More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 126 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Amount | 19273860 | 155 days ago | IN | 0 ETH | 0.00891712 | ||||
Claim Amount | 18546622 | 257 days ago | IN | 0 ETH | 0.00049762 | ||||
Claim Amount | 18546619 | 257 days ago | IN | 0 ETH | 0.00052958 | ||||
Claim Amount | 18546492 | 257 days ago | IN | 0 ETH | 0.00056523 | ||||
Claim Amount | 18472928 | 267 days ago | IN | 0 ETH | 0.00664867 | ||||
Claim Amount | 18445872 | 271 days ago | IN | 0 ETH | 0.00156735 | ||||
Claim Amount | 18432327 | 273 days ago | IN | 0 ETH | 0.00239938 | ||||
Claim Multiple | 18424709 | 274 days ago | IN | 0 ETH | 0.00323611 | ||||
Claim Amount | 18424655 | 274 days ago | IN | 0 ETH | 0.00183883 | ||||
Claim Amount | 18423679 | 274 days ago | IN | 0 ETH | 0.00217007 | ||||
Claim Amount | 18423457 | 274 days ago | IN | 0 ETH | 0.0027132 | ||||
Claim Multiple | 18422761 | 274 days ago | IN | 0 ETH | 0.00301548 | ||||
Claim Amount | 18422714 | 274 days ago | IN | 0 ETH | 0.00493967 | ||||
Claim Multiple | 18422654 | 274 days ago | IN | 0 ETH | 0.00586769 | ||||
Claim Amount | 18422475 | 274 days ago | IN | 0 ETH | 0.00349307 | ||||
Claim Multiple | 18422286 | 274 days ago | IN | 0 ETH | 0.00542225 | ||||
Claim Amount | 18422121 | 274 days ago | IN | 0 ETH | 0.00378774 | ||||
Claim Amount | 18421988 | 274 days ago | IN | 0 ETH | 0.00074159 | ||||
Claim Multiple | 18421821 | 274 days ago | IN | 0 ETH | 0.00437236 | ||||
Claim Amount | 18421363 | 274 days ago | IN | 0 ETH | 0.00922078 | ||||
Claim Amount | 18420849 | 274 days ago | IN | 0 ETH | 0.00074586 | ||||
Claim Amount | 18420825 | 274 days ago | IN | 0 ETH | 0.00058147 | ||||
Claim Amount | 18420805 | 274 days ago | IN | 0 ETH | 0.00079334 | ||||
Claim Amount | 18420609 | 274 days ago | IN | 0 ETH | 0.00834088 | ||||
Claim Amount | 18420595 | 274 days ago | IN | 0 ETH | 0.00463865 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18340314 | 286 days ago | 0.35 ETH | ||||
18332907 | 287 days ago | 0.03 ETH | ||||
18330265 | 287 days ago | 0.063676 ETH | ||||
18329120 | 287 days ago | 0.000008 ETH | ||||
18324135 | 288 days ago | 0.009 ETH | ||||
18319808 | 288 days ago | 0.44 ETH | ||||
18317964 | 289 days ago | 0.006314 ETH | ||||
18315552 | 289 days ago | 0.123 ETH | ||||
18314021 | 289 days ago | 0.15 ETH | ||||
18313823 | 289 days ago | 0.118 ETH | ||||
18313327 | 289 days ago | 2.3 ETH | ||||
18311681 | 290 days ago | 0.18 ETH | ||||
18311345 | 290 days ago | 0.006137 ETH | ||||
18310148 | 290 days ago | 0.153072 ETH | ||||
18309671 | 290 days ago | 0.061414 ETH | ||||
18308084 | 290 days ago | 0.000031 ETH | ||||
18305108 | 290 days ago | 0.06 ETH | ||||
18304008 | 291 days ago | 0.001841 ETH | ||||
18293567 | 292 days ago | 0.065284 ETH | ||||
18293520 | 292 days ago | 0.06 ETH | ||||
18293231 | 292 days ago | 0.06 ETH | ||||
18286907 | 293 days ago | 0.012383 ETH | ||||
18286727 | 293 days ago | 0.001858 ETH | ||||
18286426 | 293 days ago | 0.309266 ETH | ||||
18281730 | 294 days ago | 0.003 ETH |
Loading...
Loading
Contract Name:
EverETHICO
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-01 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol pragma solidity ^0.8.1; /** * @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; } } // File: @openzeppelin/contracts/utils/Context.sol /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: renqFinanceUpdate.sol //SPDX-License-Identifier: MIT interface Aggregator { function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } contract EverETHICO is ReentrancyGuard, Ownable { uint256 public presaleId; uint256 public ETH_MULTIPLIER; uint256 public USDT_MULTIPLIER; address public fundReceiver; struct Presale { uint256 startTime; uint256 endTime; uint256 price; uint256 nextStagePrice; uint256 Sold; uint256 tokensToSell; uint256 UsdtHardcap; uint256 amountRaised; bool Active; bool isEnableClaim; } struct ClaimData { uint256 claimAt; uint256 totalAmount; uint256 claimedAmount; } Aggregator internal aggregatorInterface; // https://docs.chain.link/docs/ethereum-addresses/ => (ETH / USD) mapping(uint256 => bool) public paused; mapping(uint256 => Presale) public presale; mapping(address => mapping(uint256 => ClaimData)) public userClaimData; mapping(address => bool) public isExcludeMinToken; uint256 public MinTokenTobuy = 1 * (10**18); uint256 public MaxTokenTobuy = 1000000 * (10**18); address public SaleToken; event newWalletAdded( uint256 _tier, address wallet, uint256 _maxBuyAmount ); event PresaleCreated( uint256 indexed _id, uint256 _totalTokens, uint256 _startTime, uint256 _endTime ); event PresaleUpdated( bytes32 indexed key, uint256 prevValue, uint256 newValue, uint256 timestamp ); event TokensBought( address indexed user, uint256 indexed id, address indexed purchaseToken, uint256 tokensBought, uint256 amountPaid, uint256 timestamp ); event TokensClaimed( address indexed user, uint256 indexed id, uint256 amount, uint256 timestamp ); event PresaleTokenAddressUpdated( address indexed prevValue, address indexed newValue, uint256 timestamp ); event PresalePaused(uint256 indexed id, uint256 timestamp); event PresaleUnpaused(uint256 indexed id, uint256 timestamp); constructor() { aggregatorInterface = Aggregator(address(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419)); ETH_MULTIPLIER = (10**18); USDT_MULTIPLIER =(10**6) ; fundReceiver = msg.sender; } function ChangeTokenToSell(address _token) public onlyOwner { SaleToken = _token; } function EditMinTokenToBuy(uint256 _amount) public onlyOwner { MinTokenTobuy = _amount; } function EditMaxTokenToBuy(uint256 _amount) public onlyOwner { MaxTokenTobuy = _amount; } // /** // * @dev Creates a new presale // * @param _price Per token price multiplied by (10**18) // * @param _tokensToSell No of tokens to sell // */ function createPresale(uint256 _price,uint256 _nextStagePrice, uint256 _tokensToSell, uint256 _UsdtHardcap) external onlyOwner { require(_price > 0, "Zero price"); require(_tokensToSell > 0, "Zero tokens to sell"); require(presale[presaleId].Active == false, "Previous Sale is Active"); presaleId++; presale[presaleId] = Presale( 0, 0, _price, _nextStagePrice, 0, _tokensToSell, _UsdtHardcap, 0, false, false ); emit PresaleCreated(presaleId, _tokensToSell, 0, 0); } function startPresale() public onlyOwner { presale[presaleId].startTime = block.timestamp; presale[presaleId].Active = true; } function endPresale() public onlyOwner { require( presale[presaleId].Active = true, "This presale is already Inactive" ); presale[presaleId].endTime = block.timestamp; presale[presaleId].Active = false; } // @dev enabel Claim amount function enableClaim(uint256 _id, bool _status) public checkPresaleId(_id) onlyOwner { presale[_id].isEnableClaim = _status; } // /** // * @dev Update a new presale // * @param _price Per USD price should be multiplied with token decimals // * @param _tokensToSell No of tokens to sell without denomination. If 1 million tokens to be sold then - 1_000_000 has to be passed // */ function updatePresale( uint256 _id, uint256 _price, uint256 _nextStagePrice, uint256 _tokensToSell, uint256 _Hardcap ) external checkPresaleId(_id) onlyOwner { require(_price > 0, "Zero price"); require(_tokensToSell > 0, "Zero tokens to sell"); presale[_id].price = _price; presale[_id].nextStagePrice = _nextStagePrice; presale[_id].tokensToSell = _tokensToSell; presale[_id].UsdtHardcap =_Hardcap; } /** * @dev To update the fund receiving wallet * @param _wallet address of wallet to update */ function changeFundWallet(address _wallet) external onlyOwner { require(_wallet != address(0), "Invalid parameters"); fundReceiver = _wallet; } /** * @dev To pause the presale * @param _id Presale id to update */ function pausePresale(uint256 _id) external checkPresaleId(_id) onlyOwner { require(!paused[_id], "Already paused"); paused[_id] = true; emit PresalePaused(_id, block.timestamp); } /** * @dev To unpause the presale * @param _id Presale id to update */ function unPausePresale(uint256 _id) external checkPresaleId(_id) onlyOwner { require(paused[_id], "Not paused"); paused[_id] = false; emit PresaleUnpaused(_id, block.timestamp); } /** * @dev To get latest ethereum price in 10**18 format */ function getLatestPrice() public view returns (uint256) { (, int256 price, , , ) = aggregatorInterface.latestRoundData(); price = (price * (10**10)); return uint256(price); } modifier checkPresaleId(uint256 _id) { require(_id > 0 && _id <= presaleId, "Invalid presale id"); _; } modifier checkSaleState(uint256 _id, uint256 amount) { require( block.timestamp >= presale[_id].startTime && presale[_id].Active == true, "Invalid time for buying" ); require( amount > 0 && amount <= presale[_id].tokensToSell-presale[_id].Sold, "Invalid sale amount" ); _; } function ExcludeAccouctFromMinBuy(address _user, bool _status) external onlyOwner { isExcludeMinToken[_user] = _status; } /** * @dev To buy into a presale using ETH */ function buyWithEth() external payable checkPresaleId(presaleId) checkSaleState(presaleId, ethToTokens(presaleId, msg.value)) nonReentrant returns (bool) { uint256 usdAmount = (msg.value * getLatestPrice() * USDT_MULTIPLIER) / (ETH_MULTIPLIER * ETH_MULTIPLIER); require(presale[presaleId].amountRaised + usdAmount <= presale[presaleId].UsdtHardcap, "Amount should be less than leftHardcap"); require(!paused[presaleId], "Presale paused"); require(presale[presaleId].Active == true, "Presale is not active yet"); uint256 tokens = usdtToTokens(presaleId, usdAmount); require((userClaimData[_msgSender()][presaleId].totalAmount + tokens) <= MaxTokenTobuy, "Max buy amount reached!"); if (isExcludeMinToken[msg.sender] == false) { require(tokens >= MinTokenTobuy, "Insufficient amount!"); } presale[presaleId].Sold += tokens; presale[presaleId].amountRaised += usdAmount; if (userClaimData[_msgSender()][presaleId].totalAmount > 0) { userClaimData[_msgSender()][presaleId].totalAmount += tokens; } else { userClaimData[_msgSender()][presaleId] = ClaimData( 0, // Last claimed at tokens, // total tokens to be claimed 0 // claimed amount ); } sendValue(payable(fundReceiver), msg.value); emit TokensBought( _msgSender(), presaleId, address(0), tokens, msg.value, block.timestamp ); return true; } /** * @dev Helper funtion to get ETH price for given amount * @param _id Presale id * @param amount No of tokens to buy */ function ethBuyHelper(uint256 _id, uint256 amount) external view checkPresaleId(_id) returns (uint256 ethAmount) { uint256 usdPrice = (amount * presale[_id].price); ethAmount = (usdPrice * ETH_MULTIPLIER) / (getLatestPrice() * 10**IERC20Metadata(SaleToken).decimals()); } /** * @dev Helper funtion to get tokens for eth amount * @param _id Presale id * @param amount No of eth */ function ethToTokens(uint256 _id, uint256 amount) public view returns (uint256 _tokens) { uint256 usdAmount = amount * getLatestPrice() * USDT_MULTIPLIER / (ETH_MULTIPLIER * ETH_MULTIPLIER); _tokens = usdtToTokens(_id, usdAmount); } /** * @dev Helper funtion to get tokens for given usdt amount * @param _id Presale id * @param amount No of usdt */ function usdtToTokens(uint256 _id, uint256 amount) public view checkPresaleId(_id) returns (uint256 _tokens) { _tokens = (amount * presale[_id].price) / USDT_MULTIPLIER; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Low balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "ETH Payment failed"); } /** * @dev Helper funtion to get claimable tokens for a given presale. * @param user User address * @param _id Presale id */ function claimableAmount(address user, uint256 _id) public view checkPresaleId(_id) returns (uint256) { ClaimData memory _user = userClaimData[user][_id]; require(_user.totalAmount > 0, "Nothing to claim"); uint256 amount = _user.totalAmount - _user.claimedAmount; require(amount > 0, "Already claimed"); return amount; } /** * @dev To claim token from a presale * @param _id Presale id */ function claimAmount(uint256 _id) public checkPresaleId(_id) returns (bool) { uint256 amount = claimableAmount(msg.sender, _id); require(amount > 0, "Zero claim amount"); require( SaleToken != address(0), "Presale token address not set" ); require( amount <= IERC20(SaleToken).balanceOf(address(this)), "Not enough tokens in the contract" ); require((presale[_id].isEnableClaim == true), "Claim is not enable"); userClaimData[msg.sender][_id].claimAt = block.timestamp; userClaimData[msg.sender][_id].claimedAmount += amount; bool status = IERC20(SaleToken).transfer(msg.sender, amount); require(status, "Token transfer failed"); emit TokensClaimed(msg.sender, _id, amount, block.timestamp); return true; } /** * @dev To claim tokens from a multiple presale * @param _id Presale id */ function claimMultiple(uint256[] calldata _id) external returns (bool) { require(_id.length > 0, "Zero ID length"); for (uint256 i; i < _id.length; i++) { require(claimAmount(_id[i]), "Claim failed"); } return true; } function WithdrawTokens(address _token, uint256 amount) external onlyOwner { IERC20(_token).transfer(fundReceiver, amount); } function WithdrawContractFunds(uint256 amount) external onlyOwner { sendValue(payable(fundReceiver), amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"PresaleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresalePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"prevValue","type":"address"},{"indexed":true,"internalType":"address","name":"newValue","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleTokenAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tier","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"newWalletAdded","type":"event"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"ChangeTokenToSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ETH_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"EditMaxTokenToBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"EditMinTokenToBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeAccouctFromMinBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MaxTokenTobuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MinTokenTobuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SaleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawContractFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyWithEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"claimAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_id","type":"uint256[]"}],"name":"claimMultiple","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"claimableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"_tokensToSell","type":"uint256"},{"internalType":"uint256","name":"_UsdtHardcap","type":"uint256"}],"name":"createPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethBuyHelper","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethToTokens","outputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeMinToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"pausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"presale","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"Sold","type":"uint256"},{"internalType":"uint256","name":"tokensToSell","type":"uint256"},{"internalType":"uint256","name":"UsdtHardcap","type":"uint256"},{"internalType":"uint256","name":"amountRaised","type":"uint256"},{"internalType":"bool","name":"Active","type":"bool"},{"internalType":"bool","name":"isEnableClaim","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"unPausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"_tokensToSell","type":"uint256"},{"internalType":"uint256","name":"_Hardcap","type":"uint256"}],"name":"updatePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdtToTokens","outputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userClaimData","outputs":[{"internalType":"uint256","name":"claimAt","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052670de0b6b3a7640000600b5569d3c21bcecceda1000000600c553480156200002b57600080fd5b50600160008190555062000054620000486200010960201b60201c565b6200011160201b60201c565b735f4ec3df9cbd43714fe2740f5e3616155c5b8419600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600381905550620f424060048190555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001d7565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61406980620001e76000396000f3fe60806040526004361061020e5760003560e01c8063833cde5211610118578063c9c8028e116100a0578063e18e84f91161006f578063e18e84f914610779578063e6ab1434146107a4578063f2fde38b146107ea578063f309fed914610813578063fb4aa0a1146108505761020e565b8063c9c8028e146106d5578063cd1704a8146106fe578063d01608c114610727578063d099850a146107505761020e565b80639051cce9116100e75780639051cce9146105ee5780639560e91b1461062b5780639752f3cb14610656578063a43be57b1461067f578063b04c7346146106965761020e565b8063833cde52146105425780638d79e66d1461056d5780638da5cb5b146105985780638e15f473146105c35761020e565b8063397643631161019b578063680f2e4f1161016a578063680f2e4f1461045f5780636fb4adff14610488578063715018a6146104b1578063718a1962146104c857806379b8d938146105055761020e565b806339764363146103b757806348bf4fcf146103e25780634a6413f71461040d578063582b5723146104365761020e565b80630fbfcf37116101e25780630fbfcf37146102b957806311b5444f146102e25780631ed0c954146103005780632127fe041461033d57806323b221a01461037a5761020e565b8062dde10e1461021357806303fcd9ac1461025057806304c98b2b146102795780630ec809a814610290575b600080fd5b34801561021f57600080fd5b5061023a60048036038101906102359190612808565b61087b565b6040516102479190612850565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906128f5565b61089b565b005b34801561028557600080fd5b5061028e6108fe565b005b34801561029c57600080fd5b506102b760048036038101906102b29190612935565b610956565b005b3480156102c557600080fd5b506102e060048036038101906102db9190612962565b6109a2565b005b6102ea610a2f565b6040516102f79190612850565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612935565b61111a565b6040516103349190612850565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f91906129a2565b61113a565b60405161037191906129f1565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190612808565b611285565b6040516103ae9190612850565b60405180910390f35b3480156103c357600080fd5b506103cc611706565b6040516103d991906129f1565b60405180910390f35b3480156103ee57600080fd5b506103f761170c565b60405161040491906129f1565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612808565b611712565b005b34801561044257600080fd5b5061045d60048036038101906104589190612808565b611835565b005b34801561046b57600080fd5b5061048660048036038101906104819190612a0c565b61186c565b005b34801561049457600080fd5b506104af60048036038101906104aa9190612935565b611919565b005b3480156104bd57600080fd5b506104c66119d4565b005b3480156104d457600080fd5b506104ef60048036038101906104ea91906129a2565b6119e8565b6040516104fc91906129f1565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190612a0c565b611a3a565b60405161053991906129f1565b60405180910390f35b34801561054e57600080fd5b50610557611bb9565b6040516105649190612a5b565b60405180910390f35b34801561057957600080fd5b50610582611bdf565b60405161058f91906129f1565b60405180910390f35b3480156105a457600080fd5b506105ad611be5565b6040516105ba9190612a5b565b60405180910390f35b3480156105cf57600080fd5b506105d8611c0f565b6040516105e591906129f1565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190612adb565b611cc3565b6040516106229190612850565b60405180910390f35b34801561063757600080fd5b50610640611d97565b60405161064d91906129f1565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190612b28565b611d9d565b005b34801561068b57600080fd5b50610694611ef1565b005b3480156106a257600080fd5b506106bd60048036038101906106b89190612a0c565b611fb8565b6040516106cc93929190612ba3565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f79190612808565b611fef565b005b34801561070a57600080fd5b5061072560048036038101906107209190612808565b612001565b005b34801561073357600080fd5b5061074e60048036038101906107499190612808565b612013565b005b34801561075c57600080fd5b5061077760048036038101906107729190612bda565b612135565b005b34801561078557600080fd5b5061078e612386565b60405161079b91906129f1565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190612808565b61238c565b6040516107e19a99989796959493929190612c41565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c9190612935565b6123fa565b005b34801561081f57600080fd5b5061083a600480360381019061083591906129a2565b61247d565b60405161084791906129f1565b60405180910390f35b34801561085c57600080fd5b50610865612509565b6040516108729190612a5b565b60405180910390f35b60076020528060005260406000206000915054906101000a900460ff1681565b6108a361252f565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61090661252f565b4260086000600254815260200190815260200160002060000181905550600160086000600254815260200190815260200160002060080160006101000a81548160ff021916908315150217905550565b61095e61252f565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b816000811180156109b557506002548111155b6109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90612d3a565b60405180910390fd5b6109fc61252f565b816008600085815260200190815260200160002060080160016101000a81548160ff021916908315150217905550505050565b6000600254600081118015610a4657506002548111155b610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c90612d3a565b60405180910390fd5b600254610a94600254346119e8565b60086000838152602001908152602001600020600001544210158015610ae15750600115156008600084815260200190815260200160002060080160009054906101000a900460ff161515145b610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790612da6565b60405180910390fd5b600081118015610b67575060086000838152602001908152602001600020600401546008600084815260200190815260200160002060050154610b639190612df5565b8111155b610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d90612e75565b60405180910390fd5b610bae6125ad565b6000600354600354610bc09190612e95565b600454610bcb611c0f565b34610bd69190612e95565b610be09190612e95565b610bea9190612f06565b9050600860006002548152602001908152602001600020600601548160086000600254815260200190815260200160002060070154610c299190612f37565b1115610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190612fdd565b60405180910390fd5b60076000600254815260200190815260200160002060009054906101000a900460ff1615610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490613049565b60405180910390fd5b6001151560086000600254815260200190815260200160002060080160009054906101000a900460ff16151514610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d30906130b5565b60405180910390fd5b6000610d476002548361247d565b9050600c548160096000610d596125fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600254815260200190815260200160002060010154610db49190612f37565b1115610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90613121565b60405180910390fd5b60001515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610e9357600b54811015610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e899061318d565b60405180910390fd5b5b806008600060025481526020019081526020016000206004016000828254610ebb9190612f37565b92505081905550816008600060025481526020019081526020016000206007016000828254610eea9190612f37565b92505081905550600060096000610eff6125fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002548152602001908152602001600020600101541115610fce578060096000610f636125fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060025481526020019081526020016000206001016000828254610fc29190612f37565b92505081905550611066565b604051806060016040528060008152602001828152602001600081525060096000610ff76125fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060025481526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050505b611092600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612604565b600073ffffffffffffffffffffffffffffffffffffffff166002546110b56125fc565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d368434426040516110fe93929190612ba3565b60405180910390a46001955050506111146126f8565b50505090565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008260008111801561114f57506002548111155b61118e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118590612d3a565b60405180910390fd5b60006008600086815260200190815260200160002060020154846111b29190612e95565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124591906131e6565b600a6112519190613346565b611259611c0f565b6112639190612e95565b600354826112719190612e95565b61127b9190612f06565b9250505092915050565b60008160008111801561129a57506002548111155b6112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090612d3a565b60405180910390fd5b60006112e53385611a3a565b90506000811161132a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611321906133dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290613449565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114169190612a5b565b602060405180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611457919061347e565b811115611499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114909061351d565b60405180910390fd5b600115156008600086815260200190815260200160002060080160019054906101000a900460ff16151514611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90613589565b60405180910390fd5b42600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000018190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060020160008282546115be9190612f37565b925050819055506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016116249291906135a9565b6020604051808303816000875af1158015611643573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166791906135e7565b9050806116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090613660565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167fe49649ad7d04a14b0d2a43dae89f207c0822143ff6f88a6480e88907e4e5c54884426040516116f2929190613680565b60405180910390a360019350505050919050565b60035481565b60045481565b8060008111801561172557506002548111155b611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b90612d3a565b60405180910390fd5b61176c61252f565b6007600083815260200190815260200160002060009054906101000a900460ff16156117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c4906136f5565b60405180910390fd5b60016007600084815260200190815260200160002060006101000a81548160ff021916908315150217905550817f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f4260405161182991906129f1565b60405180910390a25050565b61183d61252f565b611869600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612604565b50565b61187461252f565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016118d19291906135a9565b6020604051808303816000875af11580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191491906135e7565b505050565b61192161252f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198790613761565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119dc61252f565b6119e66000612702565b565b6000806003546003546119fb9190612e95565b600454611a06611c0f565b85611a119190612e95565b611a1b9190612e95565b611a259190612f06565b9050611a31848261247d565b91505092915050565b600081600081118015611a4f57506002548111155b611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8590612d3a565b60405180910390fd5b6000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506000816020015111611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b49906137cd565b60405180910390fd5b600081604001518260200151611b689190612df5565b905060008111611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba490613839565b60405180910390fd5b80935050505092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca391906138d1565b5050509150506402540be40081611cba919061394c565b90508091505090565b6000808383905011611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190613a10565b60405180910390fd5b60005b83839050811015611d8c57611d3a848483818110611d2e57611d2d613a30565b5b90506020020135611285565b611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7090613aab565b60405180910390fd5b8080611d8490613acb565b915050611d0d565b506001905092915050565b600c5481565b84600081118015611db057506002548111155b611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690612d3a565b60405180910390fd5b611df761252f565b60008511611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190613b5f565b60405180910390fd5b60008311611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7490613bcb565b60405180910390fd5b846008600088815260200190815260200160002060020181905550836008600088815260200190815260200160002060030181905550826008600088815260200190815260200160002060050181905550816008600088815260200190815260200160002060060181905550505050505050565b611ef961252f565b600160086000600254815260200190815260200160002060080160006101000a81548160ff0219169083151502179055611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f90613c37565b60405180910390fd5b4260086000600254815260200190815260200160002060010181905550600060086000600254815260200190815260200160002060080160006101000a81548160ff021916908315150217905550565b6009602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b611ff761252f565b80600c8190555050565b61200961252f565b80600b8190555050565b8060008111801561202657506002548111155b612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c90612d3a565b60405180910390fd5b61206d61252f565b6007600083815260200190815260200160002060009054906101000a900460ff166120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c490613ca3565b60405180910390fd5b60006007600084815260200190815260200160002060006101000a81548160ff021916908315150217905550817ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d4260405161212991906129f1565b60405180910390a25050565b61213d61252f565b60008411612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790613b5f565b60405180910390fd5b600082116121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90613bcb565b60405180910390fd5b6000151560086000600254815260200190815260200160002060080160009054906101000a900460ff1615151461222f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222690613d0f565b60405180910390fd5b6002600081548092919061224290613acb565b91905055506040518061014001604052806000815260200160008152602001858152602001848152602001600081526020018381526020018281526020016000815260200160001515815260200160001515815250600860006002548152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff0219169083151502179055506101208201518160080160016101000a81548160ff0219169083151502179055509050506002547f6a00651728a92841411081673eaa4eddbed06d102a590e050c22def40d4dd0b88360008060405161237893929190613d74565b60405180910390a250505050565b60025481565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080160009054906101000a900460ff16908060080160019054906101000a900460ff1690508a565b61240261252f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246890613e1d565b60405180910390fd5b61247a81612702565b50565b60008260008111801561249257506002548111155b6124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890612d3a565b60405180910390fd5b6004546008600086815260200190815260200160002060020154846124f69190612e95565b6125009190612f06565b91505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6125376125fc565b73ffffffffffffffffffffffffffffffffffffffff16612555611be5565b73ffffffffffffffffffffffffffffffffffffffff16146125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a290613e89565b60405180910390fd5b565b6002600054036125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e990613ef5565b60405180910390fd5b6002600081905550565b600033905090565b80471015612647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263e90613f61565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161266d90613fb2565b60006040518083038185875af1925050503d80600081146126aa576040519150601f19603f3d011682016040523d82523d6000602084013e6126af565b606091505b50509050806126f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ea90614013565b60405180910390fd5b505050565b6001600081905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600080fd5b6000819050919050565b6127e5816127d2565b81146127f057600080fd5b50565b600081359050612802816127dc565b92915050565b60006020828403121561281e5761281d6127c8565b5b600061282c848285016127f3565b91505092915050565b60008115159050919050565b61284a81612835565b82525050565b60006020820190506128656000830184612841565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128968261286b565b9050919050565b6128a68161288b565b81146128b157600080fd5b50565b6000813590506128c38161289d565b92915050565b6128d281612835565b81146128dd57600080fd5b50565b6000813590506128ef816128c9565b92915050565b6000806040838503121561290c5761290b6127c8565b5b600061291a858286016128b4565b925050602061292b858286016128e0565b9150509250929050565b60006020828403121561294b5761294a6127c8565b5b6000612959848285016128b4565b91505092915050565b60008060408385031215612979576129786127c8565b5b6000612987858286016127f3565b9250506020612998858286016128e0565b9150509250929050565b600080604083850312156129b9576129b86127c8565b5b60006129c7858286016127f3565b92505060206129d8858286016127f3565b9150509250929050565b6129eb816127d2565b82525050565b6000602082019050612a0660008301846129e2565b92915050565b60008060408385031215612a2357612a226127c8565b5b6000612a31858286016128b4565b9250506020612a42858286016127f3565b9150509250929050565b612a558161288b565b82525050565b6000602082019050612a706000830184612a4c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612a9b57612a9a612a76565b5b8235905067ffffffffffffffff811115612ab857612ab7612a7b565b5b602083019150836020820283011115612ad457612ad3612a80565b5b9250929050565b60008060208385031215612af257612af16127c8565b5b600083013567ffffffffffffffff811115612b1057612b0f6127cd565b5b612b1c85828601612a85565b92509250509250929050565b600080600080600060a08688031215612b4457612b436127c8565b5b6000612b52888289016127f3565b9550506020612b63888289016127f3565b9450506040612b74888289016127f3565b9350506060612b85888289016127f3565b9250506080612b96888289016127f3565b9150509295509295909350565b6000606082019050612bb860008301866129e2565b612bc560208301856129e2565b612bd260408301846129e2565b949350505050565b60008060008060808587031215612bf457612bf36127c8565b5b6000612c02878288016127f3565b9450506020612c13878288016127f3565b9350506040612c24878288016127f3565b9250506060612c35878288016127f3565b91505092959194509250565b600061014082019050612c57600083018d6129e2565b612c64602083018c6129e2565b612c71604083018b6129e2565b612c7e606083018a6129e2565b612c8b60808301896129e2565b612c9860a08301886129e2565b612ca560c08301876129e2565b612cb260e08301866129e2565b612cc0610100830185612841565b612cce610120830184612841565b9b9a5050505050505050505050565b600082825260208201905092915050565b7f496e76616c69642070726573616c652069640000000000000000000000000000600082015250565b6000612d24601283612cdd565b9150612d2f82612cee565b602082019050919050565b60006020820190508181036000830152612d5381612d17565b9050919050565b7f496e76616c69642074696d6520666f7220627579696e67000000000000000000600082015250565b6000612d90601783612cdd565b9150612d9b82612d5a565b602082019050919050565b60006020820190508181036000830152612dbf81612d83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e00826127d2565b9150612e0b836127d2565b9250828203905081811115612e2357612e22612dc6565b5b92915050565b7f496e76616c69642073616c6520616d6f756e7400000000000000000000000000600082015250565b6000612e5f601383612cdd565b9150612e6a82612e29565b602082019050919050565b60006020820190508181036000830152612e8e81612e52565b9050919050565b6000612ea0826127d2565b9150612eab836127d2565b9250828202612eb9816127d2565b91508282048414831517612ed057612ecf612dc6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f11826127d2565b9150612f1c836127d2565b925082612f2c57612f2b612ed7565b5b828204905092915050565b6000612f42826127d2565b9150612f4d836127d2565b9250828201905080821115612f6557612f64612dc6565b5b92915050565b7f416d6f756e742073686f756c64206265206c657373207468616e206c6566744860008201527f6172646361700000000000000000000000000000000000000000000000000000602082015250565b6000612fc7602683612cdd565b9150612fd282612f6b565b604082019050919050565b60006020820190508181036000830152612ff681612fba565b9050919050565b7f50726573616c6520706175736564000000000000000000000000000000000000600082015250565b6000613033600e83612cdd565b915061303e82612ffd565b602082019050919050565b6000602082019050818103600083015261306281613026565b9050919050565b7f50726573616c65206973206e6f74206163746976652079657400000000000000600082015250565b600061309f601983612cdd565b91506130aa82613069565b602082019050919050565b600060208201905081810360008301526130ce81613092565b9050919050565b7f4d61782062757920616d6f756e74207265616368656421000000000000000000600082015250565b600061310b601783612cdd565b9150613116826130d5565b602082019050919050565b6000602082019050818103600083015261313a816130fe565b9050919050565b7f496e73756666696369656e7420616d6f756e7421000000000000000000000000600082015250565b6000613177601483612cdd565b915061318282613141565b602082019050919050565b600060208201905081810360008301526131a68161316a565b9050919050565b600060ff82169050919050565b6131c3816131ad565b81146131ce57600080fd5b50565b6000815190506131e0816131ba565b92915050565b6000602082840312156131fc576131fb6127c8565b5b600061320a848285016131d1565b91505092915050565b60008160011c9050919050565b6000808291508390505b600185111561326a5780860481111561324657613245612dc6565b5b60018516156132555780820291505b808102905061326385613213565b945061322a565b94509492505050565b600082613283576001905061333f565b81613291576000905061333f565b81600181146132a757600281146132b1576132e0565b600191505061333f565b60ff8411156132c3576132c2612dc6565b5b8360020a9150848211156132da576132d9612dc6565b5b5061333f565b5060208310610133831016604e8410600b84101617156133155782820a9050838111156133105761330f612dc6565b5b61333f565b6133228484846001613220565b9250905081840481111561333957613338612dc6565b5b81810290505b9392505050565b6000613351826127d2565b915061335c836131ad565b92506133897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613273565b905092915050565b7f5a65726f20636c61696d20616d6f756e74000000000000000000000000000000600082015250565b60006133c7601183612cdd565b91506133d282613391565b602082019050919050565b600060208201905081810360008301526133f6816133ba565b9050919050565b7f50726573616c6520746f6b656e2061646472657373206e6f7420736574000000600082015250565b6000613433601d83612cdd565b915061343e826133fd565b602082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b600081519050613478816127dc565b92915050565b600060208284031215613494576134936127c8565b5b60006134a284828501613469565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e2074686520636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613507602183612cdd565b9150613512826134ab565b604082019050919050565b60006020820190508181036000830152613536816134fa565b9050919050565b7f436c61696d206973206e6f7420656e61626c6500000000000000000000000000600082015250565b6000613573601383612cdd565b915061357e8261353d565b602082019050919050565b600060208201905081810360008301526135a281613566565b9050919050565b60006040820190506135be6000830185612a4c565b6135cb60208301846129e2565b9392505050565b6000815190506135e1816128c9565b92915050565b6000602082840312156135fd576135fc6127c8565b5b600061360b848285016135d2565b91505092915050565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b600061364a601583612cdd565b915061365582613614565b602082019050919050565b600060208201905081810360008301526136798161363d565b9050919050565b600060408201905061369560008301856129e2565b6136a260208301846129e2565b9392505050565b7f416c726561647920706175736564000000000000000000000000000000000000600082015250565b60006136df600e83612cdd565b91506136ea826136a9565b602082019050919050565b6000602082019050818103600083015261370e816136d2565b9050919050565b7f496e76616c696420706172616d65746572730000000000000000000000000000600082015250565b600061374b601283612cdd565b915061375682613715565b602082019050919050565b6000602082019050818103600083015261377a8161373e565b9050919050565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b60006137b7601083612cdd565b91506137c282613781565b602082019050919050565b600060208201905081810360008301526137e6816137aa565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b6000613823600f83612cdd565b915061382e826137ed565b602082019050919050565b6000602082019050818103600083015261385281613816565b9050919050565b600069ffffffffffffffffffff82169050919050565b61387881613859565b811461388357600080fd5b50565b6000815190506138958161386f565b92915050565b6000819050919050565b6138ae8161389b565b81146138b957600080fd5b50565b6000815190506138cb816138a5565b92915050565b600080600080600060a086880312156138ed576138ec6127c8565b5b60006138fb88828901613886565b955050602061390c888289016138bc565b945050604061391d88828901613469565b935050606061392e88828901613469565b925050608061393f88828901613886565b9150509295509295909350565b60006139578261389b565b91506139628361389b565b92508282026139708161389b565b91507f800000000000000000000000000000000000000000000000000000000000000084146000841216156139a8576139a7612dc6565b5b82820584148315176139bd576139bc612dc6565b5b5092915050565b7f5a65726f204944206c656e677468000000000000000000000000000000000000600082015250565b60006139fa600e83612cdd565b9150613a05826139c4565b602082019050919050565b60006020820190508181036000830152613a29816139ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f436c61696d206661696c65640000000000000000000000000000000000000000600082015250565b6000613a95600c83612cdd565b9150613aa082613a5f565b602082019050919050565b60006020820190508181036000830152613ac481613a88565b9050919050565b6000613ad6826127d2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b0857613b07612dc6565b5b600182019050919050565b7f5a65726f20707269636500000000000000000000000000000000000000000000600082015250565b6000613b49600a83612cdd565b9150613b5482613b13565b602082019050919050565b60006020820190508181036000830152613b7881613b3c565b9050919050565b7f5a65726f20746f6b656e7320746f2073656c6c00000000000000000000000000600082015250565b6000613bb5601383612cdd565b9150613bc082613b7f565b602082019050919050565b60006020820190508181036000830152613be481613ba8565b9050919050565b7f546869732070726573616c6520697320616c726561647920496e616374697665600082015250565b6000613c21602083612cdd565b9150613c2c82613beb565b602082019050919050565b60006020820190508181036000830152613c5081613c14565b9050919050565b7f4e6f742070617573656400000000000000000000000000000000000000000000600082015250565b6000613c8d600a83612cdd565b9150613c9882613c57565b602082019050919050565b60006020820190508181036000830152613cbc81613c80565b9050919050565b7f50726576696f75732053616c6520697320416374697665000000000000000000600082015250565b6000613cf9601783612cdd565b9150613d0482613cc3565b602082019050919050565b60006020820190508181036000830152613d2881613cec565b9050919050565b6000819050919050565b6000819050919050565b6000613d5e613d59613d5484613d2f565b613d39565b6127d2565b9050919050565b613d6e81613d43565b82525050565b6000606082019050613d8960008301866129e2565b613d966020830185613d65565b613da36040830184613d65565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e07602683612cdd565b9150613e1282613dab565b604082019050919050565b60006020820190508181036000830152613e3681613dfa565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e73602083612cdd565b9150613e7e82613e3d565b602082019050919050565b60006020820190508181036000830152613ea281613e66565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613edf601f83612cdd565b9150613eea82613ea9565b602082019050919050565b60006020820190508181036000830152613f0e81613ed2565b9050919050565b7f4c6f772062616c616e6365000000000000000000000000000000000000000000600082015250565b6000613f4b600b83612cdd565b9150613f5682613f15565b602082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b600081905092915050565b50565b6000613f9c600083613f81565b9150613fa782613f8c565b600082019050919050565b6000613fbd82613f8f565b9150819050919050565b7f455448205061796d656e74206661696c65640000000000000000000000000000600082015250565b6000613ffd601283612cdd565b915061400882613fc7565b602082019050919050565b6000602082019050818103600083015261402c81613ff0565b905091905056fea264697066735822122080f6090882c617f345b085e11514039eed605616c6dd538fa7bc1747b791d30e64736f6c63430008120033
Deployed Bytecode
0x60806040526004361061020e5760003560e01c8063833cde5211610118578063c9c8028e116100a0578063e18e84f91161006f578063e18e84f914610779578063e6ab1434146107a4578063f2fde38b146107ea578063f309fed914610813578063fb4aa0a1146108505761020e565b8063c9c8028e146106d5578063cd1704a8146106fe578063d01608c114610727578063d099850a146107505761020e565b80639051cce9116100e75780639051cce9146105ee5780639560e91b1461062b5780639752f3cb14610656578063a43be57b1461067f578063b04c7346146106965761020e565b8063833cde52146105425780638d79e66d1461056d5780638da5cb5b146105985780638e15f473146105c35761020e565b8063397643631161019b578063680f2e4f1161016a578063680f2e4f1461045f5780636fb4adff14610488578063715018a6146104b1578063718a1962146104c857806379b8d938146105055761020e565b806339764363146103b757806348bf4fcf146103e25780634a6413f71461040d578063582b5723146104365761020e565b80630fbfcf37116101e25780630fbfcf37146102b957806311b5444f146102e25780631ed0c954146103005780632127fe041461033d57806323b221a01461037a5761020e565b8062dde10e1461021357806303fcd9ac1461025057806304c98b2b146102795780630ec809a814610290575b600080fd5b34801561021f57600080fd5b5061023a60048036038101906102359190612808565b61087b565b6040516102479190612850565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906128f5565b61089b565b005b34801561028557600080fd5b5061028e6108fe565b005b34801561029c57600080fd5b506102b760048036038101906102b29190612935565b610956565b005b3480156102c557600080fd5b506102e060048036038101906102db9190612962565b6109a2565b005b6102ea610a2f565b6040516102f79190612850565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612935565b61111a565b6040516103349190612850565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f91906129a2565b61113a565b60405161037191906129f1565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190612808565b611285565b6040516103ae9190612850565b60405180910390f35b3480156103c357600080fd5b506103cc611706565b6040516103d991906129f1565b60405180910390f35b3480156103ee57600080fd5b506103f761170c565b60405161040491906129f1565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612808565b611712565b005b34801561044257600080fd5b5061045d60048036038101906104589190612808565b611835565b005b34801561046b57600080fd5b5061048660048036038101906104819190612a0c565b61186c565b005b34801561049457600080fd5b506104af60048036038101906104aa9190612935565b611919565b005b3480156104bd57600080fd5b506104c66119d4565b005b3480156104d457600080fd5b506104ef60048036038101906104ea91906129a2565b6119e8565b6040516104fc91906129f1565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190612a0c565b611a3a565b60405161053991906129f1565b60405180910390f35b34801561054e57600080fd5b50610557611bb9565b6040516105649190612a5b565b60405180910390f35b34801561057957600080fd5b50610582611bdf565b60405161058f91906129f1565b60405180910390f35b3480156105a457600080fd5b506105ad611be5565b6040516105ba9190612a5b565b60405180910390f35b3480156105cf57600080fd5b506105d8611c0f565b6040516105e591906129f1565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190612adb565b611cc3565b6040516106229190612850565b60405180910390f35b34801561063757600080fd5b50610640611d97565b60405161064d91906129f1565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190612b28565b611d9d565b005b34801561068b57600080fd5b50610694611ef1565b005b3480156106a257600080fd5b506106bd60048036038101906106b89190612a0c565b611fb8565b6040516106cc93929190612ba3565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f79190612808565b611fef565b005b34801561070a57600080fd5b5061072560048036038101906107209190612808565b612001565b005b34801561073357600080fd5b5061074e60048036038101906107499190612808565b612013565b005b34801561075c57600080fd5b5061077760048036038101906107729190612bda565b612135565b005b34801561078557600080fd5b5061078e612386565b60405161079b91906129f1565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190612808565b61238c565b6040516107e19a99989796959493929190612c41565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c9190612935565b6123fa565b005b34801561081f57600080fd5b5061083a600480360381019061083591906129a2565b61247d565b60405161084791906129f1565b60405180910390f35b34801561085c57600080fd5b50610865612509565b6040516108729190612a5b565b60405180910390f35b60076020528060005260406000206000915054906101000a900460ff1681565b6108a361252f565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61090661252f565b4260086000600254815260200190815260200160002060000181905550600160086000600254815260200190815260200160002060080160006101000a81548160ff021916908315150217905550565b61095e61252f565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b816000811180156109b557506002548111155b6109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90612d3a565b60405180910390fd5b6109fc61252f565b816008600085815260200190815260200160002060080160016101000a81548160ff021916908315150217905550505050565b6000600254600081118015610a4657506002548111155b610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c90612d3a565b60405180910390fd5b600254610a94600254346119e8565b60086000838152602001908152602001600020600001544210158015610ae15750600115156008600084815260200190815260200160002060080160009054906101000a900460ff161515145b610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790612da6565b60405180910390fd5b600081118015610b67575060086000838152602001908152602001600020600401546008600084815260200190815260200160002060050154610b639190612df5565b8111155b610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d90612e75565b60405180910390fd5b610bae6125ad565b6000600354600354610bc09190612e95565b600454610bcb611c0f565b34610bd69190612e95565b610be09190612e95565b610bea9190612f06565b9050600860006002548152602001908152602001600020600601548160086000600254815260200190815260200160002060070154610c299190612f37565b1115610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190612fdd565b60405180910390fd5b60076000600254815260200190815260200160002060009054906101000a900460ff1615610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490613049565b60405180910390fd5b6001151560086000600254815260200190815260200160002060080160009054906101000a900460ff16151514610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d30906130b5565b60405180910390fd5b6000610d476002548361247d565b9050600c548160096000610d596125fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600254815260200190815260200160002060010154610db49190612f37565b1115610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90613121565b60405180910390fd5b60001515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610e9357600b54811015610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e899061318d565b60405180910390fd5b5b806008600060025481526020019081526020016000206004016000828254610ebb9190612f37565b92505081905550816008600060025481526020019081526020016000206007016000828254610eea9190612f37565b92505081905550600060096000610eff6125fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002548152602001908152602001600020600101541115610fce578060096000610f636125fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060025481526020019081526020016000206001016000828254610fc29190612f37565b92505081905550611066565b604051806060016040528060008152602001828152602001600081525060096000610ff76125fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060025481526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050505b611092600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612604565b600073ffffffffffffffffffffffffffffffffffffffff166002546110b56125fc565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d368434426040516110fe93929190612ba3565b60405180910390a46001955050506111146126f8565b50505090565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008260008111801561114f57506002548111155b61118e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118590612d3a565b60405180910390fd5b60006008600086815260200190815260200160002060020154846111b29190612e95565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124591906131e6565b600a6112519190613346565b611259611c0f565b6112639190612e95565b600354826112719190612e95565b61127b9190612f06565b9250505092915050565b60008160008111801561129a57506002548111155b6112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090612d3a565b60405180910390fd5b60006112e53385611a3a565b90506000811161132a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611321906133dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290613449565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114169190612a5b565b602060405180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611457919061347e565b811115611499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114909061351d565b60405180910390fd5b600115156008600086815260200190815260200160002060080160019054906101000a900460ff16151514611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90613589565b60405180910390fd5b42600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000018190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060020160008282546115be9190612f37565b925050819055506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016116249291906135a9565b6020604051808303816000875af1158015611643573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166791906135e7565b9050806116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090613660565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167fe49649ad7d04a14b0d2a43dae89f207c0822143ff6f88a6480e88907e4e5c54884426040516116f2929190613680565b60405180910390a360019350505050919050565b60035481565b60045481565b8060008111801561172557506002548111155b611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b90612d3a565b60405180910390fd5b61176c61252f565b6007600083815260200190815260200160002060009054906101000a900460ff16156117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c4906136f5565b60405180910390fd5b60016007600084815260200190815260200160002060006101000a81548160ff021916908315150217905550817f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f4260405161182991906129f1565b60405180910390a25050565b61183d61252f565b611869600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612604565b50565b61187461252f565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016118d19291906135a9565b6020604051808303816000875af11580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191491906135e7565b505050565b61192161252f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198790613761565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119dc61252f565b6119e66000612702565b565b6000806003546003546119fb9190612e95565b600454611a06611c0f565b85611a119190612e95565b611a1b9190612e95565b611a259190612f06565b9050611a31848261247d565b91505092915050565b600081600081118015611a4f57506002548111155b611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8590612d3a565b60405180910390fd5b6000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506000816020015111611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b49906137cd565b60405180910390fd5b600081604001518260200151611b689190612df5565b905060008111611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba490613839565b60405180910390fd5b80935050505092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca391906138d1565b5050509150506402540be40081611cba919061394c565b90508091505090565b6000808383905011611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190613a10565b60405180910390fd5b60005b83839050811015611d8c57611d3a848483818110611d2e57611d2d613a30565b5b90506020020135611285565b611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7090613aab565b60405180910390fd5b8080611d8490613acb565b915050611d0d565b506001905092915050565b600c5481565b84600081118015611db057506002548111155b611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690612d3a565b60405180910390fd5b611df761252f565b60008511611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190613b5f565b60405180910390fd5b60008311611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7490613bcb565b60405180910390fd5b846008600088815260200190815260200160002060020181905550836008600088815260200190815260200160002060030181905550826008600088815260200190815260200160002060050181905550816008600088815260200190815260200160002060060181905550505050505050565b611ef961252f565b600160086000600254815260200190815260200160002060080160006101000a81548160ff0219169083151502179055611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f90613c37565b60405180910390fd5b4260086000600254815260200190815260200160002060010181905550600060086000600254815260200190815260200160002060080160006101000a81548160ff021916908315150217905550565b6009602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b611ff761252f565b80600c8190555050565b61200961252f565b80600b8190555050565b8060008111801561202657506002548111155b612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c90612d3a565b60405180910390fd5b61206d61252f565b6007600083815260200190815260200160002060009054906101000a900460ff166120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c490613ca3565b60405180910390fd5b60006007600084815260200190815260200160002060006101000a81548160ff021916908315150217905550817ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d4260405161212991906129f1565b60405180910390a25050565b61213d61252f565b60008411612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790613b5f565b60405180910390fd5b600082116121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90613bcb565b60405180910390fd5b6000151560086000600254815260200190815260200160002060080160009054906101000a900460ff1615151461222f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222690613d0f565b60405180910390fd5b6002600081548092919061224290613acb565b91905055506040518061014001604052806000815260200160008152602001858152602001848152602001600081526020018381526020018281526020016000815260200160001515815260200160001515815250600860006002548152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff0219169083151502179055506101208201518160080160016101000a81548160ff0219169083151502179055509050506002547f6a00651728a92841411081673eaa4eddbed06d102a590e050c22def40d4dd0b88360008060405161237893929190613d74565b60405180910390a250505050565b60025481565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080160009054906101000a900460ff16908060080160019054906101000a900460ff1690508a565b61240261252f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246890613e1d565b60405180910390fd5b61247a81612702565b50565b60008260008111801561249257506002548111155b6124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890612d3a565b60405180910390fd5b6004546008600086815260200190815260200160002060020154846124f69190612e95565b6125009190612f06565b91505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6125376125fc565b73ffffffffffffffffffffffffffffffffffffffff16612555611be5565b73ffffffffffffffffffffffffffffffffffffffff16146125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a290613e89565b60405180910390fd5b565b6002600054036125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e990613ef5565b60405180910390fd5b6002600081905550565b600033905090565b80471015612647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263e90613f61565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161266d90613fb2565b60006040518083038185875af1925050503d80600081146126aa576040519150601f19603f3d011682016040523d82523d6000602084013e6126af565b606091505b50509050806126f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ea90614013565b60405180910390fd5b505050565b6001600081905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600080fd5b6000819050919050565b6127e5816127d2565b81146127f057600080fd5b50565b600081359050612802816127dc565b92915050565b60006020828403121561281e5761281d6127c8565b5b600061282c848285016127f3565b91505092915050565b60008115159050919050565b61284a81612835565b82525050565b60006020820190506128656000830184612841565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128968261286b565b9050919050565b6128a68161288b565b81146128b157600080fd5b50565b6000813590506128c38161289d565b92915050565b6128d281612835565b81146128dd57600080fd5b50565b6000813590506128ef816128c9565b92915050565b6000806040838503121561290c5761290b6127c8565b5b600061291a858286016128b4565b925050602061292b858286016128e0565b9150509250929050565b60006020828403121561294b5761294a6127c8565b5b6000612959848285016128b4565b91505092915050565b60008060408385031215612979576129786127c8565b5b6000612987858286016127f3565b9250506020612998858286016128e0565b9150509250929050565b600080604083850312156129b9576129b86127c8565b5b60006129c7858286016127f3565b92505060206129d8858286016127f3565b9150509250929050565b6129eb816127d2565b82525050565b6000602082019050612a0660008301846129e2565b92915050565b60008060408385031215612a2357612a226127c8565b5b6000612a31858286016128b4565b9250506020612a42858286016127f3565b9150509250929050565b612a558161288b565b82525050565b6000602082019050612a706000830184612a4c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612a9b57612a9a612a76565b5b8235905067ffffffffffffffff811115612ab857612ab7612a7b565b5b602083019150836020820283011115612ad457612ad3612a80565b5b9250929050565b60008060208385031215612af257612af16127c8565b5b600083013567ffffffffffffffff811115612b1057612b0f6127cd565b5b612b1c85828601612a85565b92509250509250929050565b600080600080600060a08688031215612b4457612b436127c8565b5b6000612b52888289016127f3565b9550506020612b63888289016127f3565b9450506040612b74888289016127f3565b9350506060612b85888289016127f3565b9250506080612b96888289016127f3565b9150509295509295909350565b6000606082019050612bb860008301866129e2565b612bc560208301856129e2565b612bd260408301846129e2565b949350505050565b60008060008060808587031215612bf457612bf36127c8565b5b6000612c02878288016127f3565b9450506020612c13878288016127f3565b9350506040612c24878288016127f3565b9250506060612c35878288016127f3565b91505092959194509250565b600061014082019050612c57600083018d6129e2565b612c64602083018c6129e2565b612c71604083018b6129e2565b612c7e606083018a6129e2565b612c8b60808301896129e2565b612c9860a08301886129e2565b612ca560c08301876129e2565b612cb260e08301866129e2565b612cc0610100830185612841565b612cce610120830184612841565b9b9a5050505050505050505050565b600082825260208201905092915050565b7f496e76616c69642070726573616c652069640000000000000000000000000000600082015250565b6000612d24601283612cdd565b9150612d2f82612cee565b602082019050919050565b60006020820190508181036000830152612d5381612d17565b9050919050565b7f496e76616c69642074696d6520666f7220627579696e67000000000000000000600082015250565b6000612d90601783612cdd565b9150612d9b82612d5a565b602082019050919050565b60006020820190508181036000830152612dbf81612d83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e00826127d2565b9150612e0b836127d2565b9250828203905081811115612e2357612e22612dc6565b5b92915050565b7f496e76616c69642073616c6520616d6f756e7400000000000000000000000000600082015250565b6000612e5f601383612cdd565b9150612e6a82612e29565b602082019050919050565b60006020820190508181036000830152612e8e81612e52565b9050919050565b6000612ea0826127d2565b9150612eab836127d2565b9250828202612eb9816127d2565b91508282048414831517612ed057612ecf612dc6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f11826127d2565b9150612f1c836127d2565b925082612f2c57612f2b612ed7565b5b828204905092915050565b6000612f42826127d2565b9150612f4d836127d2565b9250828201905080821115612f6557612f64612dc6565b5b92915050565b7f416d6f756e742073686f756c64206265206c657373207468616e206c6566744860008201527f6172646361700000000000000000000000000000000000000000000000000000602082015250565b6000612fc7602683612cdd565b9150612fd282612f6b565b604082019050919050565b60006020820190508181036000830152612ff681612fba565b9050919050565b7f50726573616c6520706175736564000000000000000000000000000000000000600082015250565b6000613033600e83612cdd565b915061303e82612ffd565b602082019050919050565b6000602082019050818103600083015261306281613026565b9050919050565b7f50726573616c65206973206e6f74206163746976652079657400000000000000600082015250565b600061309f601983612cdd565b91506130aa82613069565b602082019050919050565b600060208201905081810360008301526130ce81613092565b9050919050565b7f4d61782062757920616d6f756e74207265616368656421000000000000000000600082015250565b600061310b601783612cdd565b9150613116826130d5565b602082019050919050565b6000602082019050818103600083015261313a816130fe565b9050919050565b7f496e73756666696369656e7420616d6f756e7421000000000000000000000000600082015250565b6000613177601483612cdd565b915061318282613141565b602082019050919050565b600060208201905081810360008301526131a68161316a565b9050919050565b600060ff82169050919050565b6131c3816131ad565b81146131ce57600080fd5b50565b6000815190506131e0816131ba565b92915050565b6000602082840312156131fc576131fb6127c8565b5b600061320a848285016131d1565b91505092915050565b60008160011c9050919050565b6000808291508390505b600185111561326a5780860481111561324657613245612dc6565b5b60018516156132555780820291505b808102905061326385613213565b945061322a565b94509492505050565b600082613283576001905061333f565b81613291576000905061333f565b81600181146132a757600281146132b1576132e0565b600191505061333f565b60ff8411156132c3576132c2612dc6565b5b8360020a9150848211156132da576132d9612dc6565b5b5061333f565b5060208310610133831016604e8410600b84101617156133155782820a9050838111156133105761330f612dc6565b5b61333f565b6133228484846001613220565b9250905081840481111561333957613338612dc6565b5b81810290505b9392505050565b6000613351826127d2565b915061335c836131ad565b92506133897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613273565b905092915050565b7f5a65726f20636c61696d20616d6f756e74000000000000000000000000000000600082015250565b60006133c7601183612cdd565b91506133d282613391565b602082019050919050565b600060208201905081810360008301526133f6816133ba565b9050919050565b7f50726573616c6520746f6b656e2061646472657373206e6f7420736574000000600082015250565b6000613433601d83612cdd565b915061343e826133fd565b602082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b600081519050613478816127dc565b92915050565b600060208284031215613494576134936127c8565b5b60006134a284828501613469565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e2074686520636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613507602183612cdd565b9150613512826134ab565b604082019050919050565b60006020820190508181036000830152613536816134fa565b9050919050565b7f436c61696d206973206e6f7420656e61626c6500000000000000000000000000600082015250565b6000613573601383612cdd565b915061357e8261353d565b602082019050919050565b600060208201905081810360008301526135a281613566565b9050919050565b60006040820190506135be6000830185612a4c565b6135cb60208301846129e2565b9392505050565b6000815190506135e1816128c9565b92915050565b6000602082840312156135fd576135fc6127c8565b5b600061360b848285016135d2565b91505092915050565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b600061364a601583612cdd565b915061365582613614565b602082019050919050565b600060208201905081810360008301526136798161363d565b9050919050565b600060408201905061369560008301856129e2565b6136a260208301846129e2565b9392505050565b7f416c726561647920706175736564000000000000000000000000000000000000600082015250565b60006136df600e83612cdd565b91506136ea826136a9565b602082019050919050565b6000602082019050818103600083015261370e816136d2565b9050919050565b7f496e76616c696420706172616d65746572730000000000000000000000000000600082015250565b600061374b601283612cdd565b915061375682613715565b602082019050919050565b6000602082019050818103600083015261377a8161373e565b9050919050565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b60006137b7601083612cdd565b91506137c282613781565b602082019050919050565b600060208201905081810360008301526137e6816137aa565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b6000613823600f83612cdd565b915061382e826137ed565b602082019050919050565b6000602082019050818103600083015261385281613816565b9050919050565b600069ffffffffffffffffffff82169050919050565b61387881613859565b811461388357600080fd5b50565b6000815190506138958161386f565b92915050565b6000819050919050565b6138ae8161389b565b81146138b957600080fd5b50565b6000815190506138cb816138a5565b92915050565b600080600080600060a086880312156138ed576138ec6127c8565b5b60006138fb88828901613886565b955050602061390c888289016138bc565b945050604061391d88828901613469565b935050606061392e88828901613469565b925050608061393f88828901613886565b9150509295509295909350565b60006139578261389b565b91506139628361389b565b92508282026139708161389b565b91507f800000000000000000000000000000000000000000000000000000000000000084146000841216156139a8576139a7612dc6565b5b82820584148315176139bd576139bc612dc6565b5b5092915050565b7f5a65726f204944206c656e677468000000000000000000000000000000000000600082015250565b60006139fa600e83612cdd565b9150613a05826139c4565b602082019050919050565b60006020820190508181036000830152613a29816139ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f436c61696d206661696c65640000000000000000000000000000000000000000600082015250565b6000613a95600c83612cdd565b9150613aa082613a5f565b602082019050919050565b60006020820190508181036000830152613ac481613a88565b9050919050565b6000613ad6826127d2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b0857613b07612dc6565b5b600182019050919050565b7f5a65726f20707269636500000000000000000000000000000000000000000000600082015250565b6000613b49600a83612cdd565b9150613b5482613b13565b602082019050919050565b60006020820190508181036000830152613b7881613b3c565b9050919050565b7f5a65726f20746f6b656e7320746f2073656c6c00000000000000000000000000600082015250565b6000613bb5601383612cdd565b9150613bc082613b7f565b602082019050919050565b60006020820190508181036000830152613be481613ba8565b9050919050565b7f546869732070726573616c6520697320616c726561647920496e616374697665600082015250565b6000613c21602083612cdd565b9150613c2c82613beb565b602082019050919050565b60006020820190508181036000830152613c5081613c14565b9050919050565b7f4e6f742070617573656400000000000000000000000000000000000000000000600082015250565b6000613c8d600a83612cdd565b9150613c9882613c57565b602082019050919050565b60006020820190508181036000830152613cbc81613c80565b9050919050565b7f50726576696f75732053616c6520697320416374697665000000000000000000600082015250565b6000613cf9601783612cdd565b9150613d0482613cc3565b602082019050919050565b60006020820190508181036000830152613d2881613cec565b9050919050565b6000819050919050565b6000819050919050565b6000613d5e613d59613d5484613d2f565b613d39565b6127d2565b9050919050565b613d6e81613d43565b82525050565b6000606082019050613d8960008301866129e2565b613d966020830185613d65565b613da36040830184613d65565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e07602683612cdd565b9150613e1282613dab565b604082019050919050565b60006020820190508181036000830152613e3681613dfa565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e73602083612cdd565b9150613e7e82613e3d565b602082019050919050565b60006020820190508181036000830152613ea281613e66565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613edf601f83612cdd565b9150613eea82613ea9565b602082019050919050565b60006020820190508181036000830152613f0e81613ed2565b9050919050565b7f4c6f772062616c616e6365000000000000000000000000000000000000000000600082015250565b6000613f4b600b83612cdd565b9150613f5682613f15565b602082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b600081905092915050565b50565b6000613f9c600083613f81565b9150613fa782613f8c565b600082019050919050565b6000613fbd82613f8f565b9150819050919050565b7f455448205061796d656e74206661696c65640000000000000000000000000000600082015250565b6000613ffd601283612cdd565b915061400882613fc7565b602082019050919050565b6000602082019050818103600083015261402c81613ff0565b905091905056fea264697066735822122080f6090882c617f345b085e11514039eed605616c6dd538fa7bc1747b791d30e64736f6c63430008120033
Deployed Bytecode Sourcemap
19344:12634:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20090:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26201:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22973:149;;;;;;;;;;;;;:::i;:::-;;21762:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23442:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26430:1707;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20261:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28297:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30383:932;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19430:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19466:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24809:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31850:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31703:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24543:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5450:103;;;;;;;;;;;;;:::i;:::-;;28777:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29870:414;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20425:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20319:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4802:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25452:206;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31424:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20369:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23903:512;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23130:271;;;;;;;;;;;;;:::i;:::-;;20184:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21982:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21867;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25123:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22272:693;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19399:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20135:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;5708:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29217:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19503:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20090:38;;;;;;;;;;;;;;;;;;;;;;:::o;26201:158::-;4688:13;:11;:13::i;:::-;26344:7:::1;26317:17;:24;26335:5;26317:24;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;26201:158:::0;;:::o;22973:149::-;4688:13;:11;:13::i;:::-;23056:15:::1;23025:7;:18;23033:9;;23025:18;;;;;;;;;;;:28;;:46;;;;23110:4;23082:7;:18;23090:9;;23082:18;;;;;;;;;;;:25;;;:32;;;;;;;;;;;;;;;;;;22973:149::o:0;21762:97::-;4688:13;:11;:13::i;:::-;21845:6:::1;21833:9;;:18;;;;;;;;;;;;;;;;;;21762:97:::0;:::o;23442:172::-;23530:3;25728:1;25722:3;:7;:27;;;;;25740:9;;25733:3;:16;;25722:27;25714:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;4688:13:::1;:11;:13::i;:::-;23599:7:::2;23570;:12;23578:3;23570:12;;;;;;;;;;;:26;;;:36;;;;;;;;;;;;;;;;;;23442:172:::0;;;:::o;26430:1707::-;26632:4;26511:9;;25728:1;25722:3;:7;:27;;;;;25740:9;;25733:3;:16;;25722:27;25714:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26546:9:::1;;26557:33;26569:9;;26580;26557:11;:33::i;:::-;25905:7;:12;25913:3;25905:12;;;;;;;;;;;:22;;;25886:15;:41;;:89;;;;;25971:4;25948:27;;:7;:12;25956:3;25948:12;;;;;;;;;;;:19;;;;;;;;;;;;:27;;;25886:89;25864:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;26068:1;26059:6;:10;:67;;;;;26109:7;:12;26117:3;26109:12;;;;;;;;;;;:17;;;26083:7;:12;26091:3;26083:12;;;;;;;;;;;:25;;;:43;;;;:::i;:::-;26073:6;:53;;26059:67;26037:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;2261:21:::2;:19;:21::i;:::-;26654:17:::3;26743:14;;26726;;:31;;;;:::i;:::-;26706:15;;26687:16;:14;:16::i;:::-;26675:9;:28;;;;:::i;:::-;:46;;;;:::i;:::-;26674:84;;;;:::i;:::-;26654:104;;26824:7;:18;26832:9;;26824:18;;;;;;;;;;;:30;;;26811:9;26777:7;:18;26785:9;;26777:18;;;;;;;;;;;:31;;;:43;;;;:::i;:::-;:77;;26769:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;26928:6;:17;26935:9;;26928:17;;;;;;;;;;;;;;;;;;;;;26927:18;26919:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;27012:4;26983:33;;:7;:18;26991:9;;26983:18;;;;;;;;;;;:25;;;;;;;;;;;;:33;;;26975:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27059:14;27076:34;27089:9;;27100;27076:12;:34::i;:::-;27059:51;;27194:13;;27183:6;27130:13;:27;27144:12;:10;:12::i;:::-;27130:27;;;;;;;;;;;;;;;:38;27158:9;;27130:38;;;;;;;;;;;:50;;;:59;;;;:::i;:::-;27129:78;;27121:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;27283:5;27250:38;;:17;:29;27268:10;27250:29;;;;;;;;;;;;;;;;;;;;;;;;;:38;;::::0;27246:127:::3;;27323:13;;27313:6;:23;;27305:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27246:127;27410:6;27383:7;:18;27391:9;;27383:18;;;;;;;;;;;:23;;;:33;;;;;;;:::i;:::-;;;;;;;;27462:9;27427:7;:18;27435:9;;27427:18;;;;;;;;;;;:31;;;:44;;;;;;;:::i;:::-;;;;;;;;27540:1;27487:13;:27;27501:12;:10;:12::i;:::-;27487:27;;;;;;;;;;;;;;;:38;27515:9;;27487:38;;;;;;;;;;;:50;;;:54;27483:377;;;27612:6;27558:13;:27;27572:12;:10;:12::i;:::-;27558:27;;;;;;;;;;;;;;;:38;27586:9;;27558:38;;;;;;;;;;;:50;;;:60;;;;;;;:::i;:::-;;;;;;;;27483:377;;;27692:156;;;;;;;;27720:1;27692:156;;;;27759:6;27692:156;;;;27814:1;27692:156;;::::0;27651:13:::3;:27;27665:12;:10;:12::i;:::-;27651:27;;;;;;;;;;;;;;;:38;27679:9;;27651:38;;;;;;;;;;;:197;;;;;;;;;;;;;;;;;;;;;;;;;;;27483:377;27872:43;27890:12;;;;;;;;;;;27905:9;27872;:43::i;:::-;28019:1;27933:174;;27987:9;;27960:12;:10;:12::i;:::-;27933:174;;;28036:6;28057:9;28081:15;27933:174;;;;;;;;:::i;:::-;;;;;;;;28125:4;28118:11;;;;2305:20:::2;:18;:20::i;:::-;25783:1:::1;;26430:1707:::0;;:::o;20261:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;28297:335::-;28427:17;28404:3;25728:1;25722:3;:7;:27;;;;;25740:9;;25733:3;:16;;25722:27;25714:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28462:16:::1;28491:7;:12;28499:3;28491:12;;;;;;;;;;;:18;;;28482:6;:27;;;;:::i;:::-;28462:48;;28602:9;;;;;;;;;;;28587:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28583:2;:40;;;;:::i;:::-;28564:16;:14;:16::i;:::-;:59;;;;:::i;:::-;28545:14;;28534:8;:25;;;;:::i;:::-;28533:91;;;;:::i;:::-;28521:103;;28451:181;28297:335:::0;;;;;:::o;30383:932::-;30480:4;30457:3;25728:1;25722:3;:7;:27;;;;;25740:9;;25733:3;:16;;25722:27;25714:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30502:14:::1;30519:32;30535:10;30547:3;30519:15;:32::i;:::-;30502:49;;30589:1;30580:6;:10;30572:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;30666:1;30645:23;;:9;;;;;;;;;;;:23;;::::0;30623:102:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30775:9;;;;;;;;;;;30768:27;;;30804:4;30768:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30758:6;:52;;30736:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;30923:4;30893:34;;:7;:12;30901:3;30893:12;;;;;;;;;;;:26;;;;;;;;;;;;:34;;;30884:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31006:15;30965:13;:25;30979:10;30965:25;;;;;;;;;;;;;;;:30;30991:3;30965:30;;;;;;;;;;;:38;;:56;;;;31082:6;31034:13;:25;31048:10;31034:25;;;;;;;;;;;;;;;:30;31060:3;31034:30;;;;;;;;;;;:44;;;:54;;;;;;;:::i;:::-;;;;;;;;31101:11;31122:9;;;;;;;;;;;31115:26;;;31142:10;31154:6;31115:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31101:60;;31180:6;31172:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;31254:3;31242:10;31228:55;;;31259:6;31267:15;31228:55;;;;;;;:::i;:::-;;;;;;;;31303:4;31296:11;;;;30383:932:::0;;;;:::o;19430:29::-;;;;:::o;19466:30::-;;;;:::o;24809:212::-;24868:3;25728:1;25722:3;:7;:27;;;;;25740:9;;25733:3;:16;;25722:27;25714:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;4688:13:::1;:11;:13::i;:::-;24903:6:::2;:11;24910:3;24903:11;;;;;;;;;;;;;;;;;;;;;24902:12;24894:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;24958:4;24944:6;:11;24951:3;24944:11;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;24992:3;24978:35;24997:15;24978:35;;;;;;:::i;:::-;;;;;;;;24809:212:::0;;:::o;31850:125::-;4688:13;:11;:13::i;:::-;31927:40:::1;31945:12;;;;;;;;;;;31960:6;31927:9;:40::i;:::-;31850:125:::0;:::o;31703:139::-;4688:13;:11;:13::i;:::-;31796:6:::1;31789:23;;;31813:12;;;;;;;;;;;31827:6;31789:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31703:139:::0;;:::o;24543:166::-;4688:13;:11;:13::i;:::-;24643:1:::1;24624:21;;:7;:21;;::::0;24616:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24694:7;24679:12;;:22;;;;;;;;;;;;;;;;;;24543:166:::0;:::o;5450:103::-;4688:13;:11;:13::i;:::-;5515:30:::1;5542:1;5515:18;:30::i;:::-;5450:103::o:0;28777:287::-;28875:15;28908:17;28992:14;;28975;;:31;;;;:::i;:::-;28956:15;;28937:16;:14;:16::i;:::-;28928:6;:25;;;;:::i;:::-;:43;;;;:::i;:::-;:79;;;;:::i;:::-;28908:99;;29028:28;29041:3;29046:9;29028:12;:28::i;:::-;29018:38;;28897:167;28777:287;;;;:::o;29870:414::-;29999:7;29976:3;25728:1;25722:3;:7;:27;;;;;25740:9;;25733:3;:16;;25722:27;25714:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30024:22:::1;30049:13;:19;30063:4;30049:19;;;;;;;;;;;;;;;:24;30069:3;30049:24;;;;;;;;;;;30024:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;30114:1;30094:5;:17;;;:21;30086:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;30147:14;30184:5;:19;;;30164:5;:17;;;:39;;;;:::i;:::-;30147:56;;30231:1;30222:6;:10;30214:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;30270:6;30263:13;;;;29870:414:::0;;;;;:::o;20425:24::-;;;;;;;;;;;;;:::o;20319:43::-;;;;:::o;4802:87::-;4848:7;4875:6;;;;;;;;;;;4868:13;;4802:87;:::o;25452:206::-;25499:7;25522:12;25544:19;;;;;;;;;;;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25519:62;;;;;;25610:6;25601:5;:16;;;;:::i;:::-;25592:26;;25644:5;25629:21;;;25452:206;:::o;31424:271::-;31489:4;31527:1;31514:3;;:10;;:14;31506:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;31563:9;31558:108;31578:3;;:10;;31574:1;:14;31558:108;;;31618:19;31630:3;;31634:1;31630:6;;;;;;;:::i;:::-;;;;;;;;31618:11;:19::i;:::-;31610:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;31590:3;;;;;:::i;:::-;;;;31558:108;;;;31683:4;31676:11;;31424:271;;;;:::o;20369:49::-;;;;:::o;23903:512::-;24097:3;25728:1;25722:3;:7;:27;;;;;25740:9;;25733:3;:16;;25722:27;25714:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;4688:13:::1;:11;:13::i;:::-;24140:1:::2;24131:6;:10;24123:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;24191:1;24175:13;:17;24167:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24248:6;24227:7;:12;24235:3;24227:12;;;;;;;;;;;:18;;:27;;;;24295:15;24265:7;:12;24273:3;24265:12;;;;;;;;;;;:27;;:45;;;;24349:13;24321:7;:12;24329:3;24321:12;;;;;;;;;;;:25;;:41;;;;24399:8;24373:7;:12;24381:3;24373:12;;;;;;;;;;;:24;;:34;;;;23903:512:::0;;;;;;:::o;23130:271::-;4688:13;:11;:13::i;:::-;23230:4:::1;23202:7;:18;23210:9;;23202:18;;;;;;;;;;;:25;;;:32;;;;;;;;;;;;;;;;;23180:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;23334:15;23305:7;:18;23313:9;;23305:18;;;;;;;;;;;:26;;:44;;;;23388:5;23360:7;:18;23368:9;;23360:18;;;;;;;;;;;:25;;;:33;;;;;;;;;;;;;;;;;;23130:271::o:0;20184:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21982:103::-;4688:13;:11;:13::i;:::-;22070:7:::1;22054:13;:23;;;;21982:103:::0;:::o;21867:::-;4688:13;:11;:13::i;:::-;21955:7:::1;21939:13;:23;;;;21867:103:::0;:::o;25123:244::-;25202:3;25728:1;25722:3;:7;:27;;;;;25740:9;;25733:3;:16;;25722:27;25714:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;4688:13:::1;:11;:13::i;:::-;25250:6:::2;:11;25257:3;25250:11;;;;;;;;;;;;;;;;;;;;;25242:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;25301:5;25287:6;:11;25294:3;25287:11;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;25338:3;25322:37;25343:15;25322:37;;;;;;:::i;:::-;;;;;;;;25123:244:::0;;:::o;22272:693::-;4688:13;:11;:13::i;:::-;22450:1:::1;22441:6;:10;22433:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;22501:1;22485:13;:17;22477:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;22574:5;22545:34;;:7;:18;22553:9;;22545:18;;;;;;;;;;;:25;;;;;;;;;;;;:34;;;22537:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22620:9;;:11;;;;;;;;;:::i;:::-;;;;;;22665:228;;;;;;;;22687:1;22665:228;;;;22703:1;22665:228;;;;22719:6;22665:228;;;;22740:15;22665:228;;;;22770:1;22665:228;;;;22786:13;22665:228;;;;22814:12;22665:228;;;;22841:1;22665:228;;;;22857:5;22665:228;;;;;;22877:5;22665:228;;;;::::0;22644:7:::1;:18;22652:9;;22644:18;;;;;;;;;;;:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22926:9;;22911:46;22937:13;22952:1;22955::::0;22911:46:::1;;;;;;;;:::i;:::-;;;;;;;;22272:693:::0;;;;:::o;19399:24::-;;;;:::o;20135:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5708:201::-;4688:13;:11;:13::i;:::-;5817:1:::1;5797:22;;:8;:22;;::::0;5789:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5873:28;5892:8;5873:18;:28::i;:::-;5708:201:::0;:::o;29217:226::-;29345:15;29322:3;25728:1;25722:3;:7;:27;;;;;25740:9;;25733:3;:16;;25722:27;25714:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29420:15:::1;;29398:7;:12;29406:3;29398:12;;;;;;;;;;;:18;;;29389:6;:27;;;;:::i;:::-;29388:47;;;;:::i;:::-;29378:57;;29217:226:::0;;;;;:::o;19503:27::-;;;;;;;;;;;;;:::o;4967:132::-;5042:12;:10;:12::i;:::-;5031:23;;:7;:5;:7::i;:::-;:23;;;5023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4967:132::o;2341:293::-;1743:1;2475:7;;:19;2467:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1743:1;2608:7;:18;;;;2341:293::o;3456:98::-;3509:7;3536:10;3529:17;;3456:98;:::o;29451:257::-;29566:6;29541:21;:31;;29533:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29600:12;29618:9;:14;;29640:6;29618:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29599:52;;;29670:7;29662:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;29522:186;29451:257;;:::o;2642:213::-;1699:1;2825:7;:22;;;;2642:213::o;6069:191::-;6143:16;6162:6;;;;;;;;;;;6143:25;;6188:8;6179:6;;:17;;;;;;;;;;;;;;;;;;6243:8;6212:40;;6233:8;6212:40;;;;;;;;;;;;6132:128;6069:191;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:90::-;1059:7;1102:5;1095:13;1088:21;1077:32;;1025:90;;;:::o;1121:109::-;1202:21;1217:5;1202:21;:::i;:::-;1197:3;1190:34;1121:109;;:::o;1236:210::-;1323:4;1361:2;1350:9;1346:18;1338:26;;1374:65;1436:1;1425:9;1421:17;1412:6;1374:65;:::i;:::-;1236:210;;;;:::o;1452:126::-;1489:7;1529:42;1522:5;1518:54;1507:65;;1452:126;;;:::o;1584:96::-;1621:7;1650:24;1668:5;1650:24;:::i;:::-;1639:35;;1584:96;;;:::o;1686:122::-;1759:24;1777:5;1759:24;:::i;:::-;1752:5;1749:35;1739:63;;1798:1;1795;1788:12;1739:63;1686:122;:::o;1814:139::-;1860:5;1898:6;1885:20;1876:29;;1914:33;1941:5;1914:33;:::i;:::-;1814:139;;;;:::o;1959:116::-;2029:21;2044:5;2029:21;:::i;:::-;2022:5;2019:32;2009:60;;2065:1;2062;2055:12;2009:60;1959:116;:::o;2081:133::-;2124:5;2162:6;2149:20;2140:29;;2178:30;2202:5;2178:30;:::i;:::-;2081:133;;;;:::o;2220:468::-;2285:6;2293;2342:2;2330:9;2321:7;2317:23;2313:32;2310:119;;;2348:79;;:::i;:::-;2310:119;2468:1;2493:53;2538:7;2529:6;2518:9;2514:22;2493:53;:::i;:::-;2483:63;;2439:117;2595:2;2621:50;2663:7;2654:6;2643:9;2639:22;2621:50;:::i;:::-;2611:60;;2566:115;2220:468;;;;;:::o;2694:329::-;2753:6;2802:2;2790:9;2781:7;2777:23;2773:32;2770:119;;;2808:79;;:::i;:::-;2770:119;2928:1;2953:53;2998:7;2989:6;2978:9;2974:22;2953:53;:::i;:::-;2943:63;;2899:117;2694:329;;;;:::o;3029:468::-;3094:6;3102;3151:2;3139:9;3130:7;3126:23;3122:32;3119:119;;;3157:79;;:::i;:::-;3119:119;3277:1;3302:53;3347:7;3338:6;3327:9;3323:22;3302:53;:::i;:::-;3292:63;;3248:117;3404:2;3430:50;3472:7;3463:6;3452:9;3448:22;3430:50;:::i;:::-;3420:60;;3375:115;3029:468;;;;;:::o;3503:474::-;3571:6;3579;3628:2;3616:9;3607:7;3603:23;3599:32;3596:119;;;3634:79;;:::i;:::-;3596:119;3754:1;3779:53;3824:7;3815:6;3804:9;3800:22;3779:53;:::i;:::-;3769:63;;3725:117;3881:2;3907:53;3952:7;3943:6;3932:9;3928:22;3907:53;:::i;:::-;3897:63;;3852:118;3503:474;;;;;:::o;3983:118::-;4070:24;4088:5;4070:24;:::i;:::-;4065:3;4058:37;3983:118;;:::o;4107:222::-;4200:4;4238:2;4227:9;4223:18;4215:26;;4251:71;4319:1;4308:9;4304:17;4295:6;4251:71;:::i;:::-;4107:222;;;;:::o;4335:474::-;4403:6;4411;4460:2;4448:9;4439:7;4435:23;4431:32;4428:119;;;4466:79;;:::i;:::-;4428:119;4586:1;4611:53;4656:7;4647:6;4636:9;4632:22;4611:53;:::i;:::-;4601:63;;4557:117;4713:2;4739:53;4784:7;4775:6;4764:9;4760:22;4739:53;:::i;:::-;4729:63;;4684:118;4335:474;;;;;:::o;4815:118::-;4902:24;4920:5;4902:24;:::i;:::-;4897:3;4890:37;4815:118;;:::o;4939:222::-;5032:4;5070:2;5059:9;5055:18;5047:26;;5083:71;5151:1;5140:9;5136:17;5127:6;5083:71;:::i;:::-;4939:222;;;;:::o;5167:117::-;5276:1;5273;5266:12;5290:117;5399:1;5396;5389:12;5413:117;5522:1;5519;5512:12;5553:568;5626:8;5636:6;5686:3;5679:4;5671:6;5667:17;5663:27;5653:122;;5694:79;;:::i;:::-;5653:122;5807:6;5794:20;5784:30;;5837:18;5829:6;5826:30;5823:117;;;5859:79;;:::i;:::-;5823:117;5973:4;5965:6;5961:17;5949:29;;6027:3;6019:4;6011:6;6007:17;5997:8;5993:32;5990:41;5987:128;;;6034:79;;:::i;:::-;5987:128;5553:568;;;;;:::o;6127:559::-;6213:6;6221;6270:2;6258:9;6249:7;6245:23;6241:32;6238:119;;;6276:79;;:::i;:::-;6238:119;6424:1;6413:9;6409:17;6396:31;6454:18;6446:6;6443:30;6440:117;;;6476:79;;:::i;:::-;6440:117;6589:80;6661:7;6652:6;6641:9;6637:22;6589:80;:::i;:::-;6571:98;;;;6367:312;6127:559;;;;;:::o;6692:911::-;6787:6;6795;6803;6811;6819;6868:3;6856:9;6847:7;6843:23;6839:33;6836:120;;;6875:79;;:::i;:::-;6836:120;6995:1;7020:53;7065:7;7056:6;7045:9;7041:22;7020:53;:::i;:::-;7010:63;;6966:117;7122:2;7148:53;7193:7;7184:6;7173:9;7169:22;7148:53;:::i;:::-;7138:63;;7093:118;7250:2;7276:53;7321:7;7312:6;7301:9;7297:22;7276:53;:::i;:::-;7266:63;;7221:118;7378:2;7404:53;7449:7;7440:6;7429:9;7425:22;7404:53;:::i;:::-;7394:63;;7349:118;7506:3;7533:53;7578:7;7569:6;7558:9;7554:22;7533:53;:::i;:::-;7523:63;;7477:119;6692:911;;;;;;;;:::o;7609:442::-;7758:4;7796:2;7785:9;7781:18;7773:26;;7809:71;7877:1;7866:9;7862:17;7853:6;7809:71;:::i;:::-;7890:72;7958:2;7947:9;7943:18;7934:6;7890:72;:::i;:::-;7972;8040:2;8029:9;8025:18;8016:6;7972:72;:::i;:::-;7609:442;;;;;;:::o;8057:765::-;8143:6;8151;8159;8167;8216:3;8204:9;8195:7;8191:23;8187:33;8184:120;;;8223:79;;:::i;:::-;8184:120;8343:1;8368:53;8413:7;8404:6;8393:9;8389:22;8368:53;:::i;:::-;8358:63;;8314:117;8470:2;8496:53;8541:7;8532:6;8521:9;8517:22;8496:53;:::i;:::-;8486:63;;8441:118;8598:2;8624:53;8669:7;8660:6;8649:9;8645:22;8624:53;:::i;:::-;8614:63;;8569:118;8726:2;8752:53;8797:7;8788:6;8777:9;8773:22;8752:53;:::i;:::-;8742:63;;8697:118;8057:765;;;;;;;:::o;8828:1195::-;9161:4;9199:3;9188:9;9184:19;9176:27;;9213:71;9281:1;9270:9;9266:17;9257:6;9213:71;:::i;:::-;9294:72;9362:2;9351:9;9347:18;9338:6;9294:72;:::i;:::-;9376;9444:2;9433:9;9429:18;9420:6;9376:72;:::i;:::-;9458;9526:2;9515:9;9511:18;9502:6;9458:72;:::i;:::-;9540:73;9608:3;9597:9;9593:19;9584:6;9540:73;:::i;:::-;9623;9691:3;9680:9;9676:19;9667:6;9623:73;:::i;:::-;9706;9774:3;9763:9;9759:19;9750:6;9706:73;:::i;:::-;9789;9857:3;9846:9;9842:19;9833:6;9789:73;:::i;:::-;9872:67;9934:3;9923:9;9919:19;9910:6;9872:67;:::i;:::-;9949;10011:3;10000:9;9996:19;9987:6;9949:67;:::i;:::-;8828:1195;;;;;;;;;;;;;:::o;10029:169::-;10113:11;10147:6;10142:3;10135:19;10187:4;10182:3;10178:14;10163:29;;10029:169;;;;:::o;10204:168::-;10344:20;10340:1;10332:6;10328:14;10321:44;10204:168;:::o;10378:366::-;10520:3;10541:67;10605:2;10600:3;10541:67;:::i;:::-;10534:74;;10617:93;10706:3;10617:93;:::i;:::-;10735:2;10730:3;10726:12;10719:19;;10378:366;;;:::o;10750:419::-;10916:4;10954:2;10943:9;10939:18;10931:26;;11003:9;10997:4;10993:20;10989:1;10978:9;10974:17;10967:47;11031:131;11157:4;11031:131;:::i;:::-;11023:139;;10750:419;;;:::o;11175:173::-;11315:25;11311:1;11303:6;11299:14;11292:49;11175:173;:::o;11354:366::-;11496:3;11517:67;11581:2;11576:3;11517:67;:::i;:::-;11510:74;;11593:93;11682:3;11593:93;:::i;:::-;11711:2;11706:3;11702:12;11695:19;;11354:366;;;:::o;11726:419::-;11892:4;11930:2;11919:9;11915:18;11907:26;;11979:9;11973:4;11969:20;11965:1;11954:9;11950:17;11943:47;12007:131;12133:4;12007:131;:::i;:::-;11999:139;;11726:419;;;:::o;12151:180::-;12199:77;12196:1;12189:88;12296:4;12293:1;12286:15;12320:4;12317:1;12310:15;12337:194;12377:4;12397:20;12415:1;12397:20;:::i;:::-;12392:25;;12431:20;12449:1;12431:20;:::i;:::-;12426:25;;12475:1;12472;12468:9;12460:17;;12499:1;12493:4;12490:11;12487:37;;;12504:18;;:::i;:::-;12487:37;12337:194;;;;:::o;12537:169::-;12677:21;12673:1;12665:6;12661:14;12654:45;12537:169;:::o;12712:366::-;12854:3;12875:67;12939:2;12934:3;12875:67;:::i;:::-;12868:74;;12951:93;13040:3;12951:93;:::i;:::-;13069:2;13064:3;13060:12;13053:19;;12712:366;;;:::o;13084:419::-;13250:4;13288:2;13277:9;13273:18;13265:26;;13337:9;13331:4;13327:20;13323:1;13312:9;13308:17;13301:47;13365:131;13491:4;13365:131;:::i;:::-;13357:139;;13084:419;;;:::o;13509:410::-;13549:7;13572:20;13590:1;13572:20;:::i;:::-;13567:25;;13606:20;13624:1;13606:20;:::i;:::-;13601:25;;13661:1;13658;13654:9;13683:30;13701:11;13683:30;:::i;:::-;13672:41;;13862:1;13853:7;13849:15;13846:1;13843:22;13823:1;13816:9;13796:83;13773:139;;13892:18;;:::i;:::-;13773:139;13557:362;13509:410;;;;:::o;13925:180::-;13973:77;13970:1;13963:88;14070:4;14067:1;14060:15;14094:4;14091:1;14084:15;14111:185;14151:1;14168:20;14186:1;14168:20;:::i;:::-;14163:25;;14202:20;14220:1;14202:20;:::i;:::-;14197:25;;14241:1;14231:35;;14246:18;;:::i;:::-;14231:35;14288:1;14285;14281:9;14276:14;;14111:185;;;;:::o;14302:191::-;14342:3;14361:20;14379:1;14361:20;:::i;:::-;14356:25;;14395:20;14413:1;14395:20;:::i;:::-;14390:25;;14438:1;14435;14431:9;14424:16;;14459:3;14456:1;14453:10;14450:36;;;14466:18;;:::i;:::-;14450:36;14302:191;;;;:::o;14499:225::-;14639:34;14635:1;14627:6;14623:14;14616:58;14708:8;14703:2;14695:6;14691:15;14684:33;14499:225;:::o;14730:366::-;14872:3;14893:67;14957:2;14952:3;14893:67;:::i;:::-;14886:74;;14969:93;15058:3;14969:93;:::i;:::-;15087:2;15082:3;15078:12;15071:19;;14730:366;;;:::o;15102:419::-;15268:4;15306:2;15295:9;15291:18;15283:26;;15355:9;15349:4;15345:20;15341:1;15330:9;15326:17;15319:47;15383:131;15509:4;15383:131;:::i;:::-;15375:139;;15102:419;;;:::o;15527:164::-;15667:16;15663:1;15655:6;15651:14;15644:40;15527:164;:::o;15697:366::-;15839:3;15860:67;15924:2;15919:3;15860:67;:::i;:::-;15853:74;;15936:93;16025:3;15936:93;:::i;:::-;16054:2;16049:3;16045:12;16038:19;;15697:366;;;:::o;16069:419::-;16235:4;16273:2;16262:9;16258:18;16250:26;;16322:9;16316:4;16312:20;16308:1;16297:9;16293:17;16286:47;16350:131;16476:4;16350:131;:::i;:::-;16342:139;;16069:419;;;:::o;16494:175::-;16634:27;16630:1;16622:6;16618:14;16611:51;16494:175;:::o;16675:366::-;16817:3;16838:67;16902:2;16897:3;16838:67;:::i;:::-;16831:74;;16914:93;17003:3;16914:93;:::i;:::-;17032:2;17027:3;17023:12;17016:19;;16675:366;;;:::o;17047:419::-;17213:4;17251:2;17240:9;17236:18;17228:26;;17300:9;17294:4;17290:20;17286:1;17275:9;17271:17;17264:47;17328:131;17454:4;17328:131;:::i;:::-;17320:139;;17047:419;;;:::o;17472:173::-;17612:25;17608:1;17600:6;17596:14;17589:49;17472:173;:::o;17651:366::-;17793:3;17814:67;17878:2;17873:3;17814:67;:::i;:::-;17807:74;;17890:93;17979:3;17890:93;:::i;:::-;18008:2;18003:3;17999:12;17992:19;;17651:366;;;:::o;18023:419::-;18189:4;18227:2;18216:9;18212:18;18204:26;;18276:9;18270:4;18266:20;18262:1;18251:9;18247:17;18240:47;18304:131;18430:4;18304:131;:::i;:::-;18296:139;;18023:419;;;:::o;18448:170::-;18588:22;18584:1;18576:6;18572:14;18565:46;18448:170;:::o;18624:366::-;18766:3;18787:67;18851:2;18846:3;18787:67;:::i;:::-;18780:74;;18863:93;18952:3;18863:93;:::i;:::-;18981:2;18976:3;18972:12;18965:19;;18624:366;;;:::o;18996:419::-;19162:4;19200:2;19189:9;19185:18;19177:26;;19249:9;19243:4;19239:20;19235:1;19224:9;19220:17;19213:47;19277:131;19403:4;19277:131;:::i;:::-;19269:139;;18996:419;;;:::o;19421:86::-;19456:7;19496:4;19489:5;19485:16;19474:27;;19421:86;;;:::o;19513:118::-;19584:22;19600:5;19584:22;:::i;:::-;19577:5;19574:33;19564:61;;19621:1;19618;19611:12;19564:61;19513:118;:::o;19637:139::-;19692:5;19723:6;19717:13;19708:22;;19739:31;19764:5;19739:31;:::i;:::-;19637:139;;;;:::o;19782:347::-;19850:6;19899:2;19887:9;19878:7;19874:23;19870:32;19867:119;;;19905:79;;:::i;:::-;19867:119;20025:1;20050:62;20104:7;20095:6;20084:9;20080:22;20050:62;:::i;:::-;20040:72;;19996:126;19782:347;;;;:::o;20135:102::-;20177:8;20224:5;20221:1;20217:13;20196:34;;20135:102;;;:::o;20243:848::-;20304:5;20311:4;20335:6;20326:15;;20359:5;20350:14;;20373:712;20394:1;20384:8;20381:15;20373:712;;;20489:4;20484:3;20480:14;20474:4;20471:24;20468:50;;;20498:18;;:::i;:::-;20468:50;20548:1;20538:8;20534:16;20531:451;;;20963:4;20956:5;20952:16;20943:25;;20531:451;21013:4;21007;21003:15;20995:23;;21043:32;21066:8;21043:32;:::i;:::-;21031:44;;20373:712;;;20243:848;;;;;;;:::o;21097:1073::-;21151:5;21342:8;21332:40;;21363:1;21354:10;;21365:5;;21332:40;21391:4;21381:36;;21408:1;21399:10;;21410:5;;21381:36;21477:4;21525:1;21520:27;;;;21561:1;21556:191;;;;21470:277;;21520:27;21538:1;21529:10;;21540:5;;;21556:191;21601:3;21591:8;21588:17;21585:43;;;21608:18;;:::i;:::-;21585:43;21657:8;21654:1;21650:16;21641:25;;21692:3;21685:5;21682:14;21679:40;;;21699:18;;:::i;:::-;21679:40;21732:5;;;21470:277;;21856:2;21846:8;21843:16;21837:3;21831:4;21828:13;21824:36;21806:2;21796:8;21793:16;21788:2;21782:4;21779:12;21775:35;21759:111;21756:246;;;21912:8;21906:4;21902:19;21893:28;;21947:3;21940:5;21937:14;21934:40;;;21954:18;;:::i;:::-;21934:40;21987:5;;21756:246;22027:42;22065:3;22055:8;22049:4;22046:1;22027:42;:::i;:::-;22012:57;;;;22101:4;22096:3;22092:14;22085:5;22082:25;22079:51;;;22110:18;;:::i;:::-;22079:51;22159:4;22152:5;22148:16;22139:25;;21097:1073;;;;;;:::o;22176:281::-;22234:5;22258:23;22276:4;22258:23;:::i;:::-;22250:31;;22302:25;22318:8;22302:25;:::i;:::-;22290:37;;22346:104;22383:66;22373:8;22367:4;22346:104;:::i;:::-;22337:113;;22176:281;;;;:::o;22463:167::-;22603:19;22599:1;22591:6;22587:14;22580:43;22463:167;:::o;22636:366::-;22778:3;22799:67;22863:2;22858:3;22799:67;:::i;:::-;22792:74;;22875:93;22964:3;22875:93;:::i;:::-;22993:2;22988:3;22984:12;22977:19;;22636:366;;;:::o;23008:419::-;23174:4;23212:2;23201:9;23197:18;23189:26;;23261:9;23255:4;23251:20;23247:1;23236:9;23232:17;23225:47;23289:131;23415:4;23289:131;:::i;:::-;23281:139;;23008:419;;;:::o;23433:179::-;23573:31;23569:1;23561:6;23557:14;23550:55;23433:179;:::o;23618:366::-;23760:3;23781:67;23845:2;23840:3;23781:67;:::i;:::-;23774:74;;23857:93;23946:3;23857:93;:::i;:::-;23975:2;23970:3;23966:12;23959:19;;23618:366;;;:::o;23990:419::-;24156:4;24194:2;24183:9;24179:18;24171:26;;24243:9;24237:4;24233:20;24229:1;24218:9;24214:17;24207:47;24271:131;24397:4;24271:131;:::i;:::-;24263:139;;23990:419;;;:::o;24415:143::-;24472:5;24503:6;24497:13;24488:22;;24519:33;24546:5;24519:33;:::i;:::-;24415:143;;;;:::o;24564:351::-;24634:6;24683:2;24671:9;24662:7;24658:23;24654:32;24651:119;;;24689:79;;:::i;:::-;24651:119;24809:1;24834:64;24890:7;24881:6;24870:9;24866:22;24834:64;:::i;:::-;24824:74;;24780:128;24564:351;;;;:::o;24921:220::-;25061:34;25057:1;25049:6;25045:14;25038:58;25130:3;25125:2;25117:6;25113:15;25106:28;24921:220;:::o;25147:366::-;25289:3;25310:67;25374:2;25369:3;25310:67;:::i;:::-;25303:74;;25386:93;25475:3;25386:93;:::i;:::-;25504:2;25499:3;25495:12;25488:19;;25147:366;;;:::o;25519:419::-;25685:4;25723:2;25712:9;25708:18;25700:26;;25772:9;25766:4;25762:20;25758:1;25747:9;25743:17;25736:47;25800:131;25926:4;25800:131;:::i;:::-;25792:139;;25519:419;;;:::o;25944:169::-;26084:21;26080:1;26072:6;26068:14;26061:45;25944:169;:::o;26119:366::-;26261:3;26282:67;26346:2;26341:3;26282:67;:::i;:::-;26275:74;;26358:93;26447:3;26358:93;:::i;:::-;26476:2;26471:3;26467:12;26460:19;;26119:366;;;:::o;26491:419::-;26657:4;26695:2;26684:9;26680:18;26672:26;;26744:9;26738:4;26734:20;26730:1;26719:9;26715:17;26708:47;26772:131;26898:4;26772:131;:::i;:::-;26764:139;;26491:419;;;:::o;26916:332::-;27037:4;27075:2;27064:9;27060:18;27052:26;;27088:71;27156:1;27145:9;27141:17;27132:6;27088:71;:::i;:::-;27169:72;27237:2;27226:9;27222:18;27213:6;27169:72;:::i;:::-;26916:332;;;;;:::o;27254:137::-;27308:5;27339:6;27333:13;27324:22;;27355:30;27379:5;27355:30;:::i;:::-;27254:137;;;;:::o;27397:345::-;27464:6;27513:2;27501:9;27492:7;27488:23;27484:32;27481:119;;;27519:79;;:::i;:::-;27481:119;27639:1;27664:61;27717:7;27708:6;27697:9;27693:22;27664:61;:::i;:::-;27654:71;;27610:125;27397:345;;;;:::o;27748:171::-;27888:23;27884:1;27876:6;27872:14;27865:47;27748:171;:::o;27925:366::-;28067:3;28088:67;28152:2;28147:3;28088:67;:::i;:::-;28081:74;;28164:93;28253:3;28164:93;:::i;:::-;28282:2;28277:3;28273:12;28266:19;;27925:366;;;:::o;28297:419::-;28463:4;28501:2;28490:9;28486:18;28478:26;;28550:9;28544:4;28540:20;28536:1;28525:9;28521:17;28514:47;28578:131;28704:4;28578:131;:::i;:::-;28570:139;;28297:419;;;:::o;28722:332::-;28843:4;28881:2;28870:9;28866:18;28858:26;;28894:71;28962:1;28951:9;28947:17;28938:6;28894:71;:::i;:::-;28975:72;29043:2;29032:9;29028:18;29019:6;28975:72;:::i;:::-;28722:332;;;;;:::o;29060:164::-;29200:16;29196:1;29188:6;29184:14;29177:40;29060:164;:::o;29230:366::-;29372:3;29393:67;29457:2;29452:3;29393:67;:::i;:::-;29386:74;;29469:93;29558:3;29469:93;:::i;:::-;29587:2;29582:3;29578:12;29571:19;;29230:366;;;:::o;29602:419::-;29768:4;29806:2;29795:9;29791:18;29783:26;;29855:9;29849:4;29845:20;29841:1;29830:9;29826:17;29819:47;29883:131;30009:4;29883:131;:::i;:::-;29875:139;;29602:419;;;:::o;30027:168::-;30167:20;30163:1;30155:6;30151:14;30144:44;30027:168;:::o;30201:366::-;30343:3;30364:67;30428:2;30423:3;30364:67;:::i;:::-;30357:74;;30440:93;30529:3;30440:93;:::i;:::-;30558:2;30553:3;30549:12;30542:19;;30201:366;;;:::o;30573:419::-;30739:4;30777:2;30766:9;30762:18;30754:26;;30826:9;30820:4;30816:20;30812:1;30801:9;30797:17;30790:47;30854:131;30980:4;30854:131;:::i;:::-;30846:139;;30573:419;;;:::o;30998:166::-;31138:18;31134:1;31126:6;31122:14;31115:42;30998:166;:::o;31170:366::-;31312:3;31333:67;31397:2;31392:3;31333:67;:::i;:::-;31326:74;;31409:93;31498:3;31409:93;:::i;:::-;31527:2;31522:3;31518:12;31511:19;;31170:366;;;:::o;31542:419::-;31708:4;31746:2;31735:9;31731:18;31723:26;;31795:9;31789:4;31785:20;31781:1;31770:9;31766:17;31759:47;31823:131;31949:4;31823:131;:::i;:::-;31815:139;;31542:419;;;:::o;31967:165::-;32107:17;32103:1;32095:6;32091:14;32084:41;31967:165;:::o;32138:366::-;32280:3;32301:67;32365:2;32360:3;32301:67;:::i;:::-;32294:74;;32377:93;32466:3;32377:93;:::i;:::-;32495:2;32490:3;32486:12;32479:19;;32138:366;;;:::o;32510:419::-;32676:4;32714:2;32703:9;32699:18;32691:26;;32763:9;32757:4;32753:20;32749:1;32738:9;32734:17;32727:47;32791:131;32917:4;32791:131;:::i;:::-;32783:139;;32510:419;;;:::o;32935:105::-;32971:7;33011:22;33004:5;33000:34;32989:45;;32935:105;;;:::o;33046:120::-;33118:23;33135:5;33118:23;:::i;:::-;33111:5;33108:34;33098:62;;33156:1;33153;33146:12;33098:62;33046:120;:::o;33172:141::-;33228:5;33259:6;33253:13;33244:22;;33275:32;33301:5;33275:32;:::i;:::-;33172:141;;;;:::o;33319:76::-;33355:7;33384:5;33373:16;;33319:76;;;:::o;33401:120::-;33473:23;33490:5;33473:23;:::i;:::-;33466:5;33463:34;33453:62;;33511:1;33508;33501:12;33453:62;33401:120;:::o;33527:141::-;33583:5;33614:6;33608:13;33599:22;;33630:32;33656:5;33630:32;:::i;:::-;33527:141;;;;:::o;33674:971::-;33777:6;33785;33793;33801;33809;33858:3;33846:9;33837:7;33833:23;33829:33;33826:120;;;33865:79;;:::i;:::-;33826:120;33985:1;34010:63;34065:7;34056:6;34045:9;34041:22;34010:63;:::i;:::-;34000:73;;33956:127;34122:2;34148:63;34203:7;34194:6;34183:9;34179:22;34148:63;:::i;:::-;34138:73;;34093:128;34260:2;34286:64;34342:7;34333:6;34322:9;34318:22;34286:64;:::i;:::-;34276:74;;34231:129;34399:2;34425:64;34481:7;34472:6;34461:9;34457:22;34425:64;:::i;:::-;34415:74;;34370:129;34538:3;34565:63;34620:7;34611:6;34600:9;34596:22;34565:63;:::i;:::-;34555:73;;34509:129;33674:971;;;;;;;;:::o;34651:556::-;34690:7;34713:19;34730:1;34713:19;:::i;:::-;34708:24;;34746:19;34763:1;34746:19;:::i;:::-;34741:24;;34800:1;34797;34793:9;34822:29;34839:11;34822:29;:::i;:::-;34811:40;;34909:66;34906:1;34903:73;34899:1;34896;34892:9;34888:89;34885:115;;;34980:18;;:::i;:::-;34885:115;35150:1;35141:7;35136:16;35133:1;35130:23;35110:1;35103:9;35083:84;35060:140;;35180:18;;:::i;:::-;35060:140;34698:509;34651:556;;;;:::o;35213:164::-;35353:16;35349:1;35341:6;35337:14;35330:40;35213:164;:::o;35383:366::-;35525:3;35546:67;35610:2;35605:3;35546:67;:::i;:::-;35539:74;;35622:93;35711:3;35622:93;:::i;:::-;35740:2;35735:3;35731:12;35724:19;;35383:366;;;:::o;35755:419::-;35921:4;35959:2;35948:9;35944:18;35936:26;;36008:9;36002:4;35998:20;35994:1;35983:9;35979:17;35972:47;36036:131;36162:4;36036:131;:::i;:::-;36028:139;;35755:419;;;:::o;36180:180::-;36228:77;36225:1;36218:88;36325:4;36322:1;36315:15;36349:4;36346:1;36339:15;36366:162;36506:14;36502:1;36494:6;36490:14;36483:38;36366:162;:::o;36534:366::-;36676:3;36697:67;36761:2;36756:3;36697:67;:::i;:::-;36690:74;;36773:93;36862:3;36773:93;:::i;:::-;36891:2;36886:3;36882:12;36875:19;;36534:366;;;:::o;36906:419::-;37072:4;37110:2;37099:9;37095:18;37087:26;;37159:9;37153:4;37149:20;37145:1;37134:9;37130:17;37123:47;37187:131;37313:4;37187:131;:::i;:::-;37179:139;;36906:419;;;:::o;37331:233::-;37370:3;37393:24;37411:5;37393:24;:::i;:::-;37384:33;;37439:66;37432:5;37429:77;37426:103;;37509:18;;:::i;:::-;37426:103;37556:1;37549:5;37545:13;37538:20;;37331:233;;;:::o;37570:160::-;37710:12;37706:1;37698:6;37694:14;37687:36;37570:160;:::o;37736:366::-;37878:3;37899:67;37963:2;37958:3;37899:67;:::i;:::-;37892:74;;37975:93;38064:3;37975:93;:::i;:::-;38093:2;38088:3;38084:12;38077:19;;37736:366;;;:::o;38108:419::-;38274:4;38312:2;38301:9;38297:18;38289:26;;38361:9;38355:4;38351:20;38347:1;38336:9;38332:17;38325:47;38389:131;38515:4;38389:131;:::i;:::-;38381:139;;38108:419;;;:::o;38533:169::-;38673:21;38669:1;38661:6;38657:14;38650:45;38533:169;:::o;38708:366::-;38850:3;38871:67;38935:2;38930:3;38871:67;:::i;:::-;38864:74;;38947:93;39036:3;38947:93;:::i;:::-;39065:2;39060:3;39056:12;39049:19;;38708:366;;;:::o;39080:419::-;39246:4;39284:2;39273:9;39269:18;39261:26;;39333:9;39327:4;39323:20;39319:1;39308:9;39304:17;39297:47;39361:131;39487:4;39361:131;:::i;:::-;39353:139;;39080:419;;;:::o;39505:182::-;39645:34;39641:1;39633:6;39629:14;39622:58;39505:182;:::o;39693:366::-;39835:3;39856:67;39920:2;39915:3;39856:67;:::i;:::-;39849:74;;39932:93;40021:3;39932:93;:::i;:::-;40050:2;40045:3;40041:12;40034:19;;39693:366;;;:::o;40065:419::-;40231:4;40269:2;40258:9;40254:18;40246:26;;40318:9;40312:4;40308:20;40304:1;40293:9;40289:17;40282:47;40346:131;40472:4;40346:131;:::i;:::-;40338:139;;40065:419;;;:::o;40490:160::-;40630:12;40626:1;40618:6;40614:14;40607:36;40490:160;:::o;40656:366::-;40798:3;40819:67;40883:2;40878:3;40819:67;:::i;:::-;40812:74;;40895:93;40984:3;40895:93;:::i;:::-;41013:2;41008:3;41004:12;40997:19;;40656:366;;;:::o;41028:419::-;41194:4;41232:2;41221:9;41217:18;41209:26;;41281:9;41275:4;41271:20;41267:1;41256:9;41252:17;41245:47;41309:131;41435:4;41309:131;:::i;:::-;41301:139;;41028:419;;;:::o;41453:173::-;41593:25;41589:1;41581:6;41577:14;41570:49;41453:173;:::o;41632:366::-;41774:3;41795:67;41859:2;41854:3;41795:67;:::i;:::-;41788:74;;41871:93;41960:3;41871:93;:::i;:::-;41989:2;41984:3;41980:12;41973:19;;41632:366;;;:::o;42004:419::-;42170:4;42208:2;42197:9;42193:18;42185:26;;42257:9;42251:4;42247:20;42243:1;42232:9;42228:17;42221:47;42285:131;42411:4;42285:131;:::i;:::-;42277:139;;42004:419;;;:::o;42429:85::-;42474:7;42503:5;42492:16;;42429:85;;;:::o;42520:60::-;42548:3;42569:5;42562:12;;42520:60;;;:::o;42586:158::-;42644:9;42677:61;42695:42;42704:32;42730:5;42704:32;:::i;:::-;42695:42;:::i;:::-;42677:61;:::i;:::-;42664:74;;42586:158;;;:::o;42750:147::-;42845:45;42884:5;42845:45;:::i;:::-;42840:3;42833:58;42750:147;;:::o;42903:474::-;43068:4;43106:2;43095:9;43091:18;43083:26;;43119:71;43187:1;43176:9;43172:17;43163:6;43119:71;:::i;:::-;43200:80;43276:2;43265:9;43261:18;43252:6;43200:80;:::i;:::-;43290;43366:2;43355:9;43351:18;43342:6;43290:80;:::i;:::-;42903:474;;;;;;:::o;43383:225::-;43523:34;43519:1;43511:6;43507:14;43500:58;43592:8;43587:2;43579:6;43575:15;43568:33;43383:225;:::o;43614:366::-;43756:3;43777:67;43841:2;43836:3;43777:67;:::i;:::-;43770:74;;43853:93;43942:3;43853:93;:::i;:::-;43971:2;43966:3;43962:12;43955:19;;43614:366;;;:::o;43986:419::-;44152:4;44190:2;44179:9;44175:18;44167:26;;44239:9;44233:4;44229:20;44225:1;44214:9;44210:17;44203:47;44267:131;44393:4;44267:131;:::i;:::-;44259:139;;43986:419;;;:::o;44411:182::-;44551:34;44547:1;44539:6;44535:14;44528:58;44411:182;:::o;44599:366::-;44741:3;44762:67;44826:2;44821:3;44762:67;:::i;:::-;44755:74;;44838:93;44927:3;44838:93;:::i;:::-;44956:2;44951:3;44947:12;44940:19;;44599:366;;;:::o;44971:419::-;45137:4;45175:2;45164:9;45160:18;45152:26;;45224:9;45218:4;45214:20;45210:1;45199:9;45195:17;45188:47;45252:131;45378:4;45252:131;:::i;:::-;45244:139;;44971:419;;;:::o;45396:181::-;45536:33;45532:1;45524:6;45520:14;45513:57;45396:181;:::o;45583:366::-;45725:3;45746:67;45810:2;45805:3;45746:67;:::i;:::-;45739:74;;45822:93;45911:3;45822:93;:::i;:::-;45940:2;45935:3;45931:12;45924:19;;45583:366;;;:::o;45955:419::-;46121:4;46159:2;46148:9;46144:18;46136:26;;46208:9;46202:4;46198:20;46194:1;46183:9;46179:17;46172:47;46236:131;46362:4;46236:131;:::i;:::-;46228:139;;45955:419;;;:::o;46380:161::-;46520:13;46516:1;46508:6;46504:14;46497:37;46380:161;:::o;46547:366::-;46689:3;46710:67;46774:2;46769:3;46710:67;:::i;:::-;46703:74;;46786:93;46875:3;46786:93;:::i;:::-;46904:2;46899:3;46895:12;46888:19;;46547:366;;;:::o;46919:419::-;47085:4;47123:2;47112:9;47108:18;47100:26;;47172:9;47166:4;47162:20;47158:1;47147:9;47143:17;47136:47;47200:131;47326:4;47200:131;:::i;:::-;47192:139;;46919:419;;;:::o;47344:147::-;47445:11;47482:3;47467:18;;47344:147;;;;:::o;47497:114::-;;:::o;47617:398::-;47776:3;47797:83;47878:1;47873:3;47797:83;:::i;:::-;47790:90;;47889:93;47978:3;47889:93;:::i;:::-;48007:1;48002:3;47998:11;47991:18;;47617:398;;;:::o;48021:379::-;48205:3;48227:147;48370:3;48227:147;:::i;:::-;48220:154;;48391:3;48384:10;;48021:379;;;:::o;48406:168::-;48546:20;48542:1;48534:6;48530:14;48523:44;48406:168;:::o;48580:366::-;48722:3;48743:67;48807:2;48802:3;48743:67;:::i;:::-;48736:74;;48819:93;48908:3;48819:93;:::i;:::-;48937:2;48932:3;48928:12;48921:19;;48580:366;;;:::o;48952:419::-;49118:4;49156:2;49145:9;49141:18;49133:26;;49205:9;49199:4;49195:20;49191:1;49180:9;49176:17;49169:47;49233:131;49359:4;49233:131;:::i;:::-;49225:139;;48952:419;;;:::o
Swarm Source
ipfs://80f6090882c617f345b085e11514039eed605616c6dd538fa7bc1747b791d30e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.