My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
Governance
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2021-11-05 */ // Sources flattened with hardhat v2.3.0 https://hardhat.org // File contracts/interface/IxSNOB.sol pragma solidity 0.8.4; interface IxSNOB { function balanceOf(address addr) external view returns (uint256); } // File contracts/DummyXSNOB.sol pragma solidity 0.8.4; contract DummyXSNOB is IxSNOB { mapping (address => uint256) private _balances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor () { _name = "Staked SNOB"; _symbol = "xSNOB"; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev For ease of testing xSNOB. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/math/[email protected] pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/Governance.sol pragma solidity 0.8.4; /// SPDX-License-Identifier: MIT contract Governance is ReentrancyGuard { using SafeMath for uint256; /// @notice Lower bound for the voting period uint256 public minimumVotingPeriod = 3 days; uint256 public constant VOTING_PERIOD_MINIMUM = 1 days; uint256 public constant VOTING_PERIOD_MAXIMUM = 30 days; /// @notice Seconds since the end of the voting period before the proposal can be executed uint256 public executionDelay = 24 hours; uint256 public constant EXECUTION_DELAY_MINIMUM = 30 seconds; uint256 public constant EXECUTION_DELAY_MAXIMUM = 30 days; /// @notice Seconds since the proposal could be executed until it is considered expired uint256 public constant EXPIRATION_PERIOD = 14 days; /// @notice The required minimum number of votes in support of a proposal for it to succeed uint256 public quorumVotes = 300_000e18; uint256 public constant QUORUM_VOTES_MINIMUM = 100_000e18; uint256 public constant QUORUM_VOTES_MAXIMUM = 18_000_000e18; /// @notice The minimum number of votes required for an account to create a proposal uint256 public proposalThreshold = 100_000e18; uint256 public constant PROPOSAL_THRESHOLD_MINIMUM = 50_000e18; uint256 public constant PROPOSAL_THRESHOLD_MAXIMUM = 10_000_000e18; /// @notice The total number of proposals uint256 public proposalCount; /// @notice The record of all proposals ever proposed mapping(uint256 => Proposal) public proposals; mapping(uint256 => ProposalExecutionContext) public proposalExecutionContexts; mapping(uint256 => mapping(address => Receipt)) public receipts; mapping(address => uint256) public lastProposalByAddress; /// @notice Non-tradeable xSNOB used to represent votes IxSNOB public xSNOB; struct Proposal { string title; string metadata; address proposer; address executor; uint256 startTime; uint256 votingPeriod; uint256 quorumVotes; uint256 executionDelay; uint256 forVotes; uint256 againstVotes; } struct ProposalExecutionContext { address target; uint256 value; bytes data; } struct Receipt { bool hasVoted; bool support; uint256 votes; } enum ProposalState { Active, Defeated, PendingExecution, ReadyForExecution, Executed, Expired } event NewVote( uint256 proposalId, address voter, bool support, uint256 votes ); event ProposalCreated(uint256 proposalId, address proposer, string title); event ProposalExecuted(uint256 proposalId, address executor); event MinimumVotingPeriodChanged(uint256 newMinimumVotingPeriod); event ExecutionDelayChanged(uint256 newExecutionDelay); event QuorumVotesChanges(uint256 newQuorumVotes); event ProposalThresholdChanged(uint256 newProposalThreshold); /// @dev This token must not be tradeable constructor(address _xSNOB) { xSNOB = IxSNOB(_xSNOB); } modifier onlyGovernor() { require( msg.sender == address(this), "Governance: insufficient privileges" ); _; } function state(uint256 _proposalId) public view returns (ProposalState) { require( _proposalId <= proposalCount && _proposalId != 0, "Governance::state: invalid proposal id" ); Proposal storage proposal = proposals[_proposalId]; if (block.timestamp <= proposal.startTime.add(proposal.votingPeriod)) { return ProposalState.Active; } else if (proposal.executor != address(0)) { return ProposalState.Executed; } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < proposal.quorumVotes) { return ProposalState.Defeated; } else if (block.timestamp < proposal.startTime.add(proposal.votingPeriod).add(proposal.executionDelay)) { return ProposalState.PendingExecution; } else if (block.timestamp < proposal.startTime.add(proposal.votingPeriod).add(proposal.executionDelay).add(EXPIRATION_PERIOD)) { return ProposalState.ReadyForExecution; } else { return ProposalState.Expired; } } function getReceipt(uint256 _proposalId, address _voter) public view returns (Receipt memory) { return receipts[_proposalId][_voter]; } function propose( string calldata _title, string calldata _metadata, uint256 _votingPeriod, address _target, uint256 _value, bytes memory _data ) public { require( _votingPeriod >= minimumVotingPeriod, "Governance::propose: voting period too short" ); require( _votingPeriod <= VOTING_PERIOD_MAXIMUM, "Governance::propose: voting period too long" ); uint256 lastProposalId = lastProposalByAddress[msg.sender]; if (lastProposalId > 0) { ProposalState proposalState = state(lastProposalId); require( proposalState == ProposalState.Executed || proposalState == ProposalState.Defeated || proposalState == ProposalState.Expired, "Governance::propose: proposer already has a proposal in progress" ); } uint256 votes = xSNOB.balanceOf(msg.sender); require( votes > proposalThreshold, "Governance::propose: proposer votes below proposal threshold" ); proposalCount++; Proposal memory newProposal = Proposal({ title: _title, metadata: _metadata, proposer: msg.sender, executor: address(0), startTime: block.timestamp, votingPeriod: _votingPeriod, quorumVotes: quorumVotes, executionDelay: executionDelay, forVotes: 0, againstVotes: 0 }); proposals[proposalCount] = newProposal; lastProposalByAddress[msg.sender] = proposalCount; ProposalExecutionContext memory newProposalExecutionContext = ProposalExecutionContext({ target: _target, value: _value, data: _data }); proposalExecutionContexts[proposalCount] = newProposalExecutionContext; emit ProposalCreated(proposalCount, newProposal.proposer, newProposal.title); } function vote(uint256 _proposalId, bool _support) public { require( state(_proposalId) == ProposalState.Active, "Governance::vote: voting is closed" ); Proposal storage proposal = proposals[_proposalId]; Receipt storage receipt = receipts[_proposalId][msg.sender]; uint256 votes = xSNOB.balanceOf(msg.sender); if (receipt.hasVoted) { if (receipt.support) { proposal.forVotes = proposal.forVotes.sub(receipt.votes); } else { proposal.againstVotes = proposal.againstVotes.sub(receipt.votes); } } if (_support) { proposal.forVotes = proposal.forVotes.add(votes); } else { proposal.againstVotes = proposal.againstVotes.add(votes); } receipt.hasVoted = true; receipt.support = _support; receipt.votes = votes; emit NewVote(_proposalId, msg.sender, _support, votes); } function execute(uint256 _proposalId) public payable nonReentrant returns (bytes memory) { require( state(_proposalId) == ProposalState.ReadyForExecution, "Governance::execute: cannot be executed" ); Proposal storage proposal = proposals[_proposalId]; ProposalExecutionContext storage proposalExecutionContext = proposalExecutionContexts[_proposalId]; (bool success, bytes memory returnData) = proposalExecutionContext.target.call{value: proposalExecutionContext.value}(proposalExecutionContext.data); require( success, "Governance::execute: transaction execution reverted." ); proposal.executor = msg.sender; emit ProposalExecuted(_proposalId, proposal.executor); return returnData; } // Setters function setMinimumVotingPeriod(uint256 _seconds) public onlyGovernor { require( _seconds >= VOTING_PERIOD_MINIMUM, "Governance::setMinimumVotingPeriod: TOO_SMALL" ); require( _seconds <= VOTING_PERIOD_MAXIMUM, "Governance::setMinimumVotingPeriod: TOO_LARGE" ); minimumVotingPeriod = _seconds; emit MinimumVotingPeriodChanged(_seconds); } function setExecutionDelay(uint256 _seconds) public onlyGovernor { require( _seconds >= EXECUTION_DELAY_MINIMUM, "Governance::setExecutionDelay: TOO_SMALL" ); require( _seconds <= EXECUTION_DELAY_MAXIMUM, "Governance::setExecutionDelay: TOO_LARGE" ); executionDelay = _seconds; emit ExecutionDelayChanged(_seconds); } function setQuorumVotes(uint256 _votes) public onlyGovernor { require( _votes >= QUORUM_VOTES_MINIMUM, "Governance::setQuorumVotes: TOO_SMALL" ); require( _votes <= QUORUM_VOTES_MAXIMUM, "Governance::setQuorumVotes: TOO_LARGE" ); quorumVotes = _votes; emit QuorumVotesChanges(_votes); } function setProposalThreshold(uint256 _votes) public onlyGovernor { require( _votes >= PROPOSAL_THRESHOLD_MINIMUM, "Governance::setProposalThreshold: TOO_SMALL" ); require( _votes <= PROPOSAL_THRESHOLD_MAXIMUM, "Governance::setProposalThreshold: TOO_LARGE" ); proposalThreshold = _votes; emit ProposalThresholdChanged(_votes); } }
[{"inputs":[{"internalType":"address","name":"_xSNOB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newExecutionDelay","type":"uint256"}],"name":"ExecutionDelayChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinimumVotingPeriod","type":"uint256"}],"name":"MinimumVotingPeriodChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"bool","name":"support","type":"bool"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"}],"name":"NewVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"string","name":"title","type":"string"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"executor","type":"address"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newProposalThreshold","type":"uint256"}],"name":"ProposalThresholdChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newQuorumVotes","type":"uint256"}],"name":"QuorumVotesChanges","type":"event"},{"inputs":[],"name":"EXECUTION_DELAY_MAXIMUM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXECUTION_DELAY_MINIMUM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXPIRATION_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSAL_THRESHOLD_MAXIMUM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSAL_THRESHOLD_MINIMUM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUORUM_VOTES_MAXIMUM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUORUM_VOTES_MINIMUM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOTING_PERIOD_MAXIMUM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOTING_PERIOD_MINIMUM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalId","type":"uint256"}],"name":"execute","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"executionDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalId","type":"uint256"},{"internalType":"address","name":"_voter","type":"address"}],"name":"getReceipt","outputs":[{"components":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint256","name":"votes","type":"uint256"}],"internalType":"struct Governance.Receipt","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastProposalByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumVotingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalExecutionContexts","outputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"metadata","type":"string"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"internalType":"uint256","name":"quorumVotes","type":"uint256"},{"internalType":"uint256","name":"executionDelay","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_title","type":"string"},{"internalType":"string","name":"_metadata","type":"string"},{"internalType":"uint256","name":"_votingPeriod","type":"uint256"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"propose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quorumVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"receipts","outputs":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"setExecutionDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"setMinimumVotingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_votes","type":"uint256"}],"name":"setProposalThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_votes","type":"uint256"}],"name":"setQuorumVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum Governance.ProposalState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalId","type":"uint256"},{"internalType":"bool","name":"_support","type":"bool"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"xSNOB","outputs":[{"internalType":"contract IxSNOB","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526203f48060015562015180600255693f870857a3e0e380000060035569152d02c7e14af680000060045534801561003a57600080fd5b50604051611e62380380611e6283398101604081905261005991610083565b6001600055600a80546001600160a01b0319166001600160a01b03929092169190911790556100b1565b600060208284031215610094578081fd5b81516001600160a01b03811681146100aa578182fd5b9392505050565b611da2806100c06000396000f3fe6080604052600436106101b75760003560e01c80638b257989116100ec578063ca75960b1161008a578063e4917d9f11610064578063e4917d9f14610595578063ea014f48146105b5578063ece40cc1146105ca578063fe0d94c1146105ea57600080fd5b8063ca75960b146104b5578063da35c664146104cc578063e23a9a52146104e257600080fd5b8063b1c360ed116100c6578063b1c360ed1461043a578063b58131b014610450578063c647097514610466578063c9d27afe1461049557600080fd5b80638b257989146103e65780638e19855e146103fc578063a48508b81461041a57600080fd5b80635a1daf73116101595780636b1a5847116101335780636b1a5847146103595780636dedc06e146103915780637ba456af146103a85780638ac56a53146103c757600080fd5b80635a1daf7314610241578063645c71511461030e57806368c671431461032c57600080fd5b80632e54929c116101955780632e54929c1461024157806338249a49146102585780633e4f49e6146102785780634178b249146102a557600080fd5b8063013cf08b146101bc57806302ec8f9e146101fb57806324bc1a641461021d575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004611a02565b61060a565b6040516101f29a99989796959493929190611be1565b60405180910390f35b34801561020757600080fd5b5061021b610216366004611a02565b610776565b005b34801561022957600080fd5b5061023360035481565b6040519081526020016101f2565b34801561024d57600080fd5b5061023362278d0081565b34801561026457600080fd5b5061021b610273366004611a02565b6108ab565b34801561028457600080fd5b50610298610293366004611a02565b6109d1565b6040516101f29190611bb9565b3480156102b157600080fd5b506102f16102c0366004611a32565b60086020908152600092835260408084209091529082529020805460019091015460ff808316926101009004169083565b6040805193151584529115156020840152908201526060016101f2565b34801561031a57600080fd5b5061023369152d02c7e14af680000081565b34801561033857600080fd5b506102336103473660046118c3565b60096020526000908152604090205481565b34801561036557600080fd5b50600a54610379906001600160a01b031681565b6040516001600160a01b0390911681526020016101f2565b34801561039d57600080fd5b506102336201518081565b3480156103b457600080fd5b506102336a0ee3a5f48a68b55200000081565b3480156103d357600080fd5b506102336a084595161401484a00000081565b3480156103f257600080fd5b5061023360025481565b34801561040857600080fd5b50610233690a968163f0a57b40000081565b34801561042657600080fd5b5061021b6104353660046118dd565b610b39565b34801561044657600080fd5b5061023360015481565b34801561045c57600080fd5b5061023360045481565b34801561047257600080fd5b50610486610481366004611a02565b61105a565b6040516101f293929190611b76565b3480156104a157600080fd5b5061021b6104b0366004611a5d565b61110f565b3480156104c157600080fd5b506102336212750081565b3480156104d857600080fd5b5061023360055481565b3480156104ee57600080fd5b5061056f6104fd366004611a32565b60408051606081018252600080825260208201819052918101919091525060009182526008602090815260408084206001600160a01b03939093168452918152918190208151606081018352815460ff8082161515835261010090910416151593810193909352600101549082015290565b6040805182511515815260208084015115159082015291810151908201526060016101f2565b3480156105a157600080fd5b5061021b6105b0366004611a02565b611328565b3480156105c157600080fd5b50610233601e81565b3480156105d657600080fd5b5061021b6105e5366004611a02565b611442565b6105fd6105f8366004611a02565b611573565b6040516101f29190611ba6565b60066020526000908152604090208054819061062590611cf0565b80601f016020809104026020016040519081016040528092919081815260200182805461065190611cf0565b801561069e5780601f106106735761010080835404028352916020019161069e565b820191906000526020600020905b81548152906001019060200180831161068157829003601f168201915b5050505050908060010180546106b390611cf0565b80601f01602080910402602001604051908101604052809291908181526020018280546106df90611cf0565b801561072c5780601f106107015761010080835404028352916020019161072c565b820191906000526020600020905b81548152906001019060200180831161070f57829003601f168201915b50505060028401546003850154600486015460058701546006880154600789015460088a01546009909a015498996001600160a01b0396871699959096169750929550909390928a565b33301461079e5760405162461bcd60e51b815260040161079590611c54565b60405180910390fd5b69152d02c7e14af68000008110156108065760405162461bcd60e51b815260206004820152602560248201527f476f7665726e616e63653a3a73657451756f72756d566f7465733a20544f4f5f60448201526414d350531360da1b6064820152608401610795565b6a0ee3a5f48a68b55200000081111561086f5760405162461bcd60e51b815260206004820152602560248201527f476f7665726e616e63653a3a73657451756f72756d566f7465733a20544f4f5f6044820152644c4152474560d81b6064820152608401610795565b60038190556040518181527f4d82feec215c8e1f4d904b7268dd6499d866a96685c31f1e394e6663715f76e1906020015b60405180910390a150565b3330146108ca5760405162461bcd60e51b815260040161079590611c54565b620151808110156109335760405162461bcd60e51b815260206004820152602d60248201527f476f7665726e616e63653a3a7365744d696e696d756d566f74696e675065726960448201526c1bd90e881513d3d7d4d3505313609a1b6064820152608401610795565b62278d0081111561099c5760405162461bcd60e51b815260206004820152602d60248201527f476f7665726e616e63653a3a7365744d696e696d756d566f74696e675065726960448201526c6f643a20544f4f5f4c4152474560981b6064820152608401610795565b60018190556040518181527ff4f36c6d71e6dce23fde1248bfb40024041297ac1665de2840339f8a6b32e545906020016108a0565b600060055482111580156109e457508115155b610a3f5760405162461bcd60e51b815260206004820152602660248201527f476f7665726e616e63653a3a73746174653a20696e76616c69642070726f706f6044820152651cd85b081a5960d21b6064820152608401610795565b600082815260066020526040902060058101546004820154610a60916117a8565b4211610a6f5750600092915050565b60038101546001600160a01b031615610a8b5750600492915050565b80600901548160080154111580610aa9575080600601548160080154105b15610ab75750600192915050565b610ae08160070154610ada836005015484600401546117a890919063ffffffff16565b906117a8565b421015610af05750600292915050565b610b1a62127500610ada8360070154610ada856005015486600401546117a890919063ffffffff16565b421015610b2a5750600392915050565b50600592915050565b50919050565b600154841015610ba05760405162461bcd60e51b815260206004820152602c60248201527f476f7665726e616e63653a3a70726f706f73653a20766f74696e67207065726960448201526b1bd9081d1bdbc81cda1bdc9d60a21b6064820152608401610795565b62278d00841115610c075760405162461bcd60e51b815260206004820152602b60248201527f476f7665726e616e63653a3a70726f706f73653a20766f74696e67207065726960448201526a6f6420746f6f206c6f6e6760a81b6064820152608401610795565b336000908152600960205260409020548015610d17576000610c28826109d1565b90506004816005811115610c4c57634e487b7160e01b600052602160045260246000fd5b1480610c7757506001816005811115610c7557634e487b7160e01b600052602160045260246000fd5b145b80610ca157506005816005811115610c9f57634e487b7160e01b600052602160045260246000fd5b145b610d15576040805162461bcd60e51b81526020600482015260248101919091527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220616c60448201527f72656164792068617320612070726f706f73616c20696e2070726f67726573736064820152608401610795565b505b600a546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610d5b57600080fd5b505afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d939190611a1a565b90506004548111610e0c5760405162461bcd60e51b815260206004820152603c60248201527f476f7665726e616e63653a3a70726f706f73653a2070726f706f73657220766f60448201527f7465732062656c6f772070726f706f73616c207468726573686f6c64000000006064820152608401610795565b60058054906000610e1c83611d25565b9091555050604080516101606020601f8d01819004028201810190925261014081018b81526000928291908e908e9081908501838280828437600092019190915250505090825250604080516020601f8d018190048102820181019092528b815291810191908c908c908190840183828082843760009201829052509385525050336020808501919091526040808501849052426060860152608085018d905260035460a086015260025460c086015260e08501849052610100909401839052600554835260068152929091208351805194955085949193610f03935084929101906117c7565b506020828101518051610f1c92600185019201906117c7565b50604082810151600283810180546001600160a01b03199081166001600160a01b039485161790915560608087015160038701805484169186169190911790556080870151600487015560a087015160058088019190915560c0880151600688015560e0880151600780890191909155610100890151600889015561012090980151600997880155543360009081526020978852868120829055865192830187528e861683528288018e81528388018e8152928252988852959095208151815490931692909416919091178355945160018301559151805185949293611007939085019201906117c7565b5050600554604080850151855191517f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd639450611044939290611c97565b60405180910390a1505050505050505050505050565b6007602052600090815260409020805460018201546002830180546001600160a01b0390931693919261108c90611cf0565b80601f01602080910402602001604051908101604052809291908181526020018280546110b890611cf0565b80156111055780601f106110da57610100808354040283529160200191611105565b820191906000526020600020905b8154815290600101906020018083116110e857829003601f168201915b5050505050905083565b600061111a836109d1565b600581111561113957634e487b7160e01b600052602160045260246000fd5b146111915760405162461bcd60e51b815260206004820152602260248201527f476f7665726e616e63653a3a766f74653a20766f74696e6720697320636c6f73604482015261195960f21b6064820152608401610795565b600082815260066020908152604080832060088352818420338086529352818420600a5492516370a0823160e01b815260048101949094529093909290916001600160a01b0316906370a082319060240160206040518083038186803b1580156111fa57600080fd5b505afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190611a1a565b825490915060ff1615611284578154610100900460ff161561126b5760018201546008840154611261916117bb565b6008840155611284565b6001820154600984015461127e916117bb565b60098401555b83156112a357600883015461129990826117a8565b60088401556112b8565b60098301546112b290826117a8565b60098401555b8154841515610100810261ffff19909216919091176001908117845583018290556040805187815233602082015290810191909152606081018290527f06e7cd0c868e7a367f3f3557249599fac0fc8712d4d6220bce69c664b9ccfd4a9060800160405180910390a15050505050565b3330146113475760405162461bcd60e51b815260040161079590611c54565b601e8110156113a95760405162461bcd60e51b815260206004820152602860248201527f476f7665726e616e63653a3a736574457865637574696f6e44656c61793a205460448201526713d3d7d4d350531360c21b6064820152608401610795565b62278d0081111561140d5760405162461bcd60e51b815260206004820152602860248201527f476f7665726e616e63653a3a736574457865637574696f6e44656c61793a20546044820152674f4f5f4c4152474560c01b6064820152608401610795565b60028190556040518181527f193d917ecb8a5c0270b102b28be14cc9ee25763c29c0b87e980a0bc65d485e75906020016108a0565b3330146114615760405162461bcd60e51b815260040161079590611c54565b690a968163f0a57b4000008110156114cf5760405162461bcd60e51b815260206004820152602b60248201527f476f7665726e616e63653a3a73657450726f706f73616c5468726573686f6c6460448201526a0e881513d3d7d4d350531360aa1b6064820152608401610795565b6a084595161401484a00000081111561153e5760405162461bcd60e51b815260206004820152602b60248201527f476f7665726e616e63653a3a73657450726f706f73616c5468726573686f6c6460448201526a3a20544f4f5f4c4152474560a81b6064820152608401610795565b60048190556040518181527f0553c1e1d490599cc62884d38bddf3b538bf26581e3d5a830cb2aa0a54fc5633906020016108a0565b6060600260005414156115c85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610795565b600260005560036115d8836109d1565b60058111156115f757634e487b7160e01b600052602160045260246000fd5b146116545760405162461bcd60e51b815260206004820152602760248201527f476f7665726e616e63653a3a657865637574653a2063616e6e6f7420626520656044820152661e1958dd5d195960ca1b6064820152608401610795565b6000828152600660209081526040808320600790925280832080546001820154925193949193919283926001600160a01b0390921691611698906002870190611adb565b60006040518083038185875af1925050503d80600081146116d5576040519150601f19603f3d011682016040523d82523d6000602084013e6116da565b606091505b5091509150816117495760405162461bcd60e51b815260206004820152603460248201527f476f7665726e616e63653a3a657865637574653a207472616e73616374696f6e6044820152731032bc32b1baba34b7b7103932bb32b93a32b21760611b6064820152608401610795565b6003840180546001600160a01b031916339081179091556040805188815260208101929092527f9c85b616f29fca57a17eafe71cf9ff82ffef41766e2cf01ea7f8f7878dd3ec24910160405180910390a1600160005595945050505050565b60006117b48284611cc1565b9392505050565b60006117b48284611cd9565b8280546117d390611cf0565b90600052602060002090601f0160209004810192826117f5576000855561183b565b82601f1061180e57805160ff191683800117855561183b565b8280016001018555821561183b579182015b8281111561183b578251825591602001919060010190611820565b5061184792915061184b565b5090565b5b80821115611847576000815560010161184c565b80356001600160a01b038116811461187757600080fd5b919050565b60008083601f84011261188d578182fd5b50813567ffffffffffffffff8111156118a4578182fd5b6020830191508360208285010111156118bc57600080fd5b9250929050565b6000602082840312156118d4578081fd5b6117b482611860565b60008060008060008060008060c0898b0312156118f8578384fd5b883567ffffffffffffffff8082111561190f578586fd5b61191b8c838d0161187c565b909a50985060208b0135915080821115611933578586fd5b61193f8c838d0161187c565b909850965060408b0135955086915061195a60608c01611860565b945060808b0135935060a08b0135915080821115611976578283fd5b818b0191508b601f830112611989578283fd5b81358181111561199b5761199b611d56565b604051601f8201601f19908116603f011681019083821181831017156119c3576119c3611d56565b816040528281528e60208487010111156119db578586fd5b82602086016020830137856020848301015280955050505050509295985092959890939650565b600060208284031215611a13578081fd5b5035919050565b600060208284031215611a2b578081fd5b5051919050565b60008060408385031215611a44578182fd5b82359150611a5460208401611860565b90509250929050565b60008060408385031215611a6f578182fd5b8235915060208301358015158114611a85578182fd5b809150509250929050565b60008151808452815b81811015611ab557602081850181015186830182015201611a99565b81811115611ac65782602083870101525b50601f01601f19169290920160200192915050565b600080835482600182811c915080831680611af757607f831692505b6020808410821415611b1757634e487b7160e01b87526022600452602487fd5b818015611b2b5760018114611b3c57611b68565b60ff19861689528489019650611b68565b60008a815260209020885b86811015611b605781548b820152908501908301611b47565b505084890196505b509498975050505050505050565b60018060a01b0384168152826020820152606060408201526000611b9d6060830184611a90565b95945050505050565b6020815260006117b46020830184611a90565b6020810160068310611bdb57634e487b7160e01b600052602160045260246000fd5b91905290565b6000610140808352611bf58184018e611a90565b90508281036020840152611c09818d611a90565b6001600160a01b039b8c16604085015299909a16606083015250608081019690965260a086019490945260c085019290925260e0840152610100830152610120909101529392505050565b60208082526023908201527f476f7665726e616e63653a20696e73756666696369656e742070726976696c6560408201526267657360e81b606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090611b9d90830184611a90565b60008219821115611cd457611cd4611d40565b500190565b600082821015611ceb57611ceb611d40565b500390565b600181811c90821680611d0457607f821691505b60208210811415610b3357634e487b7160e01b600052602260045260246000fd5b6000600019821415611d3957611d39611d40565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212206845c4d8a9bdd0d955becdba3f4f38b291d8adcecb79eb0b26a4527c633867bd64736f6c6343000804003300000000000000000000000083952e7ab4aca74ca96217d6f8f7591bead6d64e
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000083952e7ab4aca74ca96217d6f8f7591bead6d64e
-----Decoded View---------------
Arg [0] : _xSNOB (address): 0x83952e7ab4aca74ca96217d6f8f7591bead6d64e
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000083952e7ab4aca74ca96217d6f8f7591bead6d64e
Deployed ByteCode Sourcemap
20114:10365:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21555:45;;;;;;;;;;-1:-1:-1;21555:45:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;29632:397;;;;;;;;;;-1:-1:-1;29632:397:0;;;;;:::i;:::-;;:::i;:::-;;20947:39;;;;;;;;;;;;;;;;;;;15855:25:1;;;15843:2;15828:18;20947:39:0;15810:76:1;20631:57:0;;;;;;;;;;;;20681:7;20631:57;;28739:449;;;;;;;;;;-1:-1:-1;28739:449:0;;;;;:::i;:::-;;:::i;23441:1100::-;;;;;;;;;;-1:-1:-1;23441:1100:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21691:63::-;;;;;;;;;;-1:-1:-1;21691:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5983:14:1;;5976:22;5958:41;;6042:14;;6035:22;6030:2;6015:18;;6008:50;6074:18;;;6067:34;5946:2;5931:18;21691:63:0;5913:194:1;20993:57:0;;;;;;;;;;;;21040:10;20993:57;;21761:56;;;;;;;;;;-1:-1:-1;21761:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;21887:19;;;;;;;;;;-1:-1:-1;21887:19:0;;;;-1:-1:-1;;;;;21887:19:0;;;;;;-1:-1:-1;;;;;5334:32:1;;;5316:51;;5304:2;5289:18;21887:19:0;5271:102:1;20296:54:0;;;;;;;;;;;;20344:6;20296:54;;21057:60;;;;;;;;;;;;21104:13;21057:60;;21337:66;;;;;;;;;;;;21390:13;21337:66;;20517:40;;;;;;;;;;;;;;;;21268:62;;;;;;;;;;;;21321:9;21268:62;;24706:2119;;;;;;;;;;-1:-1:-1;24706:2119:0;;;;;:::i;:::-;;:::i;20246:43::-;;;;;;;;;;;;;;;;21216:45;;;;;;;;;;;;;;;;21607:77;;;;;;;;;;-1:-1:-1;21607:77:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;26833:1030::-;;;;;;;;;;-1:-1:-1;26833:1030:0;;;;;:::i;:::-;;:::i;20790:51::-;;;;;;;;;;;;20834:7;20790:51;;21459:28;;;;;;;;;;;;;;;;24549:149;;;;;;;;;;-1:-1:-1;24549:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;24661:21:0;;;;:8;:21;;;;;;;;-1:-1:-1;;;;;24661:29:0;;;;;;;;;;;;;24654:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24549:149;;;;;15540:13:1;;15533:21;15526:29;15508:48;;15626:4;15614:17;;;15608:24;15601:32;15594:40;15572:20;;;15565:70;15679:17;;;15673:24;15651:20;;;15644:54;15496:2;15481:18;24549:149:0;15463:241:1;29196:428:0;;;;;;;;;;-1:-1:-1;29196:428:0;;;;;:::i;:::-;;:::i;20564:60::-;;;;;;;;;;;;20614:10;20564:60;;30037:439;;;;;;;;;;-1:-1:-1;30037:439:0;;;;;:::i;:::-;;:::i;27871:842::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21555:45::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21555:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21555:45:0;;;;;;;;;-1:-1:-1;21555:45:0;;-1:-1:-1;21555:45:0;;;;;:::o;29632:397::-;23323:10;23345:4;23323:27;23301:112;;;;-1:-1:-1;;;23301:112:0;;;;;;;:::i;:::-;;;;;;;;;21040:10:::1;29725:6;:30;;29703:117;;;::::0;-1:-1:-1;;;29703:117:0;;12259:2:1;29703:117:0::1;::::0;::::1;12241:21:1::0;12298:2;12278:18;;;12271:30;12337:34;12317:18;;;12310:62;-1:-1:-1;;;12388:18:1;;;12381:35;12433:19;;29703:117:0::1;12231:227:1::0;29703:117:0::1;21104:13;29853:6;:30;;29831:117;;;::::0;-1:-1:-1;;;29831:117:0;;9815:2:1;29831:117:0::1;::::0;::::1;9797:21:1::0;9854:2;9834:18;;;9827:30;9893:34;9873:18;;;9866:62;-1:-1:-1;;;9944:18:1;;;9937:35;9989:19;;29831:117:0::1;9787:227:1::0;29831:117:0::1;29959:11;:20:::0;;;29995:26:::1;::::0;15855:25:1;;;29995:26:0::1;::::0;15843:2:1;15828:18;29995:26:0::1;;;;;;;;29632:397:::0;:::o;28739:449::-;23323:10;23345:4;23323:27;23301:112;;;;-1:-1:-1;;;23301:112:0;;;;;;;:::i;:::-;20344:6:::1;28842:8;:33;;28820:128;;;::::0;-1:-1:-1;;;28820:128:0;;13072:2:1;28820:128:0::1;::::0;::::1;13054:21:1::0;13111:2;13091:18;;;13084:30;13150:34;13130:18;;;13123:62;-1:-1:-1;;;13201:18:1;;;13194:43;13254:19;;28820:128:0::1;13044:235:1::0;28820:128:0::1;20405:7;28981:8;:33;;28959:128;;;::::0;-1:-1:-1;;;28959:128:0;;10629:2:1;28959:128:0::1;::::0;::::1;10611:21:1::0;10668:2;10648:18;;;10641:30;10707:34;10687:18;;;10680:62;-1:-1:-1;;;10758:18:1;;;10751:43;10811:19;;28959:128:0::1;10601:235:1::0;28959:128:0::1;29098:19;:30:::0;;;29144:36:::1;::::0;15855:25:1;;;29144:36:0::1;::::0;15843:2:1;15828:18;29144:36:0::1;15810:76:1::0;23441:1100:0;23498:13;23561;;23546:11;:28;;:48;;;;-1:-1:-1;23578:16:0;;;23546:48;23524:136;;;;-1:-1:-1;;;23524:136:0;;12665:2:1;23524:136:0;;;12647:21:1;12704:2;12684:18;;;12677:30;12743:34;12723:18;;;12716:62;-1:-1:-1;;;12794:18:1;;;12787:36;12840:19;;23524:136:0;12637:228:1;23524:136:0;23673:25;23701:22;;;:9;:22;;;;;23782:21;;;;23759:18;;;;:45;;:22;:45::i;:::-;23740:15;:64;23736:798;;-1:-1:-1;23828:20:0;;23441:1100;-1:-1:-1;;23441:1100:0:o;23736:798::-;23870:17;;;;-1:-1:-1;;;;;23870:17:0;:31;23866:668;;-1:-1:-1;23925:22:0;;23441:1100;-1:-1:-1;;23441:1100:0:o;23866:668::-;23990:8;:21;;;23969:8;:17;;;:42;;:86;;;;24035:8;:20;;;24015:8;:17;;;:40;23969:86;23965:569;;;-1:-1:-1;24079:22:0;;23441:1100;-1:-1:-1;;23441:1100:0:o;23965:569::-;24141:74;24191:8;:23;;;24141:45;24164:8;:21;;;24141:8;:18;;;:22;;:45;;;;:::i;:::-;:49;;:74::i;:::-;24123:15;:92;24119:415;;;-1:-1:-1;24239:30:0;;23441:1100;-1:-1:-1;;23441:1100:0:o;24119:415::-;24309:97;20834:7;24309:74;24359:8;:23;;;24309:45;24332:8;:21;;;24309:8;:18;;;:22;;:45;;;;:::i;:97::-;24291:15;:115;24287:247;;;-1:-1:-1;24430:31:0;;23441:1100;-1:-1:-1;;23441:1100:0:o;24287:247::-;-1:-1:-1;24501:21:0;;23441:1100;-1:-1:-1;;23441:1100:0:o;24287:247::-;23441:1100;;;;:::o;24706:2119::-;24968:19;;24951:13;:36;;24929:130;;;;-1:-1:-1;;;24929:130:0;;13898:2:1;24929:130:0;;;13880:21:1;13937:2;13917:18;;;13910:30;13976:34;13956:18;;;13949:62;-1:-1:-1;;;14027:18:1;;;14020:42;14079:19;;24929:130:0;13870:234:1;24929:130:0;20405:7;25094:13;:38;;25072:131;;;;-1:-1:-1;;;25072:131:0;;13486:2:1;25072:131:0;;;13468:21:1;13525:2;13505:18;;;13498:30;13564:34;13544:18;;;13537:62;-1:-1:-1;;;13615:18:1;;;13608:41;13666:19;;25072:131:0;13458:233:1;25072:131:0;25263:10;25216:22;25241:33;;;:21;:33;;;;;;25291:18;;25287:401;;25326:27;25356:21;25362:14;25356:5;:21::i;:::-;25326:51;-1:-1:-1;25435:22:0;25418:13;:39;;;;;;-1:-1:-1;;;25418:39:0;;;;;;;;;;:99;;;-1:-1:-1;25495:22:0;25478:13;:39;;;;;;-1:-1:-1;;;25478:39:0;;;;;;;;;;25418:99;:158;;;-1:-1:-1;25555:21:0;25538:13;:38;;;;;;-1:-1:-1;;;25538:38:0;;;;;;;;;;25418:158;25392:284;;;;;-1:-1:-1;;;25392:284:0;;14311:2:1;25392:284:0;;;14293:21:1;14330:18;;;14323:30;;;;14389:34;14369:18;;;14362:62;14460:34;14440:18;;;14433:62;14512:19;;25392:284:0;14283:254:1;25392:284:0;25287:401;;25716:5;;:27;;-1:-1:-1;;;25716:27:0;;25732:10;25716:27;;;5316:51:1;25700:13:0;;-1:-1:-1;;;;;25716:5:0;;:15;;5289:18:1;;25716:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25700:43;;25786:17;;25778:5;:25;25756:135;;;;-1:-1:-1;;;25756:135:0;;8965:2:1;25756:135:0;;;8947:21:1;9004:2;8984:18;;;8977:30;9043:34;9023:18;;;9016:62;9114:30;9094:18;;;9087:58;9162:19;;25756:135:0;8937:250:1;25756:135:0;25904:13;:15;;;:13;:15;;;:::i;:::-;;;;-1:-1:-1;;25962:376:0;;;;;;;;;;;;;;;;;;;;;;;;;25932:27;;25962:376;;;25993:6;;;;;;25962:376;;25993:6;;;;25962:376;;;;;;;;;-1:-1:-1;;;25962:376:0;;;-1:-1:-1;25962:376:0;;;;;;;;;;;;;;;;;;;;;;;;;;;26024:9;;;;;;25962:376;;26024:9;;;;25962:376;;;;;;;;-1:-1:-1;25962:376:0;;;-1:-1:-1;;26058:10:0;25962:376;;;;;;;;;;;;;;;26129:15;25962:376;;;;;;;;;;26214:11;;25962:376;;;;26256:14;;25962:376;;;;;;;;;;;;;;;;;26361:13;;26351:24;;:9;:24;;;;;;:38;;;;25932:406;;-1:-1:-1;25932:406:0;;26351:24;;:38;;-1:-1:-1;26351:24:0;;:38;;;;:::i;:::-;-1:-1:-1;26351:38:0;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26351:38:0;;;;;;;;;;;-1:-1:-1;;;;;;26351:38:0;;;-1:-1:-1;;;;;26351:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26436:13;26422:10;-1:-1:-1;26400:33:0;;;;;;;;;;:49;;;26524:121;;;;;;;;;;;;;;;;;;;;;;;;26658:40;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;;-1:-1:-1;26658:70:0;;;;;;;26524:121;;26658:40;;:70;;;;;;;;;:::i;:::-;-1:-1:-1;;26762:13:0;;26777:20;;;;;26799:17;;26746:71;;;;-1:-1:-1;26746:71:0;;26762:13;26799:17;26746:71;:::i;:::-;;;;;;;;24706:2119;;;;;;;;;;;;:::o;21607:77::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21607:77:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26833:1030::-;26945:20;26923:18;26929:11;26923:5;:18::i;:::-;:42;;;;;;-1:-1:-1;;;26923:42:0;;;;;;;;;;26901:126;;;;-1:-1:-1;;;26901:126:0;;11452:2:1;26901:126:0;;;11434:21:1;11491:2;11471:18;;;11464:30;11530:34;11510:18;;;11503:62;-1:-1:-1;;;11581:18:1;;;11574:32;11623:19;;26901:126:0;11424:224:1;26901:126:0;27040:25;27068:22;;;:9;:22;;;;;;;;27127:8;:21;;;;;27149:10;27127:33;;;;;;;;27189:5;;:27;;-1:-1:-1;;;27189:27:0;;;;;5316:51:1;;;;27068:22:0;;27127:33;;27040:25;;-1:-1:-1;;;;;27189:5:0;;:15;;5289:18:1;;27189:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27233:16;;27173:43;;-1:-1:-1;27233:16:0;;27229:265;;;27270:15;;;;;;;27266:217;;;27348:13;;;;27326:17;;;;:36;;:21;:36::i;:::-;27306:17;;;:56;27266:217;;;27453:13;;;;27427:21;;;;:40;;:25;:40::i;:::-;27403:21;;;:64;27266:217;27510:8;27506:178;;;27555:17;;;;:28;;27577:5;27555:21;:28::i;:::-;27535:17;;;:48;27506:178;;;27640:21;;;;:32;;27666:5;27640:25;:32::i;:::-;27616:21;;;:56;27506:178;27696:23;;27730:26;;;27696:23;27730:26;;-1:-1:-1;;27730:26:0;;;;;;;27715:4;27730:26;;;;;27767:13;;:21;;;27806:49;;;16395:25:1;;;27827:10:0;16451:2:1;16436:18;;16429:60;16505:18;;;16498:50;;;;16579:2;16564:18;;16557:34;;;27806:49:0;;16382:3:1;16367:19;27806:49:0;;;;;;;26833:1030;;;;;:::o;29196:428::-;23323:10;23345:4;23323:27;23301:112;;;;-1:-1:-1;;;23301:112:0;;;;;;;:::i;:::-;20614:10:::1;29294:8;:35;;29272:125;;;::::0;-1:-1:-1;;;29272:125:0;;8556:2:1;29272:125:0::1;::::0;::::1;8538:21:1::0;8595:2;8575:18;;;8568:30;8634:34;8614:18;;;8607:62;-1:-1:-1;;;8685:18:1;;;8678:38;8733:19;;29272:125:0::1;8528:230:1::0;29272:125:0::1;20681:7;29430:8;:35;;29408:125;;;::::0;-1:-1:-1;;;29408:125:0;;11043:2:1;29408:125:0::1;::::0;::::1;11025:21:1::0;11082:2;11062:18;;;11055:30;11121:34;11101:18;;;11094:62;-1:-1:-1;;;11172:18:1;;;11165:38;11220:19;;29408:125:0::1;11015:230:1::0;29408:125:0::1;29544:14;:25:::0;;;29585:31:::1;::::0;15855:25:1;;;29585:31:0::1;::::0;15843:2:1;15828:18;29585:31:0::1;15810:76:1::0;30037:439:0;23323:10;23345:4;23323:27;23301:112;;;;-1:-1:-1;;;23301:112:0;;;;;;;:::i;:::-;21321:9:::1;30136:6;:36;;30114:129;;;::::0;-1:-1:-1;;;30114:129:0;;14744:2:1;30114:129:0::1;::::0;::::1;14726:21:1::0;14783:2;14763:18;;;14756:30;14822:34;14802:18;;;14795:62;-1:-1:-1;;;14873:18:1;;;14866:41;14924:19;;30114:129:0::1;14716:233:1::0;30114:129:0::1;21390:13;30276:6;:36;;30254:129;;;::::0;-1:-1:-1;;;30254:129:0;;8144:2:1;30254:129:0::1;::::0;::::1;8126:21:1::0;8183:2;8163:18;;;8156:30;8222:34;8202:18;;;8195:62;-1:-1:-1;;;8273:18:1;;;8266:41;8324:19;;30254:129:0::1;8116:233:1::0;30254:129:0::1;30394:17;:26:::0;;;30436:32:::1;::::0;15855:25:1;;;30436:32:0::1;::::0;15843:2:1;15828:18;30436:32:0::1;15810:76:1::0;27871:842:0;27946:12;19070:1;19667:7;;:19;;19659:63;;;;-1:-1:-1;;;19659:63:0;;15156:2:1;19659:63:0;;;15138:21:1;15195:2;15175:18;;;15168:30;15234:33;15214:18;;;15207:61;15285:18;;19659:63:0;15128:181:1;19659:63:0;19070:1;19800:7;:18;28015:31:::1;27993:18;27999:11;27993:5;:18::i;:::-;:53;;;;;;-1:-1:-1::0;;;27993:53:0::1;;;;;;;;;;27971:142;;;::::0;-1:-1:-1;;;27971:142:0;;10221:2:1;27971:142:0::1;::::0;::::1;10203:21:1::0;10260:2;10240:18;;;10233:30;10299:34;10279:18;;;10272:62;-1:-1:-1;;;10350:18:1;;;10343:37;10397:19;;27971:142:0::1;10193:229:1::0;27971:142:0::1;28126:25;28154:22:::0;;;:9:::1;:22;::::0;;;;;;;28249:25:::1;:38:::0;;;;;;28342:31;;;28386:30;::::1;::::0;28342:106;;28154:22;;28249:38;;28126:25;;;;-1:-1:-1;;;;;28342:31:0;;::::1;::::0;:106:::1;::::0;28418:29:::1;::::0;::::1;::::0;28342:106:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28300:148;;;;28481:7;28459:109;;;::::0;-1:-1:-1;;;28459:109:0;;9394:2:1;28459:109:0::1;::::0;::::1;9376:21:1::0;9433:2;9413:18;;;9406:30;9472:34;9452:18;;;9445:62;-1:-1:-1;;;9523:18:1;;;9516:50;9583:19;;28459:109:0::1;9366:242:1::0;28459:109:0::1;28579:17;::::0;::::1;:30:::0;;-1:-1:-1;;;;;;28579:30:0::1;28599:10;28579:30:::0;;::::1;::::0;;;28627:48:::1;::::0;;16065:25:1;;;16121:2;16106:18;;16099:60;;;;28627:48:0::1;::::0;16038:18:1;28627:48:0::1;;;;;;;19026:1:::0;19979:7;:22;28695:10;27871:842;-1:-1:-1;;;;;27871:842:0:o;13029:98::-;13087:7;13114:5;13118:1;13114;:5;:::i;:::-;13107:12;13029:98;-1:-1:-1;;;13029:98:0:o;13410:::-;13468:7;13495:5;13499:1;13495;:5;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:376::-;244:8;254:6;308:3;301:4;293:6;289:17;285:27;275:2;;333:8;323;316:26;275:2;-1:-1:-1;363:20:1;;406:18;395:30;;392:2;;;445:8;435;428:26;392:2;489:4;481:6;477:17;465:29;;541:3;534:4;525:6;517;513:19;509:30;506:39;503:2;;;558:1;555;548:12;503:2;265:303;;;;;:::o;573:196::-;632:6;685:2;673:9;664:7;660:23;656:32;653:2;;;706:6;698;691:22;653:2;734:29;753:9;734:29;:::i;774:1777::-;911:6;919;927;935;943;951;959;967;1020:3;1008:9;999:7;995:23;991:33;988:2;;;1042:6;1034;1027:22;988:2;1087:9;1074:23;1116:18;1157:2;1149:6;1146:14;1143:2;;;1178:6;1170;1163:22;1143:2;1222:59;1273:7;1264:6;1253:9;1249:22;1222:59;:::i;:::-;1300:8;;-1:-1:-1;1196:85:1;-1:-1:-1;1388:2:1;1373:18;;1360:32;;-1:-1:-1;1404:16:1;;;1401:2;;;1438:6;1430;1423:22;1401:2;1482:61;1535:7;1524:8;1513:9;1509:24;1482:61;:::i;:::-;1562:8;;-1:-1:-1;1456:87:1;-1:-1:-1;1644:2:1;1629:18;;1616:32;;-1:-1:-1;1456:87:1;;-1:-1:-1;1667:38:1;1701:2;1686:18;;1667:38;:::i;:::-;1657:48;;1752:3;1741:9;1737:19;1724:33;1714:43;;1810:3;1799:9;1795:19;1782:33;1766:49;;1840:2;1830:8;1827:16;1824:2;;;1861:6;1853;1846:22;1824:2;1904:8;1893:9;1889:24;1879:34;;1951:7;1944:4;1940:2;1936:13;1932:27;1922:2;;1978:6;1970;1963:22;1922:2;2019;2006:16;2041:2;2037;2034:10;2031:2;;;2047:18;;:::i;:::-;2122:2;2116:9;2090:2;2176:13;;-1:-1:-1;;2172:22:1;;;2196:2;2168:31;2164:40;2152:53;;;2220:18;;;2240:22;;;2217:46;2214:2;;;2266:18;;:::i;:::-;2306:10;2302:2;2295:22;2341:2;2333:6;2326:18;2381:7;2376:2;2371;2367;2363:11;2359:20;2356:33;2353:2;;;2407:6;2399;2392:22;2353:2;2468;2463;2459;2455:11;2450:2;2442:6;2438:15;2425:46;2513:6;2508:2;2503;2495:6;2491:15;2487:24;2480:40;2539:6;2529:16;;;;;;;978:1573;;;;;;;;;;;:::o;2556:190::-;2615:6;2668:2;2656:9;2647:7;2643:23;2639:32;2636:2;;;2689:6;2681;2674:22;2636:2;-1:-1:-1;2717:23:1;;2626:120;-1:-1:-1;2626:120:1:o;2751:194::-;2821:6;2874:2;2862:9;2853:7;2849:23;2845:32;2842:2;;;2895:6;2887;2880:22;2842:2;-1:-1:-1;2923:16:1;;2832:113;-1:-1:-1;2832:113:1:o;2950:264::-;3018:6;3026;3079:2;3067:9;3058:7;3054:23;3050:32;3047:2;;;3100:6;3092;3085:22;3047:2;3141:9;3128:23;3118:33;;3170:38;3204:2;3193:9;3189:18;3170:38;:::i;:::-;3160:48;;3037:177;;;;;:::o;3219:361::-;3284:6;3292;3345:2;3333:9;3324:7;3320:23;3316:32;3313:2;;;3366:6;3358;3351:22;3313:2;3407:9;3394:23;3384:33;;3467:2;3456:9;3452:18;3439:32;3514:5;3507:13;3500:21;3493:5;3490:32;3480:2;;3541:6;3533;3526:22;3480:2;3569:5;3559:15;;;3303:277;;;;;:::o;3585:475::-;3626:3;3664:5;3658:12;3691:6;3686:3;3679:19;3716:3;3728:162;3742:6;3739:1;3736:13;3728:162;;;3804:4;3860:13;;;3856:22;;3850:29;3832:11;;;3828:20;;3821:59;3757:12;3728:162;;;3908:6;3905:1;3902:13;3899:2;;;3974:3;3967:4;3958:6;3953:3;3949:16;3945:27;3938:40;3899:2;-1:-1:-1;4042:2:1;4021:15;-1:-1:-1;;4017:29:1;4008:39;;;;4049:4;4004:50;;3634:426;-1:-1:-1;;3634:426:1:o;4065:1100::-;4191:3;4220;4255:6;4249:13;4285:3;4307:1;4335:9;4331:2;4327:18;4317:28;;4395:2;4384:9;4380:18;4417;4407:2;;4461:4;4453:6;4449:17;4439:27;;4407:2;4487;4535;4527:6;4524:14;4504:18;4501:38;4498:2;;;-1:-1:-1;;;4562:33:1;;4618:4;4615:1;4608:15;4648:4;4569:3;4636:17;4498:2;4679:18;4706:104;;;;4824:1;4819:321;;;;4672:468;;4706:104;-1:-1:-1;;4739:24:1;;4727:37;;4784:16;;;;-1:-1:-1;4706:104:1;;4819:321;17040:4;17059:17;;;17109:4;17093:21;;4913:3;4929:165;4943:6;4940:1;4937:13;4929:165;;;5021:14;;5008:11;;;5001:35;5064:16;;;;4958:10;;4929:165;;;4933:3;;5123:6;5118:3;5114:16;5107:23;;4672:468;-1:-1:-1;5156:3:1;;4199:966;-1:-1:-1;;;;;;;;4199:966:1:o;5378:385::-;5610:1;5606;5601:3;5597:11;5593:19;5585:6;5581:32;5570:9;5563:51;5650:6;5645:2;5634:9;5630:18;5623:34;5693:2;5688;5677:9;5673:18;5666:30;5544:4;5713:44;5753:2;5742:9;5738:18;5730:6;5713:44;:::i;:::-;5705:52;5553:210;-1:-1:-1;;;;;5553:210:1:o;6112:217::-;6259:2;6248:9;6241:21;6222:4;6279:44;6319:2;6308:9;6304:18;6296:6;6279:44;:::i;6554:345::-;6703:2;6688:18;;6736:1;6725:13;;6715:2;;6781:10;6776:3;6772:20;6769:1;6762:31;6816:4;6813:1;6806:15;6844:4;6841:1;6834:15;6715:2;6868:25;;;6670:229;:::o;6904:1033::-;7288:4;7317:3;7347:2;7336:9;7329:21;7373:44;7413:2;7402:9;7398:18;7390:6;7373:44;:::i;:::-;7359:58;;7465:9;7457:6;7453:22;7448:2;7437:9;7433:18;7426:50;7493:32;7518:6;7510;7493:32;:::i;:::-;-1:-1:-1;;;;;7599:15:1;;;7594:2;7579:18;;7572:43;7651:15;;;;7646:2;7631:18;;7624:43;-1:-1:-1;7698:3:1;7683:19;;7676:35;;;;7552:3;7727:19;;7720:35;;;;7786:3;7771:19;;7764:35;;;;7830:3;7815:19;;7808:35;7874:3;7859:19;;7852:35;7918:3;7903:19;;;7896:35;7485:40;7297:640;-1:-1:-1;;;7297:640:1:o;11653:399::-;11855:2;11837:21;;;11894:2;11874:18;;;11867:30;11933:34;11928:2;11913:18;;11906:62;-1:-1:-1;;;11999:2:1;11984:18;;11977:33;12042:3;12027:19;;11827:225::o;16602:387::-;16789:25;;;-1:-1:-1;;;;;16850:32:1;;16845:2;16830:18;;16823:60;16919:2;16914;16899:18;;16892:30;;;-1:-1:-1;;16939:44:1;;16964:18;;16956:6;16939:44;:::i;17125:128::-;17165:3;17196:1;17192:6;17189:1;17186:13;17183:2;;;17202:18;;:::i;:::-;-1:-1:-1;17238:9:1;;17173:80::o;17258:125::-;17298:4;17326:1;17323;17320:8;17317:2;;;17331:18;;:::i;:::-;-1:-1:-1;17368:9:1;;17307:76::o;17388:380::-;17467:1;17463:12;;;;17510;;;17531:2;;17585:4;17577:6;17573:17;17563:27;;17531:2;17638;17630:6;17627:14;17607:18;17604:38;17601:2;;;17684:10;17679:3;17675:20;17672:1;17665:31;17719:4;17716:1;17709:15;17747:4;17744:1;17737:15;17773:135;17812:3;-1:-1:-1;;17833:17:1;;17830:2;;;17853:18;;:::i;:::-;-1:-1:-1;17900:1:1;17889:13;;17820:88::o;17913:127::-;17974:10;17969:3;17965:20;17962:1;17955:31;18005:4;18002:1;17995:15;18029:4;18026:1;18019:15;18045:127;18106:10;18101:3;18097:20;18094:1;18087:31;18137:4;18134:1;18127:15;18161:4;18158:1;18151:15
Swarm Source
ipfs://6845c4d8a9bdd0d955becdba3f4f38b291d8adcecb79eb0b26a4527c633867bd
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.