Overview
ETH Balance
0.000203513004484688 ETH
ETH Value
$0.67 (@ $3,281.14/ETH)More Info
Private Name Tags
ContractCreator
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5321057 | 206 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
OpenVotes
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 9999999 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.26; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import "./interfaces/IBlast.sol"; import "./interfaces/IERC20.sol"; // Errors error notEOA(); error InsufficientFunds(); error PollDoesNotExist(); error OnlyManagerCanManageOptions(); error OptionHasVotes(); error PollNotActive(); error NotInAllowList(); error InsufficientFundsToVote(); error PollOptionDoesNotExist(); error OnlyOneVoteAllowed(); error PollIsActive(); error PollHasNoBalance(); error NoFeesToClaim(); error InvalidFeesPercentage(); error PollMaxEntriesExceeded(); contract OpenVotes is Ownable { // Events event PollCreated(uint256 pollId, uint256 startDate, uint256 endDate, uint256 voteCost, uint256 maxEntries, bool allowManyVotes, string title, string description, string[] options); event PollOptionsAdded(uint256 pollId, string[] names); event PollOptionDeleted(uint256 pollId, uint256 optionId); event Vote(uint256 pollId, uint256 optionId, address voter); event PollFundsWithdrawn(uint256 pollId, uint256 amount); event ContractUpVote(address contractAddress, address voter); event ContractDownVote(address contractAddress, address voter); event AssetUpVote(address contractAddress, string tokenId, address voter); event AssetDownVote(address contractAddress, string tokenId, address voter); // Contract Owner variables uint256 public pollPrice = 100000000000000; // 0.0001 ETH uint256 public assetVoteCost = 100000000000000; // 0.0001 ETH uint256 public feesBps = 100; // 1% uint256 private pollsLedger; // Poll variables uint256 public pollIdCounter = 1; struct Poll { uint256 id; address manager; uint256 startDate; uint256 endDate; uint256 voteCost; uint256 maxEntries; uint256 balance; bool allowManyVotes; address[] allowList; string title; string description; PollOption[] options; } struct PollOption { uint256 id; bool isSet; string name; address[] votes; } struct Votes { uint256 up; uint256 down; } struct Asset { mapping (string => Votes) tokens; } // Mappings mapping (uint256 => Poll) private polls; mapping (address => Votes) private contracts; mapping (address => Asset) private assets; // BLAST IBlast public constant BLAST = IBlast(0x4300000000000000000000000000000000000002); // BlastPoints Testnet address: 0x2fc95838c71e76ec69ff817983BFf17c710F34E0 // BlastPoints Mainnet address: 0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800 IBlastPoints public constant BLAST_POINTS = IBlastPoints(0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800); YieldMode public yieldMode = YieldMode.AUTOMATIC; GasMode public gasMode = GasMode.CLAIMABLE; constructor(address initialOwner) Ownable(initialOwner) { // ============== // BLAST Points Configuration // ============== BLAST_POINTS.configurePointsOperator(initialOwner); } function name() public pure returns (string memory) { return "OpenVotes"; } // Create a new poll function createPoll(uint256 _startDate, uint256 _endDate, uint256 _voteCost, uint256 _maxEntries, bool _allowManyVotes, string calldata _title, string calldata _description, string[] calldata _options) payable external { // Verify correct amount of ETH sent if (msg.value < pollPrice) { revert InsufficientFunds(); } // Create the poll polls[pollIdCounter].id = pollIdCounter; polls[pollIdCounter].manager = msg.sender; polls[pollIdCounter].startDate = _startDate; polls[pollIdCounter].endDate = _endDate; polls[pollIdCounter].voteCost = _voteCost; polls[pollIdCounter].maxEntries = _maxEntries; polls[pollIdCounter].balance = 0; polls[pollIdCounter].allowManyVotes = _allowManyVotes; polls[pollIdCounter].title = _title; polls[pollIdCounter].description = _description; // Add the options for (uint256 i = 0; i < _options.length; i++) { polls[pollIdCounter].options.push(PollOption({ id: i, isSet: true, name: _options[i], votes: new address[](0) })); } // Emit the poll created event emit PollCreated(pollIdCounter, _startDate, _endDate, _voteCost, _maxEntries, _allowManyVotes, _title, _description, _options); // Increment the poll counter pollIdCounter++; } // Add a new option to a poll function addPollOptions(uint256 _pollId, string[] calldata _names) external { // Verify that the sender is the poll manager if (polls[_pollId].manager != msg.sender) { revert OnlyManagerCanManageOptions(); } // Verify that the poll hasn't started if (block.timestamp >= polls[_pollId].startDate) { revert PollIsActive(); } // Add the new options for (uint256 i = 0; i < _names.length; i++) { polls[_pollId].options.push(PollOption({ id: polls[_pollId].options.length, isSet: true, name: _names[i], votes: new address[](0) })); } // Emit the option added event emit PollOptionsAdded(_pollId, _names); } // Update the allowList of a poll function setPollAllowList(uint256 _pollId, address[] calldata _allowList) external { // Verify that the sender is the poll manager if (polls[_pollId].manager != msg.sender) { revert OnlyManagerCanManageOptions(); } // Verify that the poll hasn't started if (block.timestamp >= polls[_pollId].startDate) { revert PollIsActive(); } // Verify that the poll hasn't started if (block.timestamp >= polls[_pollId].startDate) { revert PollIsActive(); } // Update the allowList delete polls[_pollId].allowList; for (uint256 i = 0; i < _allowList.length; i++) { polls[_pollId].allowList.push(_allowList[i]); } } // Add to the allowList of a poll function addToPollAllowList(uint256 _pollId, address _address) external { // Verify that the sender is the poll manager if (polls[_pollId].manager != msg.sender) { revert OnlyManagerCanManageOptions(); } // Verify that the poll hasn't started if (block.timestamp >= polls[_pollId].startDate) { revert PollIsActive(); } // Add the address to the allowList polls[_pollId].allowList.push(_address); } // Remove from the allowList of a poll function removeFromPollAllowList(uint256 _pollId, address _address) external { // Verify that the sender is the poll manager if (polls[_pollId].manager != msg.sender) { revert OnlyManagerCanManageOptions(); } // Verify that the poll hasn't started if (block.timestamp >= polls[_pollId].startDate) { revert PollIsActive(); } // Remove the address from the allowList for (uint256 i = 0; i < polls[_pollId].allowList.length; i++) { if (polls[_pollId].allowList[i] == _address) { delete polls[_pollId].allowList[i]; } } } // Vote for an option in a poll function vote(uint256 _pollId, uint256 _optionId) payable external { // Verify that the poll exists if (polls[_pollId].manager == address(0)) { revert PollDoesNotExist(); } // Verify that the poll is active if (block.timestamp < polls[_pollId].startDate || block.timestamp > polls[_pollId].endDate) { revert PollNotActive(); } // Verify that the sender sent enough funds if (msg.value != polls[_pollId].voteCost) { revert InsufficientFundsToVote(); } // Verify that the sender is in the allowList if (polls[_pollId].allowList.length > 0) { bool found = false; for (uint256 i = 0; i < polls[_pollId].allowList.length; i++) { if (polls[_pollId].allowList[i] == msg.sender) { found = true; break; } } if (!found) { revert NotInAllowList(); } } // Verify that the option exists if (!polls[_pollId].options[_optionId].isSet) { revert PollOptionDoesNotExist(); } // Check if the sender can vote multiple times if (!polls[_pollId].allowManyVotes) { for (uint256 i = 0; i < polls[_pollId].options.length; i++) { for (uint256 j = 0; j < polls[_pollId].options[i].votes.length; j++) { if (polls[_pollId].options[i].votes[j] == msg.sender) { revert OnlyOneVoteAllowed(); } } } } // Verify that max entries are not exceeded if (polls[_pollId].maxEntries > 0) { if (polls[_pollId].options[_optionId].votes.length >= polls[_pollId].maxEntries) { revert PollMaxEntriesExceeded(); } } // Add the vote polls[_pollId].options[_optionId].votes.push(msg.sender); // Calculate the balance to add to the poll by subtracting the owner fees uint256 feeAmount = polls[_pollId].voteCost * (feesBps) / 10000; uint256 balanceToAdd = polls[_pollId].voteCost - feeAmount; // Add to the poll balance polls[_pollId].balance += balanceToAdd; // Add to the global polls ledger pollsLedger += balanceToAdd; // Emit the vote event emit Vote(_pollId, _optionId, msg.sender); } // Upvote Any contract on the blockchain function upvoteContract(address _contractAddress) payable external { // Verify that the sender sent enough funds if (msg.value != assetVoteCost) { revert InsufficientFundsToVote(); } // Add the vote contracts[_contractAddress].up += 1; // Emit the vote event emit ContractUpVote(_contractAddress, msg.sender); } // Downvote Any contract on the blockchain function downvoteContract(address _contractAddress) payable external { // Verify that the sender sent enough funds if (msg.value != assetVoteCost) { revert InsufficientFundsToVote(); } // Add the vote contracts[_contractAddress].down += 1; // Emit the vote event emit ContractDownVote(_contractAddress, msg.sender); } // Upvote Any asset on the blockchain function upvoteAsset(address _contractAddress, string memory _tokenId) payable external { // Verify that the sender sent enough funds if (msg.value != assetVoteCost) { revert InsufficientFundsToVote(); } // Add the vote assets[_contractAddress].tokens[_tokenId].up += 1; // Emit the vote event emit AssetUpVote(_contractAddress, _tokenId, msg.sender); } // Downvote Any asset on the blockchain function downvoteAsset(address _contractAddress, string memory _tokenId) payable external { // Verify that the sender sent enough funds if (msg.value != assetVoteCost) { revert InsufficientFundsToVote(); } // Add the vote assets[_contractAddress].tokens[_tokenId].down += 1; // Emit the vote event emit AssetDownVote(_contractAddress, _tokenId, msg.sender); } // Withdraw the poll funds function withdrawPollFunds(uint256 _pollId) external { // Verify that the sender is the poll manager if (polls[_pollId].manager != msg.sender) { revert OnlyManagerCanManageOptions(); } // Verify that the poll has ended if (block.timestamp < polls[_pollId].endDate) { revert PollIsActive(); } // Verify that the poll has a balance if (polls[_pollId].balance == 0) { revert PollHasNoBalance(); } // Capture and Reset the poll balance uint256 pollBalance = polls[_pollId].balance; polls[_pollId].balance = 0; // Subtract from the global polls ledger pollsLedger -= pollBalance; // Transfer the funds to the manager payable(msg.sender).transfer(pollBalance); // Emit the funds withdrawn event emit PollFundsWithdrawn(_pollId, pollBalance); } /*********************************** * Getter Functions ***********************************/ // Get the poll details function getPoll(uint256 _pollId) external view returns (Poll memory) { return polls[_pollId]; } // Get manager's active polls function getManagersActivePolls(address _manager) external view returns (Poll[] memory) { Poll[] memory managersPolls = new Poll[](pollIdCounter); uint256 counter = 0; for (uint256 i = 1; i < pollIdCounter; i++) { if (polls[i].manager == _manager && block.timestamp >= polls[i].startDate && block.timestamp <= polls[i].endDate) { managersPolls[counter] = polls[i]; counter++; } } return managersPolls; } // Get manager's ended polls function getManagersEndedPolls(address _manager) external view returns (Poll[] memory) { Poll[] memory managersPolls = new Poll[](pollIdCounter); uint256 counter = 0; for (uint256 i = 1; i < pollIdCounter; i++) { if (polls[i].manager == _manager && block.timestamp > polls[i].endDate) { managersPolls[counter] = polls[i]; counter++; } } return managersPolls; } // Get Contract Votes function getContractVotes(address _contractAddress) external view returns (Votes memory) { return contracts[_contractAddress]; } // Get Asset Votes function getAssetVotes(address _contractAddress, string memory _tokenId) external view returns (Votes memory) { return assets[_contractAddress].tokens[_tokenId]; } /*********************************** * Owner Functions ***********************************/ // Withdraw the fees function withdrawFees() external onlyOwner { // Verify that there are fees to claim if (address(this).balance <= pollsLedger) { revert NoFeesToClaim(); } // Transfer the fees to the owner payable(owner()).transfer(address(this).balance - pollsLedger); } // Set the poll price function setPollPrice(uint256 _pollPrice) external onlyOwner { pollPrice = _pollPrice; } // Set the asset vote cost function setAssetVoteCost(uint256 _assetVoteCost) external onlyOwner { assetVoteCost = _assetVoteCost; } // Set the fees bps function setFees(uint256 _feesBps) external onlyOwner { // Verify that the fees percentage is between 0 and 10% if (_feesBps < 0 || _feesBps > 1000) { revert InvalidFeesPercentage(); } feesBps = _feesBps; } /*********************************** * BLAST ONLY OWNER FUNCTIONS ***********************************/ // Set points operator function setPointsOperator(address _operator) external onlyOwner { BLAST_POINTS.configurePointsOperator(_operator); } // Set points operator on behalf function setPointsOperatorOnBehalf(address _operator, address _contract) external onlyOwner { BLAST_POINTS.configurePointsOperatorOnBehalf(_contract, _operator); } // Claim matured fees function claimMaturedGasFees() external onlyOwner { BLAST.claimMaxGas(address(this), msg.sender); } // Claim gas fees function claimAllGasFees() external onlyOwner { BLAST.claimAllGas(address(this), msg.sender); } // Configure yield function configureYield(YieldMode _yield, GasMode _gasMode) external onlyOwner { yieldMode = _yield; gasMode = _gasMode; BLAST.configure(_yield, _gasMode, msg.sender); } // Set auto yield and gas function setAutoYieldAndGas() external onlyOwner { BLAST.configureAutomaticYield(); BLAST.configureClaimableGas(); } // Configure yield on behalf function configureYieldOnBehalf(address _contract, YieldMode _yield, GasMode _gasMode) external onlyOwner { BLAST.configureContract(_contract, _yield, _gasMode, msg.sender); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.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. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.26; enum YieldMode { AUTOMATIC, VOID, CLAIMABLE } enum GasMode { VOID, CLAIMABLE } interface IBlast{ // configure function configureContract(address contractAddress, YieldMode _yield, GasMode gasMode, address governor) external; function configure(YieldMode _yield, GasMode gasMode, address governor) external; // base configuration options function configureClaimableYield() external; function configureClaimableYieldOnBehalf(address contractAddress) external; function configureAutomaticYield() external; function configureAutomaticYieldOnBehalf(address contractAddress) external; function configureVoidYield() external; function configureVoidYieldOnBehalf(address contractAddress) external; function configureClaimableGas() external; function configureClaimableGasOnBehalf(address contractAddress) external; function configureVoidGas() external; function configureVoidGasOnBehalf(address contractAddress) external; function configureGovernor(address _governor) external; function configureGovernorOnBehalf(address _newGovernor, address contractAddress) external; // claim yield function claimYield(address contractAddress, address recipientOfYield, uint256 amount) external returns (uint256); function claimAllYield(address contractAddress, address recipientOfYield) external returns (uint256); // claim gas function claimAllGas(address contractAddress, address recipientOfGas) external returns (uint256); function claimGasAtMinClaimRate(address contractAddress, address recipientOfGas, uint256 minClaimRateBips) external returns (uint256); function claimMaxGas(address contractAddress, address recipientOfGas) external returns (uint256); function claimGas(address contractAddress, address recipientOfGas, uint256 gasToClaim, uint256 gasSecondsToConsume) external returns (uint256); // read functions function readClaimableYield(address contractAddress) external view returns (uint256); function readYieldConfiguration(address contractAddress) external view returns (uint8); function readGasParams(address contractAddress) external view returns (uint256 etherSeconds, uint256 etherBalance, uint256 lastUpdated, GasMode); } interface IBlastPoints { function configurePointsOperator(address operator) external; function configurePointsOperatorOnBehalf(address contractAddress, address operator) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.26; interface IERC20 { /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
{ "remappings": [ "forge-std/=lib/forge-std/src/", "@openzeppelin/=lib/openzeppelin-contracts/", "@chainlink/=lib/chainlink-brownie-contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "chainlink-brownie-contracts/=lib/chainlink-brownie-contracts/contracts/src/v0.6/vendor/@arbitrum/nitro-contracts/src/", "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 9999999 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InsufficientFunds","type":"error"},{"inputs":[],"name":"InsufficientFundsToVote","type":"error"},{"inputs":[],"name":"InvalidFeesPercentage","type":"error"},{"inputs":[],"name":"NoFeesToClaim","type":"error"},{"inputs":[],"name":"NotInAllowList","type":"error"},{"inputs":[],"name":"OnlyManagerCanManageOptions","type":"error"},{"inputs":[],"name":"OnlyOneVoteAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"PollDoesNotExist","type":"error"},{"inputs":[],"name":"PollHasNoBalance","type":"error"},{"inputs":[],"name":"PollIsActive","type":"error"},{"inputs":[],"name":"PollMaxEntriesExceeded","type":"error"},{"inputs":[],"name":"PollNotActive","type":"error"},{"inputs":[],"name":"PollOptionDoesNotExist","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"string","name":"tokenId","type":"string"},{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"AssetDownVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"string","name":"tokenId","type":"string"},{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"AssetUpVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"ContractDownVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"ContractUpVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pollId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"voteCost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxEntries","type":"uint256"},{"indexed":false,"internalType":"bool","name":"allowManyVotes","type":"bool"},{"indexed":false,"internalType":"string","name":"title","type":"string"},{"indexed":false,"internalType":"string","name":"description","type":"string"},{"indexed":false,"internalType":"string[]","name":"options","type":"string[]"}],"name":"PollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pollId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PollFundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pollId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"optionId","type":"uint256"}],"name":"PollOptionDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pollId","type":"uint256"},{"indexed":false,"internalType":"string[]","name":"names","type":"string[]"}],"name":"PollOptionsAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pollId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"optionId","type":"uint256"},{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"Vote","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLAST_POINTS","outputs":[{"internalType":"contract IBlastPoints","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollId","type":"uint256"},{"internalType":"string[]","name":"_names","type":"string[]"}],"name":"addPollOptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollId","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"addToPollAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"assetVoteCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllGasFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimMaturedGasFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum YieldMode","name":"_yield","type":"uint8"},{"internalType":"enum GasMode","name":"_gasMode","type":"uint8"}],"name":"configureYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"enum YieldMode","name":"_yield","type":"uint8"},{"internalType":"enum GasMode","name":"_gasMode","type":"uint8"}],"name":"configureYieldOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startDate","type":"uint256"},{"internalType":"uint256","name":"_endDate","type":"uint256"},{"internalType":"uint256","name":"_voteCost","type":"uint256"},{"internalType":"uint256","name":"_maxEntries","type":"uint256"},{"internalType":"bool","name":"_allowManyVotes","type":"bool"},{"internalType":"string","name":"_title","type":"string"},{"internalType":"string","name":"_description","type":"string"},{"internalType":"string[]","name":"_options","type":"string[]"}],"name":"createPoll","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"string","name":"_tokenId","type":"string"}],"name":"downvoteAsset","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"downvoteContract","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feesBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasMode","outputs":[{"internalType":"enum GasMode","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"string","name":"_tokenId","type":"string"}],"name":"getAssetVotes","outputs":[{"components":[{"internalType":"uint256","name":"up","type":"uint256"},{"internalType":"uint256","name":"down","type":"uint256"}],"internalType":"struct OpenVotes.Votes","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"getContractVotes","outputs":[{"components":[{"internalType":"uint256","name":"up","type":"uint256"},{"internalType":"uint256","name":"down","type":"uint256"}],"internalType":"struct OpenVotes.Votes","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"getManagersActivePolls","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"uint256","name":"voteCost","type":"uint256"},{"internalType":"uint256","name":"maxEntries","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"bool","name":"allowManyVotes","type":"bool"},{"internalType":"address[]","name":"allowList","type":"address[]"},{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"description","type":"string"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"isSet","type":"bool"},{"internalType":"string","name":"name","type":"string"},{"internalType":"address[]","name":"votes","type":"address[]"}],"internalType":"struct OpenVotes.PollOption[]","name":"options","type":"tuple[]"}],"internalType":"struct OpenVotes.Poll[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"getManagersEndedPolls","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"uint256","name":"voteCost","type":"uint256"},{"internalType":"uint256","name":"maxEntries","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"bool","name":"allowManyVotes","type":"bool"},{"internalType":"address[]","name":"allowList","type":"address[]"},{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"description","type":"string"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"isSet","type":"bool"},{"internalType":"string","name":"name","type":"string"},{"internalType":"address[]","name":"votes","type":"address[]"}],"internalType":"struct OpenVotes.PollOption[]","name":"options","type":"tuple[]"}],"internalType":"struct OpenVotes.Poll[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollId","type":"uint256"}],"name":"getPoll","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"uint256","name":"voteCost","type":"uint256"},{"internalType":"uint256","name":"maxEntries","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"bool","name":"allowManyVotes","type":"bool"},{"internalType":"address[]","name":"allowList","type":"address[]"},{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"description","type":"string"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"isSet","type":"bool"},{"internalType":"string","name":"name","type":"string"},{"internalType":"address[]","name":"votes","type":"address[]"}],"internalType":"struct OpenVotes.PollOption[]","name":"options","type":"tuple[]"}],"internalType":"struct OpenVotes.Poll","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pollIdCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pollPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollId","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromPollAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_assetVoteCost","type":"uint256"}],"name":"setAssetVoteCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAutoYieldAndGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feesBps","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setPointsOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_contract","type":"address"}],"name":"setPointsOperatorOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollId","type":"uint256"},{"internalType":"address[]","name":"_allowList","type":"address[]"}],"name":"setPollAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollPrice","type":"uint256"}],"name":"setPollPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"string","name":"_tokenId","type":"string"}],"name":"upvoteAsset","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"upvoteContract","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollId","type":"uint256"},{"internalType":"uint256","name":"_optionId","type":"uint256"}],"name":"vote","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollId","type":"uint256"}],"name":"withdrawPollFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yieldMode","outputs":[{"internalType":"enum YieldMode","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052655af3107a4000600181815560029190915560646003556005556009805461ffff1916610100179055348015610038575f80fd5b506040516140953803806140958339810160408190526100579161014c565b806001600160a01b03811661008557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61008e816100fd565b506040516336b91f2b60e01b81526001600160a01b0382166004820152732536fe9ab3f511540f2f9e2ec2a805005c3dd800906336b91f2b906024015f604051808303815f87803b1580156100e1575f80fd5b505af11580156100f3573d5f803e3d5ffd5b5050505050610179565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6020828403121561015c575f80fd5b81516001600160a01b0381168114610172575f80fd5b9392505050565b613f0f806101865f395ff3fe608060405260043610610291575f3560e01c80636c738aef11610165578063b63a4d89116100c6578063d928209e1161007c578063e931dc2811610062578063e931dc2814610722578063eff42bbc14610735578063f2fde38b146107a1575f80fd5b8063d928209e146106e4578063e5fedb0214610703575f80fd5b8063c073a688116100ac578063c073a68814610691578063cafe0f2d146106b0578063ce2c2df1146106cf575f80fd5b8063b63a4d8914610653578063bccc533714610672575f80fd5b806397ec152d1161011b5780639ad30294116101015780639ad3029414610617578063a02215351461062b578063b384abef14610640575f80fd5b806397ec152d146105f057806399807a3014610603575f80fd5b80638da5cb5b1161014b5780638da5cb5b1461057457806396e39cda1461059d57806397d75776146105c9575f80fd5b80636c738aef1461054d578063715018a614610560575f80fd5b806347f6997b1161020f5780634e188d38116101c557806365d4ecaf116101ab57806365d4ecaf14610512578063690080a7146105255780636913c5eb14610538575f80fd5b80634e188d38146104cd5780635328ae01146104ec575f80fd5b80634bdc43b4116101f55780634bdc43b4146104705780634c1e74bb1461048f5780634d5aa7cf146104ae575f80fd5b806347f6997b146103f95780634b8f902514610424575f80fd5b80631a8cbcaa116102645780633d18678e1161024a5780633d18678e146103a757806344048e3d146103c6578063476343ee146103e5575f80fd5b80631a8cbcaa146103585780632eec7c5114610384575f80fd5b806306fdde03146102955780630db6d6ea146102e95780630f78e8a314610323578063143bf6bb14610339575b5f80fd5b3480156102a0575f80fd5b50604080518082018252600981527f4f70656e566f7465730000000000000000000000000000000000000000000000602082015290516102e091906130bf565b60405180910390f35b3480156102f4575f80fd5b5061030861030336600461312d565b6107c0565b604080518251815260209283015192810192909252016102e0565b34801561032e575f80fd5b50610337610835565b005b348015610344575f80fd5b5061033761035336600461322e565b61091d565b348015610363575f80fd5b50610377610372366004613258565b610aa0565b6040516102e09190613460565b34801561038f575f80fd5b5061039960025481565b6040519081526020016102e0565b3480156103b2575f80fd5b506103376103c1366004613258565b610e98565b3480156103d1575f80fd5b506103376103e0366004613472565b610ee1565b3480156103f0575f80fd5b50610337610f7a565b348015610404575f80fd5b5060095461041790610100900460ff1681565b6040516102e091906134cc565b34801561042f575f80fd5b5061044b732536fe9ab3f511540f2f9e2ec2a805005c3dd80081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e0565b34801561047b575f80fd5b5061033761048a366004613258565b611024565b34801561049a575f80fd5b506103376104a9366004613522565b611031565b3480156104b9575f80fd5b506103376104c836600461356a565b61124b565b3480156104d8575f80fd5b506103376104e73660046135ae565b6112ee565b3480156104f7575f80fd5b506009546105059060ff1681565b6040516102e091906135e6565b610337610520366004613641565b6113cf565b610337610533366004613472565b61169a565b348015610543575f80fd5b5061039960015481565b61033761055b36600461312d565b611761565b34801561056b575f80fd5b50610337611836565b34801561057f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661044b565b3480156105a8575f80fd5b506105bc6105b7366004613472565b611849565b6040516102e09190613718565b3480156105d4575f80fd5b5061044b73430000000000000000000000000000000000000281565b6103376105fe36600461312d565b611d41565b34801561060e575f80fd5b50610337611e0b565b348015610622575f80fd5b50610337611ea5565b348015610636575f80fd5b5061039960055481565b61033761064e366004613799565b611f03565b34801561065e575f80fd5b506105bc61066d366004613472565b612428565b34801561067d575f80fd5b5061033761068c36600461322e565b6128fa565b34801561069c575f80fd5b506103376106ab3660046137b9565b612a08565b3480156106bb575f80fd5b506103376106ca366004613258565b612a98565b3480156106da575f80fd5b5061039960035481565b3480156106ef575f80fd5b506103376106fe366004613258565b612c19565b34801561070e575f80fd5b5061033761071d366004613522565b612c26565b610337610730366004613472565b612dd0565b348015610740575f80fd5b5061030861074f366004613472565b604080518082019091525f80825260208201525073ffffffffffffffffffffffffffffffffffffffff165f90815260076020908152604091829020825180840190935280548352600101549082015290565b3480156107ac575f80fd5b506103376107bb366004613472565b612e95565b604080518082019091525f808252602082015273ffffffffffffffffffffffffffffffffffffffff83165f908152600860205260409081902090516108069084906137f9565b908152604080519182900360209081018320838301909252815483526001909101549082015290505b92915050565b61083d612efa565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16637114177a6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610896575f80fd5b505af11580156108a8573d5f803e3d5ffd5b5050505073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16634e606c476040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610905575f80fd5b505af1158015610917573d5f803e3d5ffd5b50505050565b5f8281526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff16331461097c576040517fc2d7553200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526006602052604090206002015442106109c5576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b5f83815260066020526040902060080154811015610a9b575f838152600660205260409020600801805473ffffffffffffffffffffffffffffffffffffffff8416919083908110610a1a57610a1a61380f565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff1603610a93575f838152600660205260409020600801805482908110610a6257610a6261380f565b5f91825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b6001016109c7565b505050565b610b146040518061018001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f15158152602001606081526020016060815260200160608152602001606081525090565b5f8281526006602081815260409283902083516101808101855281548152600182015473ffffffffffffffffffffffffffffffffffffffff16818401526002820154818601526003820154606082015260048201546080820152600582015460a08201529281015460c0840152600781015460ff16151560e084015260088101805485518185028101850190965280865293949193610100860193830182828015610bf357602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bc8575b50505050508152602001600982018054610c0c9061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c389061383c565b8015610c835780601f10610c5a57610100808354040283529160200191610c83565b820191905f5260205f20905b815481529060010190602001808311610c6657829003601f168201915b50505050508152602001600a82018054610c9c9061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc89061383c565b8015610d135780601f10610cea57610100808354040283529160200191610d13565b820191905f5260205f20905b815481529060010190602001808311610cf657829003601f168201915b50505050508152602001600b8201805480602002602001604051908101604052809291908181526020015f905b82821015610e8a575f848152602090819020604080516080810182526004860290920180548352600181015460ff1615159383019390935260028301805492939291840191610d8e9061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dba9061383c565b8015610e055780601f10610ddc57610100808354040283529160200191610e05565b820191905f5260205f20905b815481529060010190602001808311610de857829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610e7257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e47575b50505050508152505081526020019060010190610d40565b505050915250909392505050565b610ea0612efa565b6103e8811115610edc576040517f711d82e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600355565b610ee9612efa565b6040517f36b91f2b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152732536fe9ab3f511540f2f9e2ec2a805005c3dd800906336b91f2b906024015f604051808303815f87803b158015610f61575f80fd5b505af1158015610f73573d5f803e3d5ffd5b5050505050565b610f82612efa565b6004544711610fbd576040517f846d8c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60045447610ffc91906138ba565b6040518115909202915f818181858888f19350505050158015611021573d5f803e3d5ffd5b50565b61102c612efa565b600155565b5f8381526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff163314611090576040517fc2d7553200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8381526006602052604090206002015442106110d9576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8181101561120a575f848152600660209081526040918290208251608081018452600b90910180548252600192820192909252909181018585858181106111245761112461380f565b905060200281019061113691906138cd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250506040805183815260208082018352948501528554600180820188559684529284902085516004909402019283559284015194820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001695151595909517909455908201519192509060028201906111e39082613972565b50606082015180516111ff916003840191602090910190612fc0565b5050506001016110db565b507fa0f42bd967f71cd5c8a71c0d9d20794eff4b2d5a26d8343d3d54e43a9c9ab23f83838360405161123e93929190613b94565b60405180910390a1505050565b611253612efa565b6040517fb30080ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015283166024820152732536fe9ab3f511540f2f9e2ec2a805005c3dd8009063b30080ac906044015b5f604051808303815f87803b1580156112d4575f80fd5b505af11580156112e6573d5f803e3d5ffd5b505050505050565b6112f6612efa565b600980548391907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360028111156113335761133361348b565b0217905550600980548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101008360018111156113765761137661348b565b02179055506040517fc8992e610000000000000000000000000000000000000000000000000000000081527343000000000000000000000000000000000000029063c8992e61906112bd90859085903390600401613bad565b60015434101561140b576040517f356680b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580545f818152600660208190526040808320938455600190930180547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055835482528282206002018f9055835482528282206003018e9055835482528282206004018d90558354825282822084018c905583548252828220018190558254815281812060070180548b15157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091161790559154825290206009016114d7868883613bec565b506005545f908152600660205260409020600a016114f6848683613bec565b505f5b818110156116295760065f60055481526020019081526020015f20600b0160405180608001604052808381526020016001151581526020018585858181106115435761154361380f565b905060200281019061155591906138cd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250506040805183815260208082018352948501528554600180820188559684529284902085516004909402019283559284015194820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001695151595909517909455908201519192509060028201906116029082613972565b506060820151805161161e916003840191602090910190612fc0565b5050506001016114f9565b507f0f64b09ff3c931b17c579e0a4d11a3e434ab2db10da3156623af07f4de68d9f56005548c8c8c8c8c8c8c8c8c8c8c6040516116719c9b9a99989796959493929190613d02565b60405180910390a160058054905f61168883613d79565b91905055505050505050505050505050565b60025434146116d5576040517f2abe34ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260076020526040812080546001929061170a908490613db0565b90915550506040805173ffffffffffffffffffffffffffffffffffffffff831681523360208201527f802d8aae6ea3cac65e9a6ef68452f2d0b14a9d4013b807b82098967aa66a13ad91015b60405180910390a150565b600254341461179c576040517f2abe34ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f90815260086020526040908190209051600191906117d39084906137f9565b90815260200160405180910390205f015f8282546117f19190613db0565b90915550506040517fd9230a4e85d67c91a24329598f83c7a89b0df3e1a25a02b8cc7378ab17fc27aa9061182a90849084903390613dc3565b60405180910390a15050565b61183e612efa565b6118475f612f4c565b565b60605f60055467ffffffffffffffff81111561186757611867613100565b60405190808252806020026020018201604052801561190c57816020015b6118f96040518061018001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f15158152602001606081526020016060815260200160608152602001606081525090565b8152602001906001900390816118855790505b5090505f60015b600554811015611d38575f8181526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff868116911614801561196557505f818152600660205260409020600201544210155b801561198157505f818152600660205260409020600301544211155b15611d30575f8181526006602081815260409283902083516101808101855281548152600182015473ffffffffffffffffffffffffffffffffffffffff16818401526002820154818601526003820154606082015260048201546080820152600582015460a08201529281015460c0840152600781015460ff16151560e084015260088101805485518185028101850190965280865293949193610100860193830182828015611a6557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611a3a575b50505050508152602001600982018054611a7e9061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054611aaa9061383c565b8015611af55780601f10611acc57610100808354040283529160200191611af5565b820191905f5260205f20905b815481529060010190602001808311611ad857829003601f168201915b50505050508152602001600a82018054611b0e9061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3a9061383c565b8015611b855780601f10611b5c57610100808354040283529160200191611b85565b820191905f5260205f20905b815481529060010190602001808311611b6857829003601f168201915b50505050508152602001600b8201805480602002602001604051908101604052809291908181526020015f905b82821015611cfc575f848152602090819020604080516080810182526004860290920180548352600181015460ff1615159383019390935260028301805492939291840191611c009061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2c9061383c565b8015611c775780601f10611c4e57610100808354040283529160200191611c77565b820191905f5260205f20905b815481529060010190602001808311611c5a57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015611ce457602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611cb9575b50505050508152505081526020019060010190611bb2565b5050505081525050838381518110611d1657611d1661380f565b60200260200101819052508180611d2c90613d79565b9250505b600101611913565b50909392505050565b6002543414611d7c576040517f2abe34ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f9081526008602052604090819020905160019190611db39084906137f9565b90815260200160405180910390206001015f828254611dd29190613db0565b90915550506040517fd9e050bf72498cf7ffcb1e5940e641a5a88da9cf60156cd4014d3a7b01c852579061182a90849084903390613dc3565b611e13612efa565b6040517f662aa11d0000000000000000000000000000000000000000000000000000000081523060048201523360248201527343000000000000000000000000000000000000029063662aa11d906044015b6020604051808303815f875af1158015611e81573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110219190613e17565b611ead612efa565b6040517f954fa5ee0000000000000000000000000000000000000000000000000000000081523060048201523360248201527343000000000000000000000000000000000000029063954fa5ee90604401611e65565b5f8281526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff16611f60576040517f8acdc76500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260066020526040902060020154421080611f8d57505f8281526006602052604090206003015442115b15611fc4576040517f4ffa1dda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260066020526040902060040154341461200d576040517f2abe34ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260066020526040902060080154156120d4575f805b5f8481526006602052604090206008015481101561209a575f8481526006602052604090206008018054339190839081106120635761206361380f565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff1603612092576001915061209a565b600101612026565b50806120d2576040517fe0e6520900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f828152600660205260409020600b018054829081106120f6576120f661380f565b5f91825260209091206001600490920201015460ff16612142576040517f5c240edf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526006602052604090206007015460ff16612262575f5b5f838152600660205260409020600b0154811015612260575f5b5f848152600660205260409020600b018054839081106121985761219861380f565b905f5260205f20906004020160030180549050811015612257575f848152600660205260409020600b018054339190849081106121d7576121d761380f565b905f5260205f20906004020160030182815481106121f7576121f761380f565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff160361224f576040517f659d04f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612176565b5060010161215c565b505b5f82815260066020526040902060050154156122eb575f8281526006602052604090206005810154600b9091018054839081106122a1576122a161380f565b905f5260205f20906004020160030180549050106122eb576040517f03c16f6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f828152600660205260409020600b0180548290811061230d5761230d61380f565b5f918252602080832060036004938402909101810180546001810182559085528285200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317905554858452600690915260408320909101546127109161237791613e2e565b6123819190613e45565b5f84815260066020526040812060040154919250906123a19083906138ba565b90508060065f8681526020019081526020015f206006015f8282546123c69190613db0565b925050819055508060045f8282546123de9190613db0565b90915550506040805185815260208101859052338183015290517f7c2f48a4bf2e759e77b1e77a8bf1034cdf16e9034dad596d3655bb8b315f85eb9181900360600190a150505050565b60605f60055467ffffffffffffffff81111561244657612446613100565b6040519080825280602002602001820160405280156124eb57816020015b6124d86040518061018001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f15158152602001606081526020016060815260200160608152602001606081525090565b8152602001906001900390816124645790505b5090505f60015b600554811015611d38575f8181526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff868116911614801561254357505f8181526006602052604090206003015442115b156128f2575f8181526006602081815260409283902083516101808101855281548152600182015473ffffffffffffffffffffffffffffffffffffffff16818401526002820154818601526003820154606082015260048201546080820152600582015460a08201529281015460c0840152600781015460ff16151560e08401526008810180548551818502810185019096528086529394919361010086019383018282801561262757602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116125fc575b505050505081526020016009820180546126409061383c565b80601f016020809104026020016040519081016040528092919081815260200182805461266c9061383c565b80156126b75780601f1061268e576101008083540402835291602001916126b7565b820191905f5260205f20905b81548152906001019060200180831161269a57829003601f168201915b50505050508152602001600a820180546126d09061383c565b80601f01602080910402602001604051908101604052809291908181526020018280546126fc9061383c565b80156127475780601f1061271e57610100808354040283529160200191612747565b820191905f5260205f20905b81548152906001019060200180831161272a57829003601f168201915b50505050508152602001600b8201805480602002602001604051908101604052809291908181526020015f905b828210156128be575f848152602090819020604080516080810182526004860290920180548352600181015460ff16151593830193909352600283018054929392918401916127c29061383c565b80601f01602080910402602001604051908101604052809291908181526020018280546127ee9061383c565b80156128395780601f1061281057610100808354040283529160200191612839565b820191905f5260205f20905b81548152906001019060200180831161281c57829003601f168201915b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156128a657602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161287b575b50505050508152505081526020019060010190612774565b50505050815250508383815181106128d8576128d861380f565b602002602001018190525081806128ee90613d79565b9250505b6001016124f2565b5f8281526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff163314612959576040517fc2d7553200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526006602052604090206002015442106129a2576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f91825260066020908152604083206008018054600181018255908452922090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b612a10612efa565b6040517f4c802f3800000000000000000000000000000000000000000000000000000000815273430000000000000000000000000000000000000290634c802f3890612a66908690869086903390600401613e7d565b5f604051808303815f87803b158015612a7d575f80fd5b505af1158015612a8f573d5f803e3d5ffd5b50505050505050565b5f8181526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff163314612af7576040517fc2d7553200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81815260066020526040902060030154421015612b41576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f818152600660208190526040822001549003612b8a576040517f0175181900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8181526006602081905260408220018054908290556004805491928392612bb39084906138ba565b9091555050604051339082156108fc029083905f818181858888f19350505050158015612be2573d5f803e3d5ffd5b5060408051838152602081018390527fd9c31584070e180ed2715c3910f653aded00fa2eb44874f203fe82d94e5d5007910161182a565b612c21612efa565b600255565b5f8381526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff163314612c85576040517fc2d7553200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152600660205260409020600201544210612cce576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152600660205260409020600201544210612d17576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152600660205260408120612d3391600890910190613048565b5f5b81811015610917575f848152600660205260409020600801838383818110612d5f57612d5f61380f565b9050602002016020810190612d749190613472565b8154600180820184555f93845260209093200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905501612d35565b6002543414612e0b576040517f2abe34ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081526007602052604081206001908101805491929091612e45908490613db0565b90915550506040805173ffffffffffffffffffffffffffffffffffffffff831681523360208201527fa99f0216603ae2d75019e517770e7014653a612b3ef1199c33a7bc64cf76d0509101611756565b612e9d612efa565b73ffffffffffffffffffffffffffffffffffffffff8116612ef1576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b61102181612f4c565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611847576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401612ee8565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255905f5260205f20908101928215613038579160200282015b8281111561303857825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190612fde565b5061304492915061305f565b5090565b5080545f8255905f5260205f209081019061102191905b5b80821115613044575f8155600101613060565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6130d16020830184613073565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146130fb575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f806040838503121561313e575f80fd5b613147836130d8565b9150602083013567ffffffffffffffff811115613162575f80fd5b8301601f81018513613172575f80fd5b803567ffffffffffffffff81111561318c5761318c613100565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131f8576131f8613100565b60405281815282820160200187101561320f575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f806040838503121561323f575f80fd5b8235915061324f602084016130d8565b90509250929050565b5f60208284031215613268575f80fd5b5035919050565b5f8151808452602084019350602083015f5b828110156132b557815173ffffffffffffffffffffffffffffffffffffffff16865260209586019590910190600101613281565b5093949350505050565b5f82825180855260208501945060208160051b830101602085015f5b83811015613368577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030188528151805184526020810151151560208501526040810151608060408601526133356080860182613073565b9050606082015191508481036060860152613350818361326f565b60209a8b019a909550939093019250506001016132db565b50909695505050505050565b805182525f60208201516133a0602085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408201516040840152606082015160608401526080820151608084015260a082015160a084015260c082015160c084015260e08201516133e660e085018215159052565b5061010082015161018061010085015261340461018085018261326f565b905061012083015184820361012086015261341f8282613073565b91505061014083015184820361014086015261343b8282613073565b91505061016083015184820361016086015261345782826132bf565b95945050505050565b602081525f6130d16020830184613374565b5f60208284031215613482575f80fd5b6130d1826130d8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600281106134c8576134c861348b565b9052565b6020810161082f82846134b8565b5f8083601f8401126134ea575f80fd5b50813567ffffffffffffffff811115613501575f80fd5b6020830191508360208260051b850101111561351b575f80fd5b9250929050565b5f805f60408486031215613534575f80fd5b83359250602084013567ffffffffffffffff811115613551575f80fd5b61355d868287016134da565b9497909650939450505050565b5f806040838503121561357b575f80fd5b613584836130d8565b915061324f602084016130d8565b8035600381106130fb575f80fd5b8035600281106130fb575f80fd5b5f80604083850312156135bf575f80fd5b6135c883613592565b915061324f602084016135a0565b600381106134c8576134c861348b565b6020810161082f82846135d6565b803580151581146130fb575f80fd5b5f8083601f840112613613575f80fd5b50813567ffffffffffffffff81111561362a575f80fd5b60208301915083602082850101111561351b575f80fd5b5f805f805f805f805f805f6101008c8e03121561365c575f80fd5b8b359a5060208c0135995060408c0135985060608c0135975061368160808d016135f4565b965060a08c013567ffffffffffffffff81111561369c575f80fd5b6136a88e828f01613603565b90975095505060c08c013567ffffffffffffffff8111156136c7575f80fd5b6136d38e828f01613603565b90955093505060e08c013567ffffffffffffffff8111156136f2575f80fd5b6136fe8e828f016134da565b915080935050809150509295989b509295989b9093969950565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561378d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613778858351613374565b9450602093840193919091019060010161373e565b50929695505050505050565b5f80604083850312156137aa575f80fd5b50508035926020909101359150565b5f805f606084860312156137cb575f80fd5b6137d4846130d8565b92506137e260208501613592565b91506137f0604085016135a0565b90509250925092565b5f82518060208501845e5f920191825250919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b600181811c9082168061385057607f821691505b602082108103613887577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561082f5761082f61388d565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613900575f80fd5b83018035915067ffffffffffffffff82111561391a575f80fd5b60200191503681900382131561351b575f80fd5b601f821115610a9b57805f5260205f20601f840160051c810160208510156139535750805b601f840160051c820191505b81811015610f73575f815560010161395f565b815167ffffffffffffffff81111561398c5761398c613100565b6139a08161399a845461383c565b8461392e565b6020601f8211600181146139f1575f83156139bb5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610f73565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015613a3e5787850151825560209485019460019092019101613a1e565b5084821015613a7a57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f8383855260208501945060208460051b820101835f5b86811015613368577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084840301885281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1873603018112613b47575f80fd5b860160208101903567ffffffffffffffff811115613b63575f80fd5b803603821315613b71575f80fd5b613b7c858284613a89565b60209a8b019a90955093909301925050600101613ae7565b838152604060208201525f613457604083018486613ad0565b60608101613bbb82866135d6565b613bc860208301856134b8565b73ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff831115613c0457613c04613100565b613c1883613c12835461383c565b8361392e565b5f601f841160018114613c68575f8515613c325750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610f73565b5f838152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08716915b82811015613cb55786850135825560209485019460019092019101613c95565b5086821015613cf0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b8c81528b60208201528a604082015289606082015288608082015287151560a082015261012060c08201525f613d3d6101208301888a613a89565b82810360e0840152613d50818789613a89565b9050828103610100840152613d66818587613ad0565b9f9e505050505050505050505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613da957613da961388d565b5060010190565b8082018082111561082f5761082f61388d565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f613df16060830185613073565b905073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b5f60208284031215613e27575f80fd5b5051919050565b808202811582820484141761082f5761082f61388d565b5f82613e78577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8516815260808101613ea760208301866135d6565b613eb460408301856134b8565b73ffffffffffffffffffffffffffffffffffffffff831660608301529594505050505056fea2646970667358221220703aa281bc8811edac4291d6f9e3629c8040032f69f6de6b142861ca7056670664736f6c634300081a003300000000000000000000000081e3a6fe6db27fa0f8f29c13b3ea2bc692117e59
Deployed Bytecode
0x608060405260043610610291575f3560e01c80636c738aef11610165578063b63a4d89116100c6578063d928209e1161007c578063e931dc2811610062578063e931dc2814610722578063eff42bbc14610735578063f2fde38b146107a1575f80fd5b8063d928209e146106e4578063e5fedb0214610703575f80fd5b8063c073a688116100ac578063c073a68814610691578063cafe0f2d146106b0578063ce2c2df1146106cf575f80fd5b8063b63a4d8914610653578063bccc533714610672575f80fd5b806397ec152d1161011b5780639ad30294116101015780639ad3029414610617578063a02215351461062b578063b384abef14610640575f80fd5b806397ec152d146105f057806399807a3014610603575f80fd5b80638da5cb5b1161014b5780638da5cb5b1461057457806396e39cda1461059d57806397d75776146105c9575f80fd5b80636c738aef1461054d578063715018a614610560575f80fd5b806347f6997b1161020f5780634e188d38116101c557806365d4ecaf116101ab57806365d4ecaf14610512578063690080a7146105255780636913c5eb14610538575f80fd5b80634e188d38146104cd5780635328ae01146104ec575f80fd5b80634bdc43b4116101f55780634bdc43b4146104705780634c1e74bb1461048f5780634d5aa7cf146104ae575f80fd5b806347f6997b146103f95780634b8f902514610424575f80fd5b80631a8cbcaa116102645780633d18678e1161024a5780633d18678e146103a757806344048e3d146103c6578063476343ee146103e5575f80fd5b80631a8cbcaa146103585780632eec7c5114610384575f80fd5b806306fdde03146102955780630db6d6ea146102e95780630f78e8a314610323578063143bf6bb14610339575b5f80fd5b3480156102a0575f80fd5b50604080518082018252600981527f4f70656e566f7465730000000000000000000000000000000000000000000000602082015290516102e091906130bf565b60405180910390f35b3480156102f4575f80fd5b5061030861030336600461312d565b6107c0565b604080518251815260209283015192810192909252016102e0565b34801561032e575f80fd5b50610337610835565b005b348015610344575f80fd5b5061033761035336600461322e565b61091d565b348015610363575f80fd5b50610377610372366004613258565b610aa0565b6040516102e09190613460565b34801561038f575f80fd5b5061039960025481565b6040519081526020016102e0565b3480156103b2575f80fd5b506103376103c1366004613258565b610e98565b3480156103d1575f80fd5b506103376103e0366004613472565b610ee1565b3480156103f0575f80fd5b50610337610f7a565b348015610404575f80fd5b5060095461041790610100900460ff1681565b6040516102e091906134cc565b34801561042f575f80fd5b5061044b732536fe9ab3f511540f2f9e2ec2a805005c3dd80081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e0565b34801561047b575f80fd5b5061033761048a366004613258565b611024565b34801561049a575f80fd5b506103376104a9366004613522565b611031565b3480156104b9575f80fd5b506103376104c836600461356a565b61124b565b3480156104d8575f80fd5b506103376104e73660046135ae565b6112ee565b3480156104f7575f80fd5b506009546105059060ff1681565b6040516102e091906135e6565b610337610520366004613641565b6113cf565b610337610533366004613472565b61169a565b348015610543575f80fd5b5061039960015481565b61033761055b36600461312d565b611761565b34801561056b575f80fd5b50610337611836565b34801561057f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661044b565b3480156105a8575f80fd5b506105bc6105b7366004613472565b611849565b6040516102e09190613718565b3480156105d4575f80fd5b5061044b73430000000000000000000000000000000000000281565b6103376105fe36600461312d565b611d41565b34801561060e575f80fd5b50610337611e0b565b348015610622575f80fd5b50610337611ea5565b348015610636575f80fd5b5061039960055481565b61033761064e366004613799565b611f03565b34801561065e575f80fd5b506105bc61066d366004613472565b612428565b34801561067d575f80fd5b5061033761068c36600461322e565b6128fa565b34801561069c575f80fd5b506103376106ab3660046137b9565b612a08565b3480156106bb575f80fd5b506103376106ca366004613258565b612a98565b3480156106da575f80fd5b5061039960035481565b3480156106ef575f80fd5b506103376106fe366004613258565b612c19565b34801561070e575f80fd5b5061033761071d366004613522565b612c26565b610337610730366004613472565b612dd0565b348015610740575f80fd5b5061030861074f366004613472565b604080518082019091525f80825260208201525073ffffffffffffffffffffffffffffffffffffffff165f90815260076020908152604091829020825180840190935280548352600101549082015290565b3480156107ac575f80fd5b506103376107bb366004613472565b612e95565b604080518082019091525f808252602082015273ffffffffffffffffffffffffffffffffffffffff83165f908152600860205260409081902090516108069084906137f9565b908152604080519182900360209081018320838301909252815483526001909101549082015290505b92915050565b61083d612efa565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16637114177a6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610896575f80fd5b505af11580156108a8573d5f803e3d5ffd5b5050505073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16634e606c476040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610905575f80fd5b505af1158015610917573d5f803e3d5ffd5b50505050565b5f8281526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff16331461097c576040517fc2d7553200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526006602052604090206002015442106109c5576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b5f83815260066020526040902060080154811015610a9b575f838152600660205260409020600801805473ffffffffffffffffffffffffffffffffffffffff8416919083908110610a1a57610a1a61380f565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff1603610a93575f838152600660205260409020600801805482908110610a6257610a6261380f565b5f91825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b6001016109c7565b505050565b610b146040518061018001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f15158152602001606081526020016060815260200160608152602001606081525090565b5f8281526006602081815260409283902083516101808101855281548152600182015473ffffffffffffffffffffffffffffffffffffffff16818401526002820154818601526003820154606082015260048201546080820152600582015460a08201529281015460c0840152600781015460ff16151560e084015260088101805485518185028101850190965280865293949193610100860193830182828015610bf357602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bc8575b50505050508152602001600982018054610c0c9061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c389061383c565b8015610c835780601f10610c5a57610100808354040283529160200191610c83565b820191905f5260205f20905b815481529060010190602001808311610c6657829003601f168201915b50505050508152602001600a82018054610c9c9061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc89061383c565b8015610d135780601f10610cea57610100808354040283529160200191610d13565b820191905f5260205f20905b815481529060010190602001808311610cf657829003601f168201915b50505050508152602001600b8201805480602002602001604051908101604052809291908181526020015f905b82821015610e8a575f848152602090819020604080516080810182526004860290920180548352600181015460ff1615159383019390935260028301805492939291840191610d8e9061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dba9061383c565b8015610e055780601f10610ddc57610100808354040283529160200191610e05565b820191905f5260205f20905b815481529060010190602001808311610de857829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610e7257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e47575b50505050508152505081526020019060010190610d40565b505050915250909392505050565b610ea0612efa565b6103e8811115610edc576040517f711d82e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600355565b610ee9612efa565b6040517f36b91f2b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152732536fe9ab3f511540f2f9e2ec2a805005c3dd800906336b91f2b906024015f604051808303815f87803b158015610f61575f80fd5b505af1158015610f73573d5f803e3d5ffd5b5050505050565b610f82612efa565b6004544711610fbd576040517f846d8c5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60045447610ffc91906138ba565b6040518115909202915f818181858888f19350505050158015611021573d5f803e3d5ffd5b50565b61102c612efa565b600155565b5f8381526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff163314611090576040517fc2d7553200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8381526006602052604090206002015442106110d9576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8181101561120a575f848152600660209081526040918290208251608081018452600b90910180548252600192820192909252909181018585858181106111245761112461380f565b905060200281019061113691906138cd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250506040805183815260208082018352948501528554600180820188559684529284902085516004909402019283559284015194820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001695151595909517909455908201519192509060028201906111e39082613972565b50606082015180516111ff916003840191602090910190612fc0565b5050506001016110db565b507fa0f42bd967f71cd5c8a71c0d9d20794eff4b2d5a26d8343d3d54e43a9c9ab23f83838360405161123e93929190613b94565b60405180910390a1505050565b611253612efa565b6040517fb30080ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015283166024820152732536fe9ab3f511540f2f9e2ec2a805005c3dd8009063b30080ac906044015b5f604051808303815f87803b1580156112d4575f80fd5b505af11580156112e6573d5f803e3d5ffd5b505050505050565b6112f6612efa565b600980548391907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360028111156113335761133361348b565b0217905550600980548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101008360018111156113765761137661348b565b02179055506040517fc8992e610000000000000000000000000000000000000000000000000000000081527343000000000000000000000000000000000000029063c8992e61906112bd90859085903390600401613bad565b60015434101561140b576040517f356680b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580545f818152600660208190526040808320938455600190930180547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055835482528282206002018f9055835482528282206003018e9055835482528282206004018d90558354825282822084018c905583548252828220018190558254815281812060070180548b15157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091161790559154825290206009016114d7868883613bec565b506005545f908152600660205260409020600a016114f6848683613bec565b505f5b818110156116295760065f60055481526020019081526020015f20600b0160405180608001604052808381526020016001151581526020018585858181106115435761154361380f565b905060200281019061155591906138cd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250506040805183815260208082018352948501528554600180820188559684529284902085516004909402019283559284015194820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001695151595909517909455908201519192509060028201906116029082613972565b506060820151805161161e916003840191602090910190612fc0565b5050506001016114f9565b507f0f64b09ff3c931b17c579e0a4d11a3e434ab2db10da3156623af07f4de68d9f56005548c8c8c8c8c8c8c8c8c8c8c6040516116719c9b9a99989796959493929190613d02565b60405180910390a160058054905f61168883613d79565b91905055505050505050505050505050565b60025434146116d5576040517f2abe34ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260076020526040812080546001929061170a908490613db0565b90915550506040805173ffffffffffffffffffffffffffffffffffffffff831681523360208201527f802d8aae6ea3cac65e9a6ef68452f2d0b14a9d4013b807b82098967aa66a13ad91015b60405180910390a150565b600254341461179c576040517f2abe34ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f90815260086020526040908190209051600191906117d39084906137f9565b90815260200160405180910390205f015f8282546117f19190613db0565b90915550506040517fd9230a4e85d67c91a24329598f83c7a89b0df3e1a25a02b8cc7378ab17fc27aa9061182a90849084903390613dc3565b60405180910390a15050565b61183e612efa565b6118475f612f4c565b565b60605f60055467ffffffffffffffff81111561186757611867613100565b60405190808252806020026020018201604052801561190c57816020015b6118f96040518061018001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f15158152602001606081526020016060815260200160608152602001606081525090565b8152602001906001900390816118855790505b5090505f60015b600554811015611d38575f8181526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff868116911614801561196557505f818152600660205260409020600201544210155b801561198157505f818152600660205260409020600301544211155b15611d30575f8181526006602081815260409283902083516101808101855281548152600182015473ffffffffffffffffffffffffffffffffffffffff16818401526002820154818601526003820154606082015260048201546080820152600582015460a08201529281015460c0840152600781015460ff16151560e084015260088101805485518185028101850190965280865293949193610100860193830182828015611a6557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611a3a575b50505050508152602001600982018054611a7e9061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054611aaa9061383c565b8015611af55780601f10611acc57610100808354040283529160200191611af5565b820191905f5260205f20905b815481529060010190602001808311611ad857829003601f168201915b50505050508152602001600a82018054611b0e9061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3a9061383c565b8015611b855780601f10611b5c57610100808354040283529160200191611b85565b820191905f5260205f20905b815481529060010190602001808311611b6857829003601f168201915b50505050508152602001600b8201805480602002602001604051908101604052809291908181526020015f905b82821015611cfc575f848152602090819020604080516080810182526004860290920180548352600181015460ff1615159383019390935260028301805492939291840191611c009061383c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2c9061383c565b8015611c775780601f10611c4e57610100808354040283529160200191611c77565b820191905f5260205f20905b815481529060010190602001808311611c5a57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015611ce457602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611cb9575b50505050508152505081526020019060010190611bb2565b5050505081525050838381518110611d1657611d1661380f565b60200260200101819052508180611d2c90613d79565b9250505b600101611913565b50909392505050565b6002543414611d7c576040517f2abe34ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f9081526008602052604090819020905160019190611db39084906137f9565b90815260200160405180910390206001015f828254611dd29190613db0565b90915550506040517fd9e050bf72498cf7ffcb1e5940e641a5a88da9cf60156cd4014d3a7b01c852579061182a90849084903390613dc3565b611e13612efa565b6040517f662aa11d0000000000000000000000000000000000000000000000000000000081523060048201523360248201527343000000000000000000000000000000000000029063662aa11d906044015b6020604051808303815f875af1158015611e81573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110219190613e17565b611ead612efa565b6040517f954fa5ee0000000000000000000000000000000000000000000000000000000081523060048201523360248201527343000000000000000000000000000000000000029063954fa5ee90604401611e65565b5f8281526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff16611f60576040517f8acdc76500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260066020526040902060020154421080611f8d57505f8281526006602052604090206003015442115b15611fc4576040517f4ffa1dda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260066020526040902060040154341461200d576040517f2abe34ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260066020526040902060080154156120d4575f805b5f8481526006602052604090206008015481101561209a575f8481526006602052604090206008018054339190839081106120635761206361380f565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff1603612092576001915061209a565b600101612026565b50806120d2576040517fe0e6520900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f828152600660205260409020600b018054829081106120f6576120f661380f565b5f91825260209091206001600490920201015460ff16612142576040517f5c240edf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526006602052604090206007015460ff16612262575f5b5f838152600660205260409020600b0154811015612260575f5b5f848152600660205260409020600b018054839081106121985761219861380f565b905f5260205f20906004020160030180549050811015612257575f848152600660205260409020600b018054339190849081106121d7576121d761380f565b905f5260205f20906004020160030182815481106121f7576121f761380f565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff160361224f576040517f659d04f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612176565b5060010161215c565b505b5f82815260066020526040902060050154156122eb575f8281526006602052604090206005810154600b9091018054839081106122a1576122a161380f565b905f5260205f20906004020160030180549050106122eb576040517f03c16f6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f828152600660205260409020600b0180548290811061230d5761230d61380f565b5f918252602080832060036004938402909101810180546001810182559085528285200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317905554858452600690915260408320909101546127109161237791613e2e565b6123819190613e45565b5f84815260066020526040812060040154919250906123a19083906138ba565b90508060065f8681526020019081526020015f206006015f8282546123c69190613db0565b925050819055508060045f8282546123de9190613db0565b90915550506040805185815260208101859052338183015290517f7c2f48a4bf2e759e77b1e77a8bf1034cdf16e9034dad596d3655bb8b315f85eb9181900360600190a150505050565b60605f60055467ffffffffffffffff81111561244657612446613100565b6040519080825280602002602001820160405280156124eb57816020015b6124d86040518061018001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f15158152602001606081526020016060815260200160608152602001606081525090565b8152602001906001900390816124645790505b5090505f60015b600554811015611d38575f8181526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff868116911614801561254357505f8181526006602052604090206003015442115b156128f2575f8181526006602081815260409283902083516101808101855281548152600182015473ffffffffffffffffffffffffffffffffffffffff16818401526002820154818601526003820154606082015260048201546080820152600582015460a08201529281015460c0840152600781015460ff16151560e08401526008810180548551818502810185019096528086529394919361010086019383018282801561262757602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116125fc575b505050505081526020016009820180546126409061383c565b80601f016020809104026020016040519081016040528092919081815260200182805461266c9061383c565b80156126b75780601f1061268e576101008083540402835291602001916126b7565b820191905f5260205f20905b81548152906001019060200180831161269a57829003601f168201915b50505050508152602001600a820180546126d09061383c565b80601f01602080910402602001604051908101604052809291908181526020018280546126fc9061383c565b80156127475780601f1061271e57610100808354040283529160200191612747565b820191905f5260205f20905b81548152906001019060200180831161272a57829003601f168201915b50505050508152602001600b8201805480602002602001604051908101604052809291908181526020015f905b828210156128be575f848152602090819020604080516080810182526004860290920180548352600181015460ff16151593830193909352600283018054929392918401916127c29061383c565b80601f01602080910402602001604051908101604052809291908181526020018280546127ee9061383c565b80156128395780601f1061281057610100808354040283529160200191612839565b820191905f5260205f20905b81548152906001019060200180831161281c57829003601f168201915b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156128a657602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161287b575b50505050508152505081526020019060010190612774565b50505050815250508383815181106128d8576128d861380f565b602002602001018190525081806128ee90613d79565b9250505b6001016124f2565b5f8281526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff163314612959576040517fc2d7553200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526006602052604090206002015442106129a2576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f91825260066020908152604083206008018054600181018255908452922090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b612a10612efa565b6040517f4c802f3800000000000000000000000000000000000000000000000000000000815273430000000000000000000000000000000000000290634c802f3890612a66908690869086903390600401613e7d565b5f604051808303815f87803b158015612a7d575f80fd5b505af1158015612a8f573d5f803e3d5ffd5b50505050505050565b5f8181526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff163314612af7576040517fc2d7553200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81815260066020526040902060030154421015612b41576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f818152600660208190526040822001549003612b8a576040517f0175181900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8181526006602081905260408220018054908290556004805491928392612bb39084906138ba565b9091555050604051339082156108fc029083905f818181858888f19350505050158015612be2573d5f803e3d5ffd5b5060408051838152602081018390527fd9c31584070e180ed2715c3910f653aded00fa2eb44874f203fe82d94e5d5007910161182a565b612c21612efa565b600255565b5f8381526006602052604090206001015473ffffffffffffffffffffffffffffffffffffffff163314612c85576040517fc2d7553200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152600660205260409020600201544210612cce576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152600660205260409020600201544210612d17576040517f94845dae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f838152600660205260408120612d3391600890910190613048565b5f5b81811015610917575f848152600660205260409020600801838383818110612d5f57612d5f61380f565b9050602002016020810190612d749190613472565b8154600180820184555f93845260209093200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905501612d35565b6002543414612e0b576040517f2abe34ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081526007602052604081206001908101805491929091612e45908490613db0565b90915550506040805173ffffffffffffffffffffffffffffffffffffffff831681523360208201527fa99f0216603ae2d75019e517770e7014653a612b3ef1199c33a7bc64cf76d0509101611756565b612e9d612efa565b73ffffffffffffffffffffffffffffffffffffffff8116612ef1576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b61102181612f4c565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611847576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401612ee8565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255905f5260205f20908101928215613038579160200282015b8281111561303857825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190612fde565b5061304492915061305f565b5090565b5080545f8255905f5260205f209081019061102191905b5b80821115613044575f8155600101613060565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6130d16020830184613073565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146130fb575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f806040838503121561313e575f80fd5b613147836130d8565b9150602083013567ffffffffffffffff811115613162575f80fd5b8301601f81018513613172575f80fd5b803567ffffffffffffffff81111561318c5761318c613100565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156131f8576131f8613100565b60405281815282820160200187101561320f575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f806040838503121561323f575f80fd5b8235915061324f602084016130d8565b90509250929050565b5f60208284031215613268575f80fd5b5035919050565b5f8151808452602084019350602083015f5b828110156132b557815173ffffffffffffffffffffffffffffffffffffffff16865260209586019590910190600101613281565b5093949350505050565b5f82825180855260208501945060208160051b830101602085015f5b83811015613368577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030188528151805184526020810151151560208501526040810151608060408601526133356080860182613073565b9050606082015191508481036060860152613350818361326f565b60209a8b019a909550939093019250506001016132db565b50909695505050505050565b805182525f60208201516133a0602085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408201516040840152606082015160608401526080820151608084015260a082015160a084015260c082015160c084015260e08201516133e660e085018215159052565b5061010082015161018061010085015261340461018085018261326f565b905061012083015184820361012086015261341f8282613073565b91505061014083015184820361014086015261343b8282613073565b91505061016083015184820361016086015261345782826132bf565b95945050505050565b602081525f6130d16020830184613374565b5f60208284031215613482575f80fd5b6130d1826130d8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600281106134c8576134c861348b565b9052565b6020810161082f82846134b8565b5f8083601f8401126134ea575f80fd5b50813567ffffffffffffffff811115613501575f80fd5b6020830191508360208260051b850101111561351b575f80fd5b9250929050565b5f805f60408486031215613534575f80fd5b83359250602084013567ffffffffffffffff811115613551575f80fd5b61355d868287016134da565b9497909650939450505050565b5f806040838503121561357b575f80fd5b613584836130d8565b915061324f602084016130d8565b8035600381106130fb575f80fd5b8035600281106130fb575f80fd5b5f80604083850312156135bf575f80fd5b6135c883613592565b915061324f602084016135a0565b600381106134c8576134c861348b565b6020810161082f82846135d6565b803580151581146130fb575f80fd5b5f8083601f840112613613575f80fd5b50813567ffffffffffffffff81111561362a575f80fd5b60208301915083602082850101111561351b575f80fd5b5f805f805f805f805f805f6101008c8e03121561365c575f80fd5b8b359a5060208c0135995060408c0135985060608c0135975061368160808d016135f4565b965060a08c013567ffffffffffffffff81111561369c575f80fd5b6136a88e828f01613603565b90975095505060c08c013567ffffffffffffffff8111156136c7575f80fd5b6136d38e828f01613603565b90955093505060e08c013567ffffffffffffffff8111156136f2575f80fd5b6136fe8e828f016134da565b915080935050809150509295989b509295989b9093969950565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561378d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613778858351613374565b9450602093840193919091019060010161373e565b50929695505050505050565b5f80604083850312156137aa575f80fd5b50508035926020909101359150565b5f805f606084860312156137cb575f80fd5b6137d4846130d8565b92506137e260208501613592565b91506137f0604085016135a0565b90509250925092565b5f82518060208501845e5f920191825250919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b600181811c9082168061385057607f821691505b602082108103613887577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561082f5761082f61388d565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613900575f80fd5b83018035915067ffffffffffffffff82111561391a575f80fd5b60200191503681900382131561351b575f80fd5b601f821115610a9b57805f5260205f20601f840160051c810160208510156139535750805b601f840160051c820191505b81811015610f73575f815560010161395f565b815167ffffffffffffffff81111561398c5761398c613100565b6139a08161399a845461383c565b8461392e565b6020601f8211600181146139f1575f83156139bb5750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610f73565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015613a3e5787850151825560209485019460019092019101613a1e565b5084821015613a7a57868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f8383855260208501945060208460051b820101835f5b86811015613368577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084840301885281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1873603018112613b47575f80fd5b860160208101903567ffffffffffffffff811115613b63575f80fd5b803603821315613b71575f80fd5b613b7c858284613a89565b60209a8b019a90955093909301925050600101613ae7565b838152604060208201525f613457604083018486613ad0565b60608101613bbb82866135d6565b613bc860208301856134b8565b73ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff831115613c0457613c04613100565b613c1883613c12835461383c565b8361392e565b5f601f841160018114613c68575f8515613c325750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610f73565b5f838152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08716915b82811015613cb55786850135825560209485019460019092019101613c95565b5086821015613cf0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b8c81528b60208201528a604082015289606082015288608082015287151560a082015261012060c08201525f613d3d6101208301888a613a89565b82810360e0840152613d50818789613a89565b9050828103610100840152613d66818587613ad0565b9f9e505050505050505050505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613da957613da961388d565b5060010190565b8082018082111561082f5761082f61388d565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f613df16060830185613073565b905073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b5f60208284031215613e27575f80fd5b5051919050565b808202811582820484141761082f5761082f61388d565b5f82613e78577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8516815260808101613ea760208301866135d6565b613eb460408301856134b8565b73ffffffffffffffffffffffffffffffffffffffff831660608301529594505050505056fea2646970667358221220703aa281bc8811edac4291d6f9e3629c8040032f69f6de6b142861ca7056670664736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000081e3a6fe6db27fa0f8f29c13b3ea2bc692117e59
-----Decoded View---------------
Arg [0] : initialOwner (address): 0x81e3A6fe6Db27Fa0F8F29C13B3eA2bC692117E59
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000081e3a6fe6db27fa0f8f29c13b3ea2bc692117e59
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BLAST | Ether (ETH) | 100.00% | $3,278.93 | 0.00020351 | $0.667305 |
[ 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.