Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 10305779 | 2105 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Moloch
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-06-21
*/
pragma solidity 0.5.17;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @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) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @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 sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @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) {
// 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 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* 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) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* 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) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts 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 mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @dev 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].
*/
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 () internal {
_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;
}
}
contract Moloch is ReentrancyGuard {
using SafeMath for uint256;
/***************
GLOBAL CONSTANTS
***************/
uint256 public periodDuration; // default = 17280 = 4.8 hours in seconds (5 periods per day)
uint256 public votingPeriodLength; // default = 35 periods (7 days)
uint256 public gracePeriodLength; // default = 35 periods (7 days)
uint256 public proposalDeposit; // default = 10 ETH (~$1,000 worth of ETH at contract deployment)
uint256 public dilutionBound; // default = 3 - maximum multiplier a YES voter will be obligated to pay in case of mass ragequit
uint256 public processingReward; // default = 0.1 - amount of ETH to give to whoever processes a proposal
uint256 public summoningTime; // needed to determine the current period
address public depositToken; // deposit token contract reference; default = wETH
// HARD-CODED LIMITS
// These numbers are quite arbitrary; they are small enough to avoid overflows when doing calculations
// with periods or shares, yet big enough to not limit reasonable use cases.
uint256 constant MAX_VOTING_PERIOD_LENGTH = 10**18; // maximum length of voting period
uint256 constant MAX_GRACE_PERIOD_LENGTH = 10**18; // maximum length of grace period
uint256 constant MAX_DILUTION_BOUND = 10**18; // maximum dilution bound
uint256 constant MAX_NUMBER_OF_SHARES_AND_LOOT = 10**18; // maximum number of shares that can be minted
uint256 constant MAX_TOKEN_WHITELIST_COUNT = 400; // maximum number of whitelisted tokens
uint256 constant MAX_TOKEN_GUILDBANK_COUNT = 200; // maximum number of tokens with non-zero balance in guildbank
// ***************
// EVENTS
// ***************
event SummonComplete(address[] indexed summoners, address[] tokens, uint256 summoningTime, uint256 periodDuration, uint256 votingPeriodLength, uint256 gracePeriodLength, uint256 proposalDeposit, uint256 dilutionBound, uint256 processingReward);
event SubmitProposal(address indexed applicant, uint256 sharesRequested, uint256 lootRequested, uint256 tributeOffered, address tributeToken, uint256 paymentRequested, address paymentToken, string details, bool[6] flags, uint256 proposalId, address indexed delegateKey, address indexed memberAddress);
event SponsorProposal(address indexed delegateKey, address indexed memberAddress, uint256 proposalId, uint256 proposalIndex, uint256 startingPeriod);
event SubmitVote(uint256 proposalId, uint256 indexed proposalIndex, address indexed delegateKey, address indexed memberAddress, uint8 uintVote);
event ProcessProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
event ProcessWhitelistProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
event ProcessGuildKickProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
event Ragequit(address indexed memberAddress, uint256 sharesToBurn, uint256 lootToBurn);
event TokensCollected(address indexed token, uint256 amountToCollect);
event CancelProposal(uint256 indexed proposalId, address applicantAddress);
event UpdateDelegateKey(address indexed memberAddress, address newDelegateKey);
event Withdraw(address indexed memberAddress, address token, uint256 amount);
// *******************
// INTERNAL ACCOUNTING
// *******************
uint256 public proposalCount = 0; // total proposals submitted
uint256 public totalShares = 0; // total shares across all members
uint256 public totalLoot = 0; // total loot across all members
uint256 public totalGuildBankTokens = 0; // total tokens with non-zero balance in guild bank
address public constant GUILD = address(0xdead);
address public constant ESCROW = address(0xbeef);
address public constant TOTAL = address(0xbabe);
mapping (address => mapping(address => uint256)) public userTokenBalances; // userTokenBalances[userAddress][tokenAddress]
enum Vote {
Null, // default value, counted as abstention
Yes,
No
}
struct Member {
address delegateKey; // the key responsible for submitting proposals and voting - defaults to member address unless updated
uint256 shares; // the # of voting shares assigned to this member
uint256 loot; // the loot amount available to this member (combined with shares on ragequit)
bool exists; // always true once a member has been created
uint256 highestIndexYesVote; // highest proposal index # on which the member voted YES
uint256 jailed; // set to proposalIndex of a passing guild kick proposal for this member, prevents voting on and sponsoring proposals
}
struct Proposal {
address applicant; // the applicant who wishes to become a member - this key will be used for withdrawals (doubles as guild kick target for gkick proposals)
address proposer; // the account that submitted the proposal (can be non-member)
address sponsor; // the member that sponsored the proposal (moving it into the queue)
uint256 sharesRequested; // the # of shares the applicant is requesting
uint256 lootRequested; // the amount of loot the applicant is requesting
uint256 tributeOffered; // amount of tokens offered as tribute
address tributeToken; // tribute token contract reference
uint256 paymentRequested; // amount of tokens requested as payment
address paymentToken; // payment token contract reference
uint256 startingPeriod; // the period in which voting can start for this proposal
uint256 yesVotes; // the total number of YES votes for this proposal
uint256 noVotes; // the total number of NO votes for this proposal
bool[6] flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick]
string details; // proposal details - could be IPFS hash, plaintext, or JSON
uint256 maxTotalSharesAndLootAtYesVote; // the maximum # of total shares encountered at a yes vote on this proposal
mapping(address => Vote) votesByMember; // the votes on this proposal by each member
}
mapping(address => bool) public tokenWhitelist;
address[] public approvedTokens;
mapping(address => bool) public proposedToWhitelist;
mapping(address => bool) public proposedToKick;
mapping(address => Member) public members;
mapping(address => address) public memberAddressByDelegateKey;
mapping(uint256 => Proposal) public proposals;
uint256[] public proposalQueue;
modifier onlyMember {
require(members[msg.sender].shares > 0 || members[msg.sender].loot > 0, "not a member");
_;
}
modifier onlyShareholder {
require(members[msg.sender].shares > 0, "not a shareholder");
_;
}
modifier onlyDelegate {
require(members[memberAddressByDelegateKey[msg.sender]].shares > 0, "not a delegate");
_;
}
constructor(
address[] memory _summoners,
address[] memory _approvedTokens,
uint256 _periodDuration,
uint256 _votingPeriodLength,
uint256 _gracePeriodLength,
uint256 _proposalDeposit,
uint256 _dilutionBound,
uint256 _processingReward
) public {
require(_periodDuration > 0, "_periodDuration cannot be 0");
require(_votingPeriodLength > 0, "_votingPeriodLength cannot be 0");
require(_votingPeriodLength <= MAX_VOTING_PERIOD_LENGTH, "_votingPeriodLength exceeds limit");
require(_gracePeriodLength <= MAX_GRACE_PERIOD_LENGTH, "_gracePeriodLength exceeds limit");
require(_dilutionBound > 0, "_dilutionBound cannot be 0");
require(_dilutionBound <= MAX_DILUTION_BOUND, "_dilutionBound exceeds limit");
require(_approvedTokens.length > 0, "need at least one approved token");
require(_approvedTokens.length <= MAX_TOKEN_WHITELIST_COUNT, "too many tokens");
require(_proposalDeposit >= _processingReward, "_proposalDeposit cannot be smaller than _processingReward");
depositToken = _approvedTokens[0];
// NOTE: move event up here, avoid stack too deep if too many approved tokens
emit SummonComplete(_summoners, _approvedTokens, now, _periodDuration, _votingPeriodLength, _gracePeriodLength, _proposalDeposit, _dilutionBound, _processingReward);
for (uint256 i = 0; i < _summoners.length; i++) {
require(_summoners[i] != address(0), "summoner cannot be 0");
members[_summoners[i]] = Member(_summoners[i], 1, 0, true, 0, 0);
memberAddressByDelegateKey[_summoners[i]] = _summoners[i];
}
for (uint256 i = 0; i < _approvedTokens.length; i++) {
require(_approvedTokens[i] != address(0), "_approvedToken cannot be 0");
require(!tokenWhitelist[_approvedTokens[i]], "duplicate approved token");
tokenWhitelist[_approvedTokens[i]] = true;
approvedTokens.push(_approvedTokens[i]);
}
periodDuration = _periodDuration;
votingPeriodLength = _votingPeriodLength;
gracePeriodLength = _gracePeriodLength;
proposalDeposit = _proposalDeposit;
dilutionBound = _dilutionBound;
processingReward = _processingReward;
summoningTime = now;
totalShares = _summoners.length;
}
/*****************
PROPOSAL FUNCTIONS
*****************/
function submitProposal(
address applicant,
uint256 sharesRequested,
uint256 lootRequested,
uint256 tributeOffered,
address tributeToken,
uint256 paymentRequested,
address paymentToken,
string memory details
) public nonReentrant returns (uint256 proposalId) {
require(sharesRequested.add(lootRequested) <= MAX_NUMBER_OF_SHARES_AND_LOOT, "too many shares requested");
require(tokenWhitelist[tributeToken], "tributeToken is not whitelisted");
require(tokenWhitelist[paymentToken], "payment is not whitelisted");
require(applicant != address(0), "applicant cannot be 0");
require(applicant != GUILD && applicant != ESCROW && applicant != TOTAL, "applicant address cannot be reserved");
require(members[applicant].jailed == 0, "proposal applicant must not be jailed");
if (tributeOffered > 0 && userTokenBalances[GUILD][tributeToken] == 0) {
require(totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT, 'cannot submit more tribute proposals for new tokens - guildbank is full');
}
// collect tribute from proposer and store it in the Moloch until the proposal is processed
require(IERC20(tributeToken).transferFrom(msg.sender, address(this), tributeOffered), "tribute token transfer failed");
unsafeAddToBalance(ESCROW, tributeToken, tributeOffered);
bool[6] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick]
_submitProposal(applicant, sharesRequested, lootRequested, tributeOffered, tributeToken, paymentRequested, paymentToken, details, flags);
return proposalCount - 1; // return proposalId - contracts calling submit might want it
}
function submitWhitelistProposal(address tokenToWhitelist, string memory details) public nonReentrant returns (uint256 proposalId) {
require(tokenToWhitelist != address(0), "must provide token address");
require(!tokenWhitelist[tokenToWhitelist], "cannot already have whitelisted the token");
require(approvedTokens.length < MAX_TOKEN_WHITELIST_COUNT, "cannot submit more whitelist proposals");
bool[6] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick]
flags[4] = true; // whitelist
_submitProposal(address(0), 0, 0, 0, tokenToWhitelist, 0, address(0), details, flags);
return proposalCount - 1;
}
function submitGuildKickProposal(address memberToKick, string memory details) public nonReentrant returns (uint256 proposalId) {
Member memory member = members[memberToKick];
require(member.shares > 0 || member.loot > 0, "member must have at least one share or one loot");
require(members[memberToKick].jailed == 0, "member must not already be jailed");
bool[6] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick]
flags[5] = true; // guild kick
_submitProposal(memberToKick, 0, 0, 0, address(0), 0, address(0), details, flags);
return proposalCount - 1;
}
function _submitProposal(
address applicant,
uint256 sharesRequested,
uint256 lootRequested,
uint256 tributeOffered,
address tributeToken,
uint256 paymentRequested,
address paymentToken,
string memory details,
bool[6] memory flags
) internal {
Proposal memory proposal = Proposal({
applicant : applicant,
proposer : msg.sender,
sponsor : address(0),
sharesRequested : sharesRequested,
lootRequested : lootRequested,
tributeOffered : tributeOffered,
tributeToken : tributeToken,
paymentRequested : paymentRequested,
paymentToken : paymentToken,
startingPeriod : 0,
yesVotes : 0,
noVotes : 0,
flags : flags,
details : details,
maxTotalSharesAndLootAtYesVote : 0
});
proposals[proposalCount] = proposal;
address memberAddress = memberAddressByDelegateKey[msg.sender];
// NOTE: argument order matters, avoid stack too deep
emit SubmitProposal(applicant, sharesRequested, lootRequested, tributeOffered, tributeToken, paymentRequested, paymentToken, details, flags, proposalCount, msg.sender, memberAddress);
proposalCount += 1;
}
function sponsorProposal(uint256 proposalId) public nonReentrant onlyDelegate {
// collect proposal deposit from sponsor and store it in the Moloch until the proposal is processed
require(IERC20(depositToken).transferFrom(msg.sender, address(this), proposalDeposit), "proposal deposit token transfer failed");
unsafeAddToBalance(ESCROW, depositToken, proposalDeposit);
Proposal storage proposal = proposals[proposalId];
require(proposal.proposer != address(0), 'proposal must have been proposed');
require(!proposal.flags[0], "proposal has already been sponsored");
require(!proposal.flags[3], "proposal has been cancelled");
require(members[proposal.applicant].jailed == 0, "proposal applicant must not be jailed");
if (proposal.tributeOffered > 0 && userTokenBalances[GUILD][proposal.tributeToken] == 0) {
require(totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT, 'cannot sponsor more tribute proposals for new tokens - guildbank is full');
}
// whitelist proposal
if (proposal.flags[4]) {
require(!tokenWhitelist[address(proposal.tributeToken)], "cannot already have whitelisted the token");
require(!proposedToWhitelist[address(proposal.tributeToken)], 'already proposed to whitelist');
require(approvedTokens.length < MAX_TOKEN_WHITELIST_COUNT, "cannot sponsor more whitelist proposals");
proposedToWhitelist[address(proposal.tributeToken)] = true;
// guild kick proposal
} else if (proposal.flags[5]) {
require(!proposedToKick[proposal.applicant], 'already proposed to kick');
proposedToKick[proposal.applicant] = true;
}
// compute startingPeriod for proposal
uint256 startingPeriod = max(
getCurrentPeriod(),
proposalQueue.length == 0 ? 0 : proposals[proposalQueue[proposalQueue.length.sub(1)]].startingPeriod
).add(1);
proposal.startingPeriod = startingPeriod;
address memberAddress = memberAddressByDelegateKey[msg.sender];
proposal.sponsor = memberAddress;
proposal.flags[0] = true; // sponsored
// append proposal to the queue
proposalQueue.push(proposalId);
emit SponsorProposal(msg.sender, memberAddress, proposalId, proposalQueue.length.sub(1), startingPeriod);
}
// NOTE: In MolochV2 proposalIndex !== proposalId
function submitVote(uint256 proposalIndex, uint8 uintVote) public nonReentrant onlyDelegate {
address memberAddress = memberAddressByDelegateKey[msg.sender];
Member storage member = members[memberAddress];
require(proposalIndex < proposalQueue.length, "proposal does not exist");
Proposal storage proposal = proposals[proposalQueue[proposalIndex]];
require(uintVote < 3, "must be less than 3");
Vote vote = Vote(uintVote);
require(getCurrentPeriod() >= proposal.startingPeriod, "voting period has not started");
require(!hasVotingPeriodExpired(proposal.startingPeriod), "proposal voting period has expired");
require(proposal.votesByMember[memberAddress] == Vote.Null, "member has already voted");
require(vote == Vote.Yes || vote == Vote.No, "vote must be either Yes or No");
proposal.votesByMember[memberAddress] = vote;
if (vote == Vote.Yes) {
proposal.yesVotes = proposal.yesVotes.add(member.shares);
// set highest index (latest) yes vote - must be processed for member to ragequit
if (proposalIndex > member.highestIndexYesVote) {
member.highestIndexYesVote = proposalIndex;
}
// set maximum of total shares encountered at a yes vote - used to bound dilution for yes voters
if (totalShares.add(totalLoot) > proposal.maxTotalSharesAndLootAtYesVote) {
proposal.maxTotalSharesAndLootAtYesVote = totalShares.add(totalLoot);
}
} else if (vote == Vote.No) {
proposal.noVotes = proposal.noVotes.add(member.shares);
}
// NOTE: subgraph indexes by proposalId not proposalIndex since proposalIndex isn't set untill it's been sponsored but proposal is created on submission
emit SubmitVote(proposalQueue[proposalIndex], proposalIndex, msg.sender, memberAddress, uintVote);
}
function processProposal(uint256 proposalIndex) public nonReentrant {
_validateProposalForProcessing(proposalIndex);
uint256 proposalId = proposalQueue[proposalIndex];
Proposal storage proposal = proposals[proposalId];
require(!proposal.flags[4] && !proposal.flags[5], "must be a standard proposal");
proposal.flags[1] = true; // processed
bool didPass = _didPass(proposalIndex);
// Make the proposal fail if the new total number of shares and loot exceeds the limit
if (totalShares.add(totalLoot).add(proposal.sharesRequested).add(proposal.lootRequested) > MAX_NUMBER_OF_SHARES_AND_LOOT) {
didPass = false;
}
// Make the proposal fail if it is requesting more tokens as payment than the available guild bank balance
if (proposal.paymentRequested > userTokenBalances[GUILD][proposal.paymentToken]) {
didPass = false;
}
// Make the proposal fail if it would result in too many tokens with non-zero balance in guild bank
if (proposal.tributeOffered > 0 && userTokenBalances[GUILD][proposal.tributeToken] == 0 && totalGuildBankTokens >= MAX_TOKEN_GUILDBANK_COUNT) {
didPass = false;
}
// PROPOSAL PASSED
if (didPass) {
proposal.flags[2] = true; // didPass
// if the applicant is already a member, add to their existing shares & loot
if (members[proposal.applicant].exists) {
members[proposal.applicant].shares = members[proposal.applicant].shares.add(proposal.sharesRequested);
members[proposal.applicant].loot = members[proposal.applicant].loot.add(proposal.lootRequested);
// the applicant is a new member, create a new record for them
} else {
// if the applicant address is already taken by a member's delegateKey, reset it to their member address
if (members[memberAddressByDelegateKey[proposal.applicant]].exists) {
address memberToOverride = memberAddressByDelegateKey[proposal.applicant];
memberAddressByDelegateKey[memberToOverride] = memberToOverride;
members[memberToOverride].delegateKey = memberToOverride;
}
// use applicant address as delegateKey by default
members[proposal.applicant] = Member(proposal.applicant, proposal.sharesRequested, proposal.lootRequested, true, 0, 0);
memberAddressByDelegateKey[proposal.applicant] = proposal.applicant;
}
// mint new shares & loot
totalShares = totalShares.add(proposal.sharesRequested);
totalLoot = totalLoot.add(proposal.lootRequested);
// if the proposal tribute is the first tokens of its kind to make it into the guild bank, increment total guild bank tokens
if (userTokenBalances[GUILD][proposal.tributeToken] == 0 && proposal.tributeOffered > 0) {
totalGuildBankTokens += 1;
}
unsafeInternalTransfer(ESCROW, GUILD, proposal.tributeToken, proposal.tributeOffered);
unsafeInternalTransfer(GUILD, proposal.applicant, proposal.paymentToken, proposal.paymentRequested);
// if the proposal spends 100% of guild bank balance for a token, decrement total guild bank tokens
if (userTokenBalances[GUILD][proposal.paymentToken] == 0 && proposal.paymentRequested > 0) {
totalGuildBankTokens -= 1;
}
// PROPOSAL FAILED
} else {
// return all tokens to the proposer (not the applicant, because funds come from proposer)
unsafeInternalTransfer(ESCROW, proposal.proposer, proposal.tributeToken, proposal.tributeOffered);
}
_returnDeposit(proposal.sponsor);
emit ProcessProposal(proposalIndex, proposalId, didPass);
}
function processWhitelistProposal(uint256 proposalIndex) public nonReentrant {
_validateProposalForProcessing(proposalIndex);
uint256 proposalId = proposalQueue[proposalIndex];
Proposal storage proposal = proposals[proposalId];
require(proposal.flags[4], "must be a whitelist proposal");
proposal.flags[1] = true; // processed
bool didPass = _didPass(proposalIndex);
if (approvedTokens.length >= MAX_TOKEN_WHITELIST_COUNT) {
didPass = false;
}
if (didPass) {
proposal.flags[2] = true; // didPass
tokenWhitelist[address(proposal.tributeToken)] = true;
approvedTokens.push(proposal.tributeToken);
}
proposedToWhitelist[address(proposal.tributeToken)] = false;
_returnDeposit(proposal.sponsor);
emit ProcessWhitelistProposal(proposalIndex, proposalId, didPass);
}
function processGuildKickProposal(uint256 proposalIndex) public nonReentrant {
_validateProposalForProcessing(proposalIndex);
uint256 proposalId = proposalQueue[proposalIndex];
Proposal storage proposal = proposals[proposalId];
require(proposal.flags[5], "must be a guild kick proposal");
proposal.flags[1] = true; // processed
bool didPass = _didPass(proposalIndex);
if (didPass) {
proposal.flags[2] = true; // didPass
Member storage member = members[proposal.applicant];
member.jailed = proposalIndex;
// transfer shares to loot
member.loot = member.loot.add(member.shares);
totalShares = totalShares.sub(member.shares);
totalLoot = totalLoot.add(member.shares);
member.shares = 0; // revoke all shares
}
proposedToKick[proposal.applicant] = false;
_returnDeposit(proposal.sponsor);
emit ProcessGuildKickProposal(proposalIndex, proposalId, didPass);
}
function _didPass(uint256 proposalIndex) internal view returns (bool didPass) {
Proposal memory proposal = proposals[proposalQueue[proposalIndex]];
didPass = proposal.yesVotes > proposal.noVotes;
// Make the proposal fail if the dilutionBound is exceeded
if ((totalShares.add(totalLoot)).mul(dilutionBound) < proposal.maxTotalSharesAndLootAtYesVote) {
didPass = false;
}
// Make the proposal fail if the applicant is jailed
// - for standard proposals, we don't want the applicant to get any shares/loot/payment
// - for guild kick proposals, we should never be able to propose to kick a jailed member (or have two kick proposals active), so it doesn't matter
if (members[proposal.applicant].jailed != 0) {
didPass = false;
}
return didPass;
}
function _validateProposalForProcessing(uint256 proposalIndex) internal view {
require(proposalIndex < proposalQueue.length, "proposal does not exist");
Proposal memory proposal = proposals[proposalQueue[proposalIndex]];
require(getCurrentPeriod() >= proposal.startingPeriod.add(votingPeriodLength).add(gracePeriodLength), "proposal is not ready to be processed");
require(proposal.flags[1] == false, "proposal has already been processed");
require(proposalIndex == 0 || proposals[proposalQueue[proposalIndex.sub(1)]].flags[1], "previous proposal must be processed");
}
function _returnDeposit(address sponsor) internal {
unsafeInternalTransfer(ESCROW, msg.sender, depositToken, processingReward);
unsafeInternalTransfer(ESCROW, sponsor, depositToken, proposalDeposit.sub(processingReward));
}
function ragequit(uint256 sharesToBurn, uint256 lootToBurn) public nonReentrant onlyMember {
_ragequit(msg.sender, sharesToBurn, lootToBurn);
}
function _ragequit(address memberAddress, uint256 sharesToBurn, uint256 lootToBurn) internal {
uint256 initialTotalSharesAndLoot = totalShares.add(totalLoot);
Member storage member = members[memberAddress];
require(member.shares >= sharesToBurn, "insufficient shares");
require(member.loot >= lootToBurn, "insufficient loot");
require(canRagequit(member.highestIndexYesVote), "cannot ragequit until highest index proposal member voted YES on is processed");
uint256 sharesAndLootToBurn = sharesToBurn.add(lootToBurn);
// burn shares and loot
member.shares = member.shares.sub(sharesToBurn);
member.loot = member.loot.sub(lootToBurn);
totalShares = totalShares.sub(sharesToBurn);
totalLoot = totalLoot.sub(lootToBurn);
for (uint256 i = 0; i < approvedTokens.length; i++) {
uint256 amountToRagequit = fairShare(userTokenBalances[GUILD][approvedTokens[i]], sharesAndLootToBurn, initialTotalSharesAndLoot);
if (amountToRagequit > 0) { // gas optimization to allow a higher maximum token limit
// deliberately not using safemath here to keep overflows from preventing the function execution (which would break ragekicks)
// if a token overflows, it is because the supply was artificially inflated to oblivion, so we probably don't care about it anyways
userTokenBalances[GUILD][approvedTokens[i]] -= amountToRagequit;
userTokenBalances[memberAddress][approvedTokens[i]] += amountToRagequit;
}
}
emit Ragequit(msg.sender, sharesToBurn, lootToBurn);
}
function ragekick(address memberToKick) public nonReentrant {
Member storage member = members[memberToKick];
require(member.jailed != 0, "member must be in jail");
require(member.loot > 0, "member must have some loot"); // note - should be impossible for jailed member to have shares
require(canRagequit(member.highestIndexYesVote), "cannot ragequit until highest index proposal member voted YES on is processed");
_ragequit(memberToKick, 0, member.loot);
}
function withdrawBalance(address token, uint256 amount) public nonReentrant {
_withdrawBalance(token, amount);
}
function withdrawBalances(address[] memory tokens, uint256[] memory amounts, bool max) public nonReentrant {
require(tokens.length == amounts.length, "tokens and amounts arrays must be matching lengths");
for (uint256 i=0; i < tokens.length; i++) {
uint256 withdrawAmount = amounts[i];
if (max) { // withdraw the maximum balance
withdrawAmount = userTokenBalances[msg.sender][tokens[i]];
}
_withdrawBalance(tokens[i], withdrawAmount);
}
}
function _withdrawBalance(address token, uint256 amount) internal {
require(userTokenBalances[msg.sender][token] >= amount, "insufficient balance");
unsafeSubtractFromBalance(msg.sender, token, amount);
require(IERC20(token).transfer(msg.sender, amount), "transfer failed");
emit Withdraw(msg.sender, token, amount);
}
function collectTokens(address token) public onlyDelegate nonReentrant {
uint256 amountToCollect = IERC20(token).balanceOf(address(this)).sub(userTokenBalances[TOTAL][token]);
// only collect if 1) there are tokens to collect 2) token is whitelisted 3) token has non-zero balance
require(amountToCollect > 0, 'no tokens to collect');
require(tokenWhitelist[token], 'token to collect must be whitelisted');
require(userTokenBalances[GUILD][token] > 0, 'token to collect must have non-zero guild bank balance');
unsafeAddToBalance(GUILD, token, amountToCollect);
emit TokensCollected(token, amountToCollect);
}
// NOTE: requires that delegate key which sent the original proposal cancels, msg.sender == proposal.proposer
function cancelProposal(uint256 proposalId) public nonReentrant {
Proposal storage proposal = proposals[proposalId];
require(!proposal.flags[0], "proposal has already been sponsored");
require(!proposal.flags[3], "proposal has already been cancelled");
require(msg.sender == proposal.proposer, "solely the proposer can cancel");
proposal.flags[3] = true; // cancelled
unsafeInternalTransfer(ESCROW, proposal.proposer, proposal.tributeToken, proposal.tributeOffered);
emit CancelProposal(proposalId, msg.sender);
}
function updateDelegateKey(address newDelegateKey) public nonReentrant onlyShareholder {
require(newDelegateKey != address(0), "newDelegateKey cannot be 0");
// skip checks if member is setting the delegate key to their member address
if (newDelegateKey != msg.sender) {
require(!members[newDelegateKey].exists, "cannot overwrite existing members");
require(!members[memberAddressByDelegateKey[newDelegateKey]].exists, "cannot overwrite existing delegate keys");
}
Member storage member = members[msg.sender];
memberAddressByDelegateKey[member.delegateKey] = address(0);
memberAddressByDelegateKey[newDelegateKey] = msg.sender;
member.delegateKey = newDelegateKey;
emit UpdateDelegateKey(msg.sender, newDelegateKey);
}
// can only ragequit if the latest proposal you voted YES on has been processed
function canRagequit(uint256 highestIndexYesVote) public view returns (bool) {
require(highestIndexYesVote < proposalQueue.length, "proposal does not exist");
return proposals[proposalQueue[highestIndexYesVote]].flags[1];
}
function hasVotingPeriodExpired(uint256 startingPeriod) public view returns (bool) {
return getCurrentPeriod() >= startingPeriod.add(votingPeriodLength);
}
/***************
GETTER FUNCTIONS
***************/
function max(uint256 x, uint256 y) internal pure returns (uint256) {
return x >= y ? x : y;
}
function getCurrentPeriod() public view returns (uint256) {
return now.sub(summoningTime).div(periodDuration);
}
function getProposalQueueLength() public view returns (uint256) {
return proposalQueue.length;
}
function getProposalFlags(uint256 proposalId) public view returns (bool[6] memory) {
return proposals[proposalId].flags;
}
function getUserTokenBalance(address user, address token) public view returns (uint256) {
return userTokenBalances[user][token];
}
function getMemberProposalVote(address memberAddress, uint256 proposalIndex) public view returns (Vote) {
require(members[memberAddress].exists, "member does not exist");
require(proposalIndex < proposalQueue.length, "proposal does not exist");
return proposals[proposalQueue[proposalIndex]].votesByMember[memberAddress];
}
function getTokenCount() public view returns (uint256) {
return approvedTokens.length;
}
/***************
HELPER FUNCTIONS
***************/
function unsafeAddToBalance(address user, address token, uint256 amount) internal {
userTokenBalances[user][token] += amount;
userTokenBalances[TOTAL][token] += amount;
}
function unsafeSubtractFromBalance(address user, address token, uint256 amount) internal {
userTokenBalances[user][token] -= amount;
userTokenBalances[TOTAL][token] -= amount;
}
function unsafeInternalTransfer(address from, address to, address token, uint256 amount) internal {
unsafeSubtractFromBalance(from, token, amount);
unsafeAddToBalance(to, token, amount);
}
function fairShare(uint256 balance, uint256 shares, uint256 totalSharesAndLoot) internal pure returns (uint256) {
require(totalSharesAndLoot != 0);
if (balance == 0) { return 0; }
uint256 prod = balance * shares;
if (prod / balance == shares) { // no overflow in multiplication above?
return prod / totalSharesAndLoot;
}
return (balance / totalSharesAndLoot) * shares;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"_summoners","type":"address[]"},{"internalType":"address[]","name":"_approvedTokens","type":"address[]"},{"internalType":"uint256","name":"_periodDuration","type":"uint256"},{"internalType":"uint256","name":"_votingPeriodLength","type":"uint256"},{"internalType":"uint256","name":"_gracePeriodLength","type":"uint256"},{"internalType":"uint256","name":"_proposalDeposit","type":"uint256"},{"internalType":"uint256","name":"_dilutionBound","type":"uint256"},{"internalType":"uint256","name":"_processingReward","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"applicantAddress","type":"address"}],"name":"CancelProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessGuildKickProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessWhitelistProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesToBurn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lootToBurn","type":"uint256"}],"name":"Ragequit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startingPeriod","type":"uint256"}],"name":"SponsorProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"applicant","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lootRequested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"indexed":false,"internalType":"address","name":"tributeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"indexed":false,"internalType":"address","name":"paymentToken","type":"address"},{"indexed":false,"internalType":"string","name":"details","type":"string"},{"indexed":false,"internalType":"bool[6]","name":"flags","type":"bool[6]"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"}],"name":"SubmitProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint8","name":"uintVote","type":"uint8"}],"name":"SubmitVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"summoners","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"summoningTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"periodDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"votingPeriodLength","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gracePeriodLength","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalDeposit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dilutionBound","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"processingReward","type":"uint256"}],"name":"SummonComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountToCollect","type":"uint256"}],"name":"TokensCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newDelegateKey","type":"address"}],"name":"UpdateDelegateKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"constant":true,"inputs":[],"name":"ESCROW","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GUILD","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"approvedTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"}],"name":"canRagequit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancelProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"collectTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"depositToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dilutionBound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"memberAddress","type":"address"},{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"getMemberProposalVote","outputs":[{"internalType":"enum Moloch.Vote","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getProposalFlags","outputs":[{"internalType":"bool[6]","name":"","type":"bool[6]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getProposalQueueLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"getUserTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gracePeriodLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"startingPeriod","type":"uint256"}],"name":"hasVotingPeriodExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"memberAddressByDelegateKey","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"members","outputs":[{"internalType":"address","name":"delegateKey","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"loot","type":"uint256"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"},{"internalType":"uint256","name":"jailed","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processGuildKickProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processWhitelistProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"processingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"address","name":"applicant","type":"address"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"address","name":"sponsor","type":"address"},{"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"internalType":"uint256","name":"lootRequested","type":"uint256"},{"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"internalType":"address","name":"tributeToken","type":"address"},{"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"uint256","name":"startingPeriod","type":"uint256"},{"internalType":"uint256","name":"yesVotes","type":"uint256"},{"internalType":"uint256","name":"noVotes","type":"uint256"},{"internalType":"string","name":"details","type":"string"},{"internalType":"uint256","name":"maxTotalSharesAndLootAtYesVote","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proposedToKick","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proposedToWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"memberToKick","type":"address"}],"name":"ragekick","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"sharesToBurn","type":"uint256"},{"internalType":"uint256","name":"lootToBurn","type":"uint256"}],"name":"ragequit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"sponsorProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"memberToKick","type":"address"},{"internalType":"string","name":"details","type":"string"}],"name":"submitGuildKickProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"applicant","type":"address"},{"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"internalType":"uint256","name":"lootRequested","type":"uint256"},{"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"internalType":"address","name":"tributeToken","type":"address"},{"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"string","name":"details","type":"string"}],"name":"submitProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"internalType":"uint8","name":"uintVote","type":"uint8"}],"name":"submitVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenToWhitelist","type":"address"},{"internalType":"string","name":"details","type":"string"}],"name":"submitWhitelistProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"summoningTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalGuildBankTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalLoot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newDelegateKey","type":"address"}],"name":"updateDelegateKey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userTokenBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriodLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bool","name":"max","type":"bool"}],"name":"withdrawBalances","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405260006009556000600a556000600b556000600c553480156200002557600080fd5b5060405162005ad338038062005ad383398181016040526101008110156200004c57600080fd5b81019080805160405193929190846401000000008211156200006d57600080fd5b9083019060208201858111156200008357600080fd5b8251866020820283011164010000000082111715620000a157600080fd5b82525081516020918201928201910280838360005b83811015620000d0578181015183820152602001620000b6565b5050505090500160405260200180516040519392919084640100000000821115620000fa57600080fd5b9083019060208201858111156200011057600080fd5b82518660208202830111640100000000821117156200012e57600080fd5b82525081516020918201928201910280838360005b838110156200015d57818101518382015260200162000143565b505050509190910160409081526020830151908301516060840151608085015160a086015160c0909601516001600055939750919550939092509085620001eb576040805162461bcd60e51b815260206004820152601b60248201527f5f706572696f644475726174696f6e2063616e6e6f7420626520300000000000604482015290519081900360640190fd5b6000851162000241576040805162461bcd60e51b815260206004820152601f60248201527f5f766f74696e67506572696f644c656e6774682063616e6e6f74206265203000604482015290519081900360640190fd5b670de0b6b3a76400008511156200028a5760405162461bcd60e51b815260040180806020018281038252602181526020018062005a796021913960400191505060405180910390fd5b670de0b6b3a7640000841115620002e8576040805162461bcd60e51b815260206004820181905260248201527f5f6772616365506572696f644c656e6774682065786365656473206c696d6974604482015290519081900360640190fd5b600082116200033e576040805162461bcd60e51b815260206004820152601a60248201527f5f64696c7574696f6e426f756e642063616e6e6f742062652030000000000000604482015290519081900360640190fd5b670de0b6b3a76400008211156200039c576040805162461bcd60e51b815260206004820152601c60248201527f5f64696c7574696f6e426f756e642065786365656473206c696d697400000000604482015290519081900360640190fd5b6000875111620003f3576040805162461bcd60e51b815260206004820181905260248201527f6e656564206174206c65617374206f6e6520617070726f76656420746f6b656e604482015290519081900360640190fd5b610190875111156200043e576040805162461bcd60e51b815260206004820152600f60248201526e746f6f206d616e7920746f6b656e7360881b604482015290519081900360640190fd5b808310156200047f5760405162461bcd60e51b815260040180806020018281038252603981526020018062005a9a6039913960400191505060405180910390fd5b866000815181106200048d57fe5b6020026020010151600860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508760405180828051906020019060200280838360005b83811015620004eb578181015183820152602001620004d1565b5050505090500191505060405180910390207f2a8214e48a490ec27a213653fe2c4d1efbcdc572f82d1d3d3d040665024e50aa8842898989898989604051808060200189815260200188815260200187815260200186815260200185815260200184815260200183815260200182810382528a818151815260200191508051906020019060200280838360005b838110156200059257818101518382015260200162000578565b50505050905001995050505050505050505060405180910390a260005b8851811015620007815760006001600160a01b0316898281518110620005d157fe5b60200260200101516001600160a01b0316141562000636576040805162461bcd60e51b815260206004820152601460248201527f73756d6d6f6e65722063616e6e6f742062652030000000000000000000000000604482015290519081900360640190fd5b6040518060c001604052808a83815181106200064e57fe5b60200260200101516001600160a01b031681526020016001815260200160008152602001600115158152602001600081526020016000815250601260008b84815181106200069857fe5b6020908102919091018101516001600160a01b039081168352828201939093526040918201600020845181546001600160a01b031916941693909317835583015160018301558201516002820155606082015160038201805460ff19169115159190911790556080820151600482015560a09091015160059091015588518990829081106200072357fe5b6020026020010151601360008b84815181106200073c57fe5b6020908102919091018101516001600160a01b0390811683529082019290925260400160002080546001600160a01b03191692909116919091179055600101620005af565b5060005b87518110156200093e5760006001600160a01b0316888281518110620007a757fe5b60200260200101516001600160a01b031614156200080c576040805162461bcd60e51b815260206004820152601a60248201527f5f617070726f766564546f6b656e2063616e6e6f742062652030000000000000604482015290519081900360640190fd5b600e60008983815181106200081d57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161562000897576040805162461bcd60e51b815260206004820152601860248201527f6475706c696361746520617070726f76656420746f6b656e0000000000000000604482015290519081900360640190fd5b6001600e60008a8481518110620008aa57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600f888281518110620008f857fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b03909316929092179091550162000785565b50600195909555600293909355600391909155600455600555600655504260075551600a5561510680620009736000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063753d756311610167578063b2643aab116100ce578063e178034511610087578063e178034514610ae7578063e1a0e3fa14610b0d578063e63bc62d14610b2a578063e681c4aa14610b47578063f5d54c7714610b4f578063feb7ea1d14610b5757610295565b8063b2643aab14610a37578063b470aade14610a8c578063c89039c514610a94578063da35c66414610a9c578063dfdd369e14610aa4578063e0a8f6f514610aca57610295565b80639425a476116101205780639425a476146109aa5780639746d940146109c757806399653fbe146109e45780639d1722cb14610a0a578063a3dc380014610a12578063afe5475f14610a2f57610295565b8063753d75631461095c57806378a8956714610982578063797daf701461098a5780637d5b6c72146109925780638340bbce1461099a5780638b15a605146109a257610295565b80633793ab3c1161020b57806345f2d105116101c457806345f2d105146107ec578063590f940b1461081a57806359999b41146108f8578063635e99aa1461091e57806363858f2d1461092657806373f8fd4b1461092e57610295565b80633793ab3c146106255780633a98ef39146106425780633b214a741461064a5780633fc24bba14610667578063402c1794146106a15780634482394b146106c757610295565b80630cf20cc91161025d5780630cf20cc9146104b9578063115b2d18146104e757806315eb349e1461059b5780631dafede0146105be5780632582bf2a146105f757806327efc0861461061d57610295565b8063013cf08b1461029a57806303e32fa1146103e4578063044a0ca8146103fe578063086146d21461044e57806308ae4b0c14610456575b600080fd5b6102b7600480360360208110156102b057600080fd5b5035610c0b565b604051808f6001600160a01b03166001600160a01b031681526020018e6001600160a01b03166001600160a01b031681526020018d6001600160a01b03166001600160a01b031681526020018c81526020018b81526020018a8152602001896001600160a01b03166001600160a01b03168152602001888152602001876001600160a01b03166001600160a01b0316815260200186815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561039c578181015183820152602001610384565b50505050905090810190601f1680156103c95780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390f35b6103ec610d6e565b60408051918252519081900360200190f35b61042a6004803603604081101561041457600080fd5b506001600160a01b038135169060200135610d74565b6040518082600281111561043a57fe5b60ff16815260200191505060405180910390f35b6103ec610e7c565b61047c6004803603602081101561046c57600080fd5b50356001600160a01b0316610eab565b604080516001600160a01b0390971687526020870195909552858501939093529015156060850152608084015260a0830152519081900360c00190f35b6104e5600480360360408110156104cf57600080fd5b506001600160a01b038135169060200135610eee565b005b6103ec600480360360408110156104fd57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561052757600080fd5b82018360208201111561053957600080fd5b803590602001918460018302840111600160201b8311171561055a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f4c945050505050565b6104e5600480360360408110156105b157600080fd5b50803590602001356110e3565b6105db600480360360208110156105d457600080fd5b50356111a9565b604080516001600160a01b039092168252519081900360200190f35b6104e56004803603602081101561060d57600080fd5b50356001600160a01b03166111d0565b6105db611430565b6104e56004803603602081101561063b57600080fd5b5035611436565b6103ec611651565b6103ec6004803603602081101561066057600080fd5b5035611657565b61068d6004803603602081101561067d57600080fd5b50356001600160a01b0316611675565b604080519115158252519081900360200190f35b6105db600480360360208110156106b757600080fd5b50356001600160a01b031661168a565b6104e5600480360360608110156106dd57600080fd5b810190602081018135600160201b8111156106f757600080fd5b82018360208201111561070957600080fd5b803590602001918460208302840111600160201b8311171561072a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561077957600080fd5b82018360208201111561078b57600080fd5b803590602001918460208302840111600160201b831117156107ac57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505035151590506116a5565b6103ec6004803603604081101561080257600080fd5b506001600160a01b03813581169160200135166117d7565b6103ec600480360361010081101561083157600080fd5b6001600160a01b038235811692602081013592604082013592606083013592608081013582169260a08201359260c0830135169190810190610100810160e0820135600160201b81111561088457600080fd5b82018360208201111561089657600080fd5b803590602001918460018302840111600160201b831117156108b757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506117f4945050505050565b6104e56004803603602081101561090e57600080fd5b50356001600160a01b0316611c35565b6103ec611ef7565b6103ec611efd565b6103ec6004803603604081101561094457600080fd5b506001600160a01b0381358116916020013516611f03565b61068d6004803603602081101561097257600080fd5b50356001600160a01b0316611f2e565b6103ec611f43565b6103ec611f49565b6103ec611f4f565b6103ec611f55565b6103ec611f5b565b61068d600480360360208110156109c057600080fd5b5035611f61565b6104e5600480360360208110156109dd57600080fd5b5035611f88565b6104e5600480360360408110156109fa57600080fd5b508035906020013560ff1661265c565b6103ec612b1e565b61068d60048036036020811015610a2857600080fd5b5035612b24565b6103ec612bcd565b610a5460048036036020811015610a4d57600080fd5b5035612bd3565b604051808260c080838360005b83811015610a79578181015183820152602001610a61565b5050505090500191505060405180910390f35b6103ec612c3d565b6105db612c43565b6103ec612c52565b6104e560048036036020811015610aba57600080fd5b50356001600160a01b0316612c58565b6104e560048036036020811015610ae057600080fd5b5035612dba565b61068d60048036036020811015610afd57600080fd5b50356001600160a01b0316612f82565b6104e560048036036020811015610b2357600080fd5b5035612f97565b6104e560048036036020811015610b4057600080fd5b503561319e565b6105db61373b565b6105db613741565b6103ec60048036036040811015610b6d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610b9757600080fd5b820183602082011115610ba957600080fd5b803590602001918460018302840111600160201b83111715610bca57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613747945050505050565b60146020528060005260406000206000915090508060000160009054906101000a90046001600160a01b0316908060010160009054906101000a90046001600160a01b0316908060020160009054906101000a90046001600160a01b0316908060030154908060040154908060050154908060060160009054906101000a90046001600160a01b0316908060070154908060080160009054906101000a90046001600160a01b03169080600901549080600a01549080600b01549080600d018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d5e5780601f10610d3357610100808354040283529160200191610d5e565b820191906000526020600020905b815481529060010190602001808311610d4157829003601f168201915b50505050509080600e015490508e565b60065481565b6001600160a01b03821660009081526012602052604081206003015460ff16610ddc576040805162461bcd60e51b81526020600482015260156024820152741b595b58995c88191bd95cc81b9bdd08195e1a5cdd605a1b604482015290519081900360640190fd5b6015548210610e2c576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b6014600060158481548110610e3d57fe5b6000918252602080832090910154835282810193909352604091820181206001600160a01b0387168252600f0190925290205460ff1690505b92915050565b6000610ea5600154610e99600754426138be90919063ffffffff16565b9063ffffffff61390716565b90505b90565b6012602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b03909416949293919260ff9091169186565b60026000541415610f34576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b6002600055610f438282613949565b50506001600055565b600060026000541415610f94576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b6002600055610fa1614a6c565b506001600160a01b03808416600090815260126020908152604091829020825160c081018452815490941684526001810154918401829052600281015492840192909252600382015460ff16151560608401526004820154608084015260059091015460a083015215158061101a575060008160400151115b6110555760405162461bcd60e51b815260040180806020018281038252602f815260200180614e6c602f913960400191505060405180910390fd5b6001600160a01b038416600090815260126020526040902060050154156110ad5760405162461bcd60e51b8152600401808060200182810382526021815260200180614ddd6021913960400191505060405180910390fd5b6110b5614aad565b600160a08201526110ce85600080808080808b89613ac8565b50506009546001600055600019019392505050565b60026000541415611129576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b600260009081553381526012602052604090206001015415158061115e57503360009081526012602052604090206002015415155b61119e576040805162461bcd60e51b815260206004820152600c60248201526b3737ba10309036b2b6b132b960a11b604482015290519081900360640190fd5b610f43338383613e82565b600f81815481106111b657fe5b6000918252602090912001546001600160a01b0316905081565b60026000541415611216576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b6002600090815533815260126020526040902060010154611272576040805162461bcd60e51b81526020600482015260116024820152703737ba10309039b430b932b437b63232b960791b604482015290519081900360640190fd5b6001600160a01b0381166112cd576040805162461bcd60e51b815260206004820152601a60248201527f6e657744656c65676174654b65792063616e6e6f742062652030000000000000604482015290519081900360640190fd5b6001600160a01b03811633146113a2576001600160a01b03811660009081526012602052604090206003015460ff16156113385760405162461bcd60e51b8152600401808060200182810382526021815260200180614f8c6021913960400191505060405180910390fd5b6001600160a01b03808216600090815260136020908152604080832054909316825260129052206003015460ff16156113a25760405162461bcd60e51b8152600401808060200182810382526027815260200180614cb96027913960400191505060405180910390fd5b33600081815260126020908152604080832080546001600160a01b0390811685526013845282852080546001600160a01b031990811690915590871680865294839020805482168717905581541684178155815193845290519093927fde7b64a369e10562cc2e71f0f1f944eaf144b75fead6ecb51fac9c4dd693488592908290030190a250506001600055565b61babe81565b6002600054141561147c576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b600260005561148a8161417b565b60006015828154811061149957fe5b60009182526020808320919091015480835260149091526040909120600c81015491925090600160201b900460ff16611519576040805162461bcd60e51b815260206004820152601c60248201527f6d75737420626520612077686974656c6973742070726f706f73616c00000000604482015290519081900360640190fd5b600c8101805461ff0019166101001790556000611535846144e4565b600f5490915061019011611547575060005b80156115d857600c8201805462ff00001916620100001790556006820180546001600160a01b039081166000908152600e60205260408120805460ff191660019081179091559254600f805494850181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8029092018054929091166001600160a01b03199092169190911790555b60068201546001600160a01b039081166000908152601060205260409020805460ff19169055600283015461160d9116614723565b6040805182151581529051849186917f2094fc13d2ecb0acd6861e82bd006c7e5ab6f312ec0c6cdfe3d1a01ee54d885a9181900360200190a3505060016000555050565b600a5481565b6015818154811061166457fe5b600091825260209091200154905081565b60116020526000908152604090205460ff1681565b6013602052600090815260409020546001600160a01b031681565b600260005414156116eb576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b600260005581518351146117305760405162461bcd60e51b8152600401808060200182810382526032815260200180614e9b6032913960400191505060405180910390fd5b60005b83518110156117cc57600083828151811061174a57fe5b6020026020010151905082156117a657336000908152600d60205260408120865190919087908590811061177a57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205490505b6117c38583815181106117b557fe5b602002602001015182613949565b50600101611733565b505060016000555050565b600d60209081526000928352604080842090915290825290205481565b60006002600054141561183c576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b6002600055670de0b6b3a764000061185a898963ffffffff61477816565b11156118ad576040805162461bcd60e51b815260206004820152601960248201527f746f6f206d616e79207368617265732072657175657374656400000000000000604482015290519081900360640190fd5b6001600160a01b0385166000908152600e602052604090205460ff1661191a576040805162461bcd60e51b815260206004820152601f60248201527f74726962757465546f6b656e206973206e6f742077686974656c697374656400604482015290519081900360640190fd5b6001600160a01b0383166000908152600e602052604090205460ff16611987576040805162461bcd60e51b815260206004820152601a60248201527f7061796d656e74206973206e6f742077686974656c6973746564000000000000604482015290519081900360640190fd5b6001600160a01b0389166119da576040805162461bcd60e51b815260206004820152601560248201527406170706c6963616e742063616e6e6f74206265203605c1b604482015290519081900360640190fd5b6001600160a01b03891661dead14801590611a0057506001600160a01b03891661beef14155b8015611a1757506001600160a01b03891661babe14155b611a525760405162461bcd60e51b8152600401808060200182810382526024815260200180614d726024913960400191505060405180910390fd5b6001600160a01b03891660009081526012602052604090206005015415611aaa5760405162461bcd60e51b8152600401808060200182810382526025815260200180614f236025913960400191505060405180910390fd5b600086118015611add57506001600160a01b0385166000908152600080516020614ecd8339815191526020526040902054155b15611b235760c8600c5410611b235760405162461bcd60e51b8152600401808060200182810382526047815260200180614d966047913960600191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b158015611b7857600080fd5b505af1158015611b8c573d6000803e3d6000fd5b505050506040513d6020811015611ba257600080fd5b5051611bf5576040805162461bcd60e51b815260206004820152601d60248201527f7472696275746520746f6b656e207472616e73666572206661696c6564000000604482015290519081900360640190fd5b611c0261beef86886147d2565b611c0a614aad565b611c1b8a8a8a8a8a8a8a8a89613ac8565b505060095460001901600160005598975050505050505050565b336000908152601360209081526040808320546001600160a01b031683526012909152902060010154611ca0576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420612064656c656761746560901b604482015290519081900360640190fd5b60026000541415611ce6576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b600260009081556001600160a01b0382168082527fa30f7a7832bd8a7a8daa3a3f5b7a6f7cec6a2fbb1a121fa5b76520e44736771c602090815260408084205481516370a0823160e01b81523060048201529151611d9c94919391926370a08231926024808301939192829003018186803b158015611d6457600080fd5b505afa158015611d78573d6000803e3d6000fd5b505050506040513d6020811015611d8e57600080fd5b50519063ffffffff6138be16565b905060008111611dea576040805162461bcd60e51b81526020600482015260146024820152731b9bc81d1bdad95b9cc81d1bc818dbdb1b1958dd60621b604482015290519081900360640190fd5b6001600160a01b0382166000908152600e602052604090205460ff16611e415760405162461bcd60e51b8152600401808060200182810382526024815260200180614e216024913960400191505060405180910390fd5b6001600160a01b0382166000908152600080516020614ecd8339815191526020526040902054611ea25760405162461bcd60e51b8152600401808060200182810382526036815260200180614eed6036913960400191505060405180910390fd5b611eaf61dead83836147d2565b6040805182815290516001600160a01b038416917f9381e53ffdc9733a6783a6f8665be3f89c231bb81a6771996ed553b4e75c0fe3919081900360200190a250506001600055565b600b5481565b60035481565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b600e6020526000908152604090205460ff1681565b600f5490565b60155490565b60075481565b60025481565b60045481565b6000611f786002548361477890919063ffffffff16565b611f80610e7c565b101592915050565b60026000541415611fce576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b60026000908155338152601360209081526040808320546001600160a01b03168352601290915290206001015461203d576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420612064656c656761746560901b604482015290519081900360640190fd5b60085460048054604080516323b872dd60e01b815233938101939093523060248401526044830191909152516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561209d57600080fd5b505af11580156120b1573d6000803e3d6000fd5b505050506040513d60208110156120c757600080fd5b50516121045760405162461bcd60e51b815260040180806020018281038252602681526020018061501b6026913960400191505060405180910390fd5b6008546004546121239161beef916001600160a01b03909116906147d2565b600081815260146020526040902060018101546001600160a01b0316612190576040805162461bcd60e51b815260206004820181905260248201527f70726f706f73616c206d7573742068617665206265656e2070726f706f736564604482015290519081900360640190fd5b600c81015460ff16156121d45760405162461bcd60e51b8152600401808060200182810382526023815260200180614f486023913960400191505060405180910390fd5b600c8101546301000000900460ff1615612235576040805162461bcd60e51b815260206004820152601b60248201527f70726f706f73616c20686173206265656e2063616e63656c6c65640000000000604482015290519081900360640190fd5b80546001600160a01b03166000908152601260205260409020600501541561228e5760405162461bcd60e51b8152600401808060200182810382526025815260200180614f236025913960400191505060405180910390fd5b600081600501541180156122c9575060068101546001600160a01b03166000908152600080516020614ecd8339815191526020526040902054155b1561230f5760c8600c541061230f5760405162461bcd60e51b8152600401808060200182810382526048815260200180614fd36048913960600191505060405180910390fd5b600c810154600160201b900460ff161561245f5760068101546001600160a01b03166000908152600e602052604090205460ff161561237f5760405162461bcd60e51b81526004018080602001828103825260298152602001806150866029913960400191505060405180910390fd5b60068101546001600160a01b031660009081526010602052604090205460ff16156123f1576040805162461bcd60e51b815260206004820152601d60248201527f616c72656164792070726f706f73656420746f2077686974656c697374000000604482015290519081900360640190fd5b600f54610190116124335760405162461bcd60e51b8152600401808060200182810382526027815260200180614e456027913960400191505060405180910390fd5b60068101546001600160a01b03166000908152601060205260409020805460ff19166001179055612509565b600c81015465010000000000900460ff16156125095780546001600160a01b031660009081526011602052604090205460ff16156124e4576040805162461bcd60e51b815260206004820152601860248201527f616c72656164792070726f706f73656420746f206b69636b0000000000000000604482015290519081900360640190fd5b80546001600160a01b03166000908152601160205260409020805460ff191660011790555b600061257e600161257261251b610e7c565b6015541561256a576015805460149160009161253e90600163ffffffff6138be16565b8154811061254857fe5b906000526020600020015481526020019081526020016000206009015461256d565b60005b614830565b9063ffffffff61477816565b60098301819055336000818152601360205260408120546002860180546001600160a01b0319166001600160a01b039092169182179055600c8601805460ff19166001908117909155601580548083018255938190527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759093018890559154939450928392917f2a383a979381335e3eb401ac01dd8083e024ff0256bf5338456ffc0063390bbd91889161263291906138be565b604080519283526020830191909152818101879052519081900360600190a3505060016000555050565b600260005414156126a2576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b60026000908155338152601360209081526040808320546001600160a01b031683526012909152902060010154612711576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420612064656c656761746560901b604482015290519081900360640190fd5b336000908152601360209081526040808320546001600160a01b031680845260129092529091206015548410612788576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b6000601460006015878154811061279b57fe5b90600052602060002001548152602001908152602001600020905060038460ff1610612804576040805162461bcd60e51b81526020600482015260136024820152726d757374206265206c657373207468616e203360681b604482015290519081900360640190fd5b60008460ff16600281111561281557fe5b90508160090154612824610e7c565b1015612877576040805162461bcd60e51b815260206004820152601d60248201527f766f74696e6720706572696f6420686173206e6f742073746172746564000000604482015290519081900360640190fd5b6128848260090154611f61565b156128c05760405162461bcd60e51b81526004018080602001828103825260228152602001806150416022913960400191505060405180910390fd5b6001600160a01b0384166000908152600f8301602052604081205460ff1660028111156128e957fe5b1461293b576040805162461bcd60e51b815260206004820152601860248201527f6d656d6265722068617320616c726561647920766f7465640000000000000000604482015290519081900360640190fd5b600181600281111561294957fe5b14806129605750600281600281111561295e57fe5b145b6129b1576040805162461bcd60e51b815260206004820152601d60248201527f766f7465206d7573742062652065697468657220596573206f72204e6f000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600f830160205260409020805482919060ff191660018360028111156129e257fe5b021790555060018160028111156129f557fe5b1415612a6d576001830154600a830154612a149163ffffffff61477816565b600a8301556004830154861115612a2d57600483018690555b600e820154600b54600a54612a479163ffffffff61477816565b1115612a6857600b54600a54612a629163ffffffff61477816565b600e8301555b612aa0565b6002816002811115612a7b57fe5b1415612aa0576001830154600b830154612a9a9163ffffffff61477816565b600b8301555b836001600160a01b0316336001600160a01b0316877f804f03797630bf8b8a46b9371608abbf7d78a20df720e477bab641957ca68a2060158a81548110612ae357fe5b906000526020600020015489604051808381526020018260ff1660ff1681526020019250505060405180910390a45050600160005550505050565b600c5481565b6015546000908210612b77576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b6014600060158481548110612b8857fe5b90600052602060002001548152602001908152602001600020600c01600160068110612bb057fe5b602081049091015460ff601f9092166101000a9004169050919050565b60055481565b612bdb614aad565b600082815260146020526040808220815160c081019283905292600c909101916006918390855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612c02575094979650505050505050565b60015481565b6008546001600160a01b031681565b60095481565b60026000541415612c9e576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b600260009081556001600160a01b03821681526012602052604090206005810154612d09576040805162461bcd60e51b81526020600482015260166024820152751b595b58995c881b5d5cdd081899481a5b881a985a5b60521b604482015290519081900360640190fd5b6000816002015411612d62576040805162461bcd60e51b815260206004820152601a60248201527f6d656d626572206d757374206861766520736f6d65206c6f6f74000000000000604482015290519081900360640190fd5b612d6f8160040154612b24565b612daa5760405162461bcd60e51b815260040180806020018281038252604d815260200180614d00604d913960600191505060405180910390fd5b610f438260008360020154613e82565b60026000541415612e00576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b60026000908155818152601460205260409020600c81015460ff1615612e575760405162461bcd60e51b8152600401808060200182810382526023815260200180614f486023913960400191505060405180910390fd5b600c8101546301000000900460ff1615612ea25760405162461bcd60e51b81526004018080602001828103825260238152602001806150636023913960400191505060405180910390fd5b60018101546001600160a01b03163314612f03576040805162461bcd60e51b815260206004820152601e60248201527f736f6c656c79207468652070726f706f7365722063616e2063616e63656c0000604482015290519081900360640190fd5b600c8101805463ff00000019166301000000179055600181015460068201546005830154612f439261beef926001600160a01b0391821692911690614847565b60408051338152905183917fc215fed6680bb02d323dc3f8b8f85241572607538426059c9232601bd293c3be919081900360200190a250506001600055565b60106020526000908152604090205460ff1681565b60026000541415612fdd576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b6002600055612feb8161417b565b600060158281548110612ffa57fe5b60009182526020808320919091015480835260149091526040909120600c8101549192509065010000000000900460ff1661307c576040805162461bcd60e51b815260206004820152601d60248201527f6d7573742062652061206775696c64206b69636b2070726f706f73616c000000604482015290519081900360640190fd5b600c8101805461ff0019166101001790556000613098846144e4565b9050801561312857600c8201805462ff000019166201000017905581546001600160a01b0316600090815260126020526040902060058101859055600181015460028201546130e691614778565b60028201556001810154600a546131029163ffffffff6138be16565b600a556001810154600b5461311c9163ffffffff61477816565b600b5560006001909101555b81546001600160a01b039081166000908152601160205260409020805460ff19169055600283015461315a9116614723565b6040805182151581529051849186917f0e347d00d3e9e6cdff9e6c09092c9ff1bd448f9b3dfb7091b30939ec5e7a3c739181900360200190a3505060016000555050565b600260005414156131e4576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b60026000556131f28161417b565b60006015828154811061320157fe5b60009182526020808320919091015480835260149091526040909120600c81015491925090600160201b900460ff1615801561324b5750600c81015465010000000000900460ff16155b61329c576040805162461bcd60e51b815260206004820152601b60248201527f6d7573742062652061207374616e646172642070726f706f73616c0000000000604482015290519081900360640190fd5b600c8101805461ff00191661010017905560006132b8846144e4565b9050670de0b6b3a76400006132ea83600401546125728560030154612572600b54600a5461477890919063ffffffff16565b11156132f4575060005b60088201546001600160a01b03166000908152600080516020614ecd83398151915260205260409020546007830154111561332d575060005b60008260050154118015613368575060068201546001600160a01b03166000908152600080516020614ecd8339815191526020526040902054155b8015613377575060c8600c5410155b15613380575060005b80156136b557600c8201805462ff000019166201000017905581546001600160a01b031660009081526012602052604090206003015460ff161561345757600382015482546001600160a01b03166000908152601260205260409020600101546133ef9163ffffffff61477816565b82546001600160a01b039081166000908152601260205260408082206001019390935560048501548554909216815291909120600201546134359163ffffffff61477816565b82546001600160a01b031660009081526012602052604090206002015561359a565b81546001600160a01b03908116600090815260136020908152604080832054909316825260129052206003015460ff16156134db5781546001600160a01b0390811660009081526013602090815260408083205490931680835283832080546001600160a01b03199081168317909155601290925292909120805490911690911790555b6040805160c08101825283546001600160a01b0390811680835260038087015460208086019182526004808a0154878901908152600160608901818152600060808b0181815260a08c01828152998252601287528c82209b518c54908c166001600160a01b0319918216178d559751938c0193909355925160028b015551958901805496151560ff1990971696909617909555935190870155925160059095019490945586549092168083526013909152929020805490911690911790555b6003820154600a546135b19163ffffffff61477816565b600a556004820154600b546135cb9163ffffffff61477816565b600b5560068201546001600160a01b03166000908152600080516020614ecd8339815191526020526040902054158015613609575060008260050154115b1561361857600c805460010190555b6006820154600583015461363d9161beef9161dead916001600160a01b031690614847565b8154600883015460078401546136659261dead926001600160a01b0391821692911690614847565b60088201546001600160a01b03166000908152600080516020614ecd83398151915260205260409020541580156136a0575060008260070154115b156136b057600c80546000190190555b6136e0565b6001820154600683015460058401546136e09261beef926001600160a01b0391821692911690614847565b60028201546136f7906001600160a01b0316614723565b6040805182151581529051849186917f86f74240ecee9e4230d26ff92e17fee978460d9c0f78f5c88b2864c9e7a494279181900360200190a3505060016000555050565b61beef81565b61dead81565b60006002600054141561378f576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b60026000556001600160a01b0383166137ef576040805162461bcd60e51b815260206004820152601a60248201527f6d7573742070726f7669646520746f6b656e2061646472657373000000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600e602052604090205460ff16156138475760405162461bcd60e51b81526004018080602001828103825260298152602001806150866029913960400191505060405180910390fd5b600f54610190116138895760405162461bcd60e51b8152600401808060200182810382526026815260200180614fad6026913960400191505060405180910390fd5b613891614aad565b600160808201526138aa60008080808881808a89613ac8565b505060095460001901600160005592915050565b600061390083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614863565b9392505050565b600061390083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506148fa565b336000908152600d602090815260408083206001600160a01b03861684529091529020548111156139b8576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015290519081900360640190fd5b6139c333838361495f565b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b158015613a1257600080fd5b505af1158015613a26573d6000803e3d6000fd5b505050506040513d6020811015613a3c57600080fd5b5051613a81576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b604080516001600160a01b038416815260208101839052815133927f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb928290030190a25050565b613ad0614acb565b604051806101e001604052808b6001600160a01b03168152602001336001600160a01b0316815260200160006001600160a01b031681526020018a8152602001898152602001888152602001876001600160a01b03168152602001868152602001856001600160a01b03168152602001600081526020016000815260200160008152602001838152602001848152602001600081525090508060146000600954815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060e082015181600701556101008201518160080160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01906006613cc1929190614b74565b506101a08201518051613cde91600d840191602090910190614c06565b506101c082015181600e0155905050600060136000336001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050806001600160a01b0316336001600160a01b03168c6001600160a01b03167fa763e0f5e4f4e33a3397b4ba22677c9b6fd2075ed6504596333006ff2f3e38748d8d8d8d8d8d8d8d600954604051808a8152602001898152602001888152602001876001600160a01b03166001600160a01b03168152602001868152602001856001600160a01b03166001600160a01b031681526020018060200184600660200280838360005b83811015613de8578181015183820152602001613dd0565b50505050905001838152602001828103825285818151815260200191508051906020019080838360005b83811015613e2a578181015183820152602001613e12565b50505050905090810190601f168015613e575780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390a45050600980546001019055505050505050505050565b6000613e9b600b54600a5461477890919063ffffffff16565b6001600160a01b0385166000908152601260205260409020600181015491925090841115613f06576040805162461bcd60e51b8152602060048201526013602482015272696e73756666696369656e742073686172657360681b604482015290519081900360640190fd5b8281600201541015613f53576040805162461bcd60e51b81526020600482015260116024820152701a5b9cdd59999a58da595b9d081b1bdbdd607a1b604482015290519081900360640190fd5b613f608160040154612b24565b613f9b5760405162461bcd60e51b815260040180806020018281038252604d815260200180614d00604d913960600191505060405180910390fd5b6000613fad858563ffffffff61477816565b6001830154909150613fc5908663ffffffff6138be16565b60018301556002820154613fdf908563ffffffff6138be16565b6002830155600a54613ff7908663ffffffff6138be16565b600a55600b5461400d908563ffffffff6138be16565b600b5560005b600f548110156141385761dead6000908152600d602052600f805461407b91600080516020614ecd833981519152918491908690811061404f57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484876149bf565b9050801561412f5761dead6000908152600d602052600f80548392600080516020614ecd833981519152929091869081106140b257fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220805495909503909455918b168252600d909252908120600f8054849391908690811061410357fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020805490910190555b50600101614013565b506040805186815260208101869052815133927fcad1a1c68982832d9abc314de8a1e5d5e8c81b0588961e360766736d10c3be1a928290030190a2505050505050565b60155481106141cb576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b6141d3614acb565b60146000601584815481106141e457fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b039081168252600183015481169582019590955260028201548516818501526003820154606082015260048201546080820152600582015460a0820152600680830154861660c080840191909152600784015460e084015260088401549096166101008301526009830154610120830152600a830154610140830152600b83015461016083015284519586019485905290949193610180860193600c86019291908390855b825461010083900a900460ff1615158152602060019283018181049485019490930390920291018084116142ba57505050928452505050600d8201805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815293820193929183018282801561437d5780601f106143525761010080835404028352916020019161437d565b820191906000526020600020905b81548152906001019060200180831161436057829003601f168201915b50505050508152602001600e8201548152505090506143b260035461257260025484610120015161477890919063ffffffff16565b6143ba610e7c565b10156143f75760405162461bcd60e51b8152600401808060200182810382526025815260200180614d4d6025913960400191505060405180910390fd5b610180810151602001511561443d5760405162461bcd60e51b81526004018080602001828103825260238152602001806150af6023913960400191505060405180910390fd5b8115806144a5575060146000601561445c85600163ffffffff6138be16565b8154811061446657fe5b90600052602060002001548152602001908152602001600020600c0160016006811061448e57fe5b602081049091015460ff601f9092166101000a9004165b6144e05760405162461bcd60e51b8152600401808060200182810382526023815260200180614dfe6023913960400191505060405180910390fd5b5050565b60006144ee614acb565b60146000601585815481106144ff57fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b039081168252600183015481169582019590955260028201548516818501526003820154606082015260048201546080820152600582015460a0820152600680830154861660c080840191909152600784015460e084015260088401549096166101008301526009830154610120830152600a830154610140830152600b83015461016083015284519586019485905290949193610180860193600c86019291908390855b825461010083900a900460ff1615158152602060019283018181049485019490930390920291018084116145d557505050928452505050600d8201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156146985780601f1061466d57610100808354040283529160200191614698565b820191906000526020600020905b81548152906001019060200180831161467b57829003601f168201915b50505050508152602001600e820154815250509050806101600151816101400151119150806101c001516146eb6005546146df600b54600a5461477890919063ffffffff16565b9063ffffffff614a1316565b10156146f657600091505b80516001600160a01b03166000908152601260205260409020600501541561471d57600091505b50919050565b6008546006546147429161beef9133916001600160a01b031690614847565b6008546006546004546147759261beef9285926001600160a01b03909216916147709163ffffffff6138be16565b614847565b50565b600082820183811015613900576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b039283166000908152600d602090815260408083209490951682529283528381208054830190557fa30f7a7832bd8a7a8daa3a3f5b7a6f7cec6a2fbb1a121fa5b76520e44736771c90925291902080549091019055565b6000818310156148405781613900565b5090919050565b61485284838361495f565b61485d8383836147d2565b50505050565b600081848411156148f25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156148b757818101518382015260200161489f565b50505050905090810190601f1680156148e45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836149495760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156148b757818101518382015260200161489f565b50600083858161495557fe5b0495945050505050565b6001600160a01b039283166000908152600d60209081526040808320949095168252928352838120805483900390557fa30f7a7832bd8a7a8daa3a3f5b7a6f7cec6a2fbb1a121fa5b76520e44736771c9092529190208054919091039055565b6000816149cb57600080fd5b836149d857506000613900565b838302838582816149e557fe5b0414156149fe578281816149f557fe5b04915050613900565b83838681614a0857fe5b040295945050505050565b600082614a2257506000610e76565b82820282848281614a2f57fe5b04146139005760405162461bcd60e51b8152600401808060200182810382526021815260200180614f6b6021913960400191505060405180910390fd5b6040518060c0016040528060006001600160a01b03168152602001600081526020016000815260200160001515815260200160008152602001600081525090565b6040518060c001604052806006906020820280388339509192915050565b604051806101e0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001614b60614aad565b815260200160608152602001600081525090565b600183019183908215614bf65791602002820160005b83821115614bc757835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302614b8a565b8015614bf45782816101000a81549060ff0219169055600101602081600001049283019260010302614bc7565b505b50614c02929150614c80565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614c4757805160ff1916838001178555614c74565b82800160010185558215614c74579182015b82811115614c74578251825591602001919060010190614c59565b50614c02929150614c9e565b610ea891905b80821115614c0257805460ff19168155600101614c86565b610ea891905b80821115614c025760008155600101614ca456fe63616e6e6f74206f7665727772697465206578697374696e672064656c6567617465206b6579735265656e7472616e637947756172643a207265656e7472616e742063616c6c0063616e6e6f7420726167657175697420756e74696c206869676865737420696e6465782070726f706f73616c206d656d62657220766f74656420594553206f6e2069732070726f63657373656470726f706f73616c206973206e6f7420726561647920746f2062652070726f6365737365646170706c6963616e7420616464726573732063616e6e6f7420626520726573657276656463616e6e6f74207375626d6974206d6f726520747269627574652070726f706f73616c7320666f72206e657720746f6b656e73202d206775696c6462616e6b2069732066756c6c6d656d626572206d757374206e6f7420616c7265616479206265206a61696c656470726576696f75732070726f706f73616c206d7573742062652070726f636573736564746f6b656e20746f20636f6c6c656374206d7573742062652077686974656c697374656463616e6e6f742073706f6e736f72206d6f72652077686974656c6973742070726f706f73616c736d656d626572206d7573742068617665206174206c65617374206f6e65207368617265206f72206f6e65206c6f6f74746f6b656e7320616e6420616d6f756e747320617272617973206d757374206265206d61746368696e67206c656e67746873dc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a746f6b656e20746f20636f6c6c656374206d7573742068617665206e6f6e2d7a65726f206775696c642062616e6b2062616c616e636570726f706f73616c206170706c6963616e74206d757374206e6f74206265206a61696c656470726f706f73616c2068617320616c7265616479206265656e2073706f6e736f726564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7763616e6e6f74206f7665727772697465206578697374696e67206d656d6265727363616e6e6f74207375626d6974206d6f72652077686974656c6973742070726f706f73616c7363616e6e6f742073706f6e736f72206d6f726520747269627574652070726f706f73616c7320666f72206e657720746f6b656e73202d206775696c6462616e6b2069732066756c6c70726f706f73616c206465706f73697420746f6b656e207472616e73666572206661696c656470726f706f73616c20766f74696e6720706572696f6420686173206578706972656470726f706f73616c2068617320616c7265616479206265656e2063616e63656c6c656463616e6e6f7420616c726561647920686176652077686974656c69737465642074686520746f6b656e70726f706f73616c2068617320616c7265616479206265656e2070726f636573736564a265627a7a72315820eba0b3393f41c9b9cb3244afe1f8c1d338844a4dcaa31cdc4cb50b947eba16cc64736f6c634300051100325f766f74696e67506572696f644c656e6774682065786365656473206c696d69745f70726f706f73616c4465706f7369742063616e6e6f7420626520736d616c6c6572207468616e205f70726f63657373696e6752657761726400000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000438000000000000000000000000000000000000000000000000000000000000000230000000000000000000000000000000000000000000000000000000000000023000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20000000000000000000000000c89b6f0146642688bb254bf93c28fccf1e182c810000000000000000000000005608169973d639649196a84ee4085a708bcbf3970000000000000000000000007587caefc8096f5f40acb83a09df031a018c66ec00000000000000000000000019bc62ff7cd9ffd6bdced9802ff718f09f7259f10000000000000000000000003edeb7ccf325d0aec03cffb89768da2d6f0c26f10000000000000000000000000f50d31b3eaefd65236dd3736b863cffa4c63c4e000000000000000000000000fa9b5f7fdc8ab34aaf3099889475d47febf830d7000000000000000000000000fbe18f066f9583dac19c88444bc2005c99881e56000000000000000000000000320cf69bf1d9b3f942d09dce2fc7159aa1ff80d7000000000000000000000000d3f03984a90fd15e909b2e9467e98cadea181da30000000000000000000000000000000000000000000000000000000000000009000000000000000000000000c00e94cb662c3520282e6f5717214004a7f268880000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e364300000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f40000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102955760003560e01c8063753d756311610167578063b2643aab116100ce578063e178034511610087578063e178034514610ae7578063e1a0e3fa14610b0d578063e63bc62d14610b2a578063e681c4aa14610b47578063f5d54c7714610b4f578063feb7ea1d14610b5757610295565b8063b2643aab14610a37578063b470aade14610a8c578063c89039c514610a94578063da35c66414610a9c578063dfdd369e14610aa4578063e0a8f6f514610aca57610295565b80639425a476116101205780639425a476146109aa5780639746d940146109c757806399653fbe146109e45780639d1722cb14610a0a578063a3dc380014610a12578063afe5475f14610a2f57610295565b8063753d75631461095c57806378a8956714610982578063797daf701461098a5780637d5b6c72146109925780638340bbce1461099a5780638b15a605146109a257610295565b80633793ab3c1161020b57806345f2d105116101c457806345f2d105146107ec578063590f940b1461081a57806359999b41146108f8578063635e99aa1461091e57806363858f2d1461092657806373f8fd4b1461092e57610295565b80633793ab3c146106255780633a98ef39146106425780633b214a741461064a5780633fc24bba14610667578063402c1794146106a15780634482394b146106c757610295565b80630cf20cc91161025d5780630cf20cc9146104b9578063115b2d18146104e757806315eb349e1461059b5780631dafede0146105be5780632582bf2a146105f757806327efc0861461061d57610295565b8063013cf08b1461029a57806303e32fa1146103e4578063044a0ca8146103fe578063086146d21461044e57806308ae4b0c14610456575b600080fd5b6102b7600480360360208110156102b057600080fd5b5035610c0b565b604051808f6001600160a01b03166001600160a01b031681526020018e6001600160a01b03166001600160a01b031681526020018d6001600160a01b03166001600160a01b031681526020018c81526020018b81526020018a8152602001896001600160a01b03166001600160a01b03168152602001888152602001876001600160a01b03166001600160a01b0316815260200186815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561039c578181015183820152602001610384565b50505050905090810190601f1680156103c95780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390f35b6103ec610d6e565b60408051918252519081900360200190f35b61042a6004803603604081101561041457600080fd5b506001600160a01b038135169060200135610d74565b6040518082600281111561043a57fe5b60ff16815260200191505060405180910390f35b6103ec610e7c565b61047c6004803603602081101561046c57600080fd5b50356001600160a01b0316610eab565b604080516001600160a01b0390971687526020870195909552858501939093529015156060850152608084015260a0830152519081900360c00190f35b6104e5600480360360408110156104cf57600080fd5b506001600160a01b038135169060200135610eee565b005b6103ec600480360360408110156104fd57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561052757600080fd5b82018360208201111561053957600080fd5b803590602001918460018302840111600160201b8311171561055a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f4c945050505050565b6104e5600480360360408110156105b157600080fd5b50803590602001356110e3565b6105db600480360360208110156105d457600080fd5b50356111a9565b604080516001600160a01b039092168252519081900360200190f35b6104e56004803603602081101561060d57600080fd5b50356001600160a01b03166111d0565b6105db611430565b6104e56004803603602081101561063b57600080fd5b5035611436565b6103ec611651565b6103ec6004803603602081101561066057600080fd5b5035611657565b61068d6004803603602081101561067d57600080fd5b50356001600160a01b0316611675565b604080519115158252519081900360200190f35b6105db600480360360208110156106b757600080fd5b50356001600160a01b031661168a565b6104e5600480360360608110156106dd57600080fd5b810190602081018135600160201b8111156106f757600080fd5b82018360208201111561070957600080fd5b803590602001918460208302840111600160201b8311171561072a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561077957600080fd5b82018360208201111561078b57600080fd5b803590602001918460208302840111600160201b831117156107ac57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505035151590506116a5565b6103ec6004803603604081101561080257600080fd5b506001600160a01b03813581169160200135166117d7565b6103ec600480360361010081101561083157600080fd5b6001600160a01b038235811692602081013592604082013592606083013592608081013582169260a08201359260c0830135169190810190610100810160e0820135600160201b81111561088457600080fd5b82018360208201111561089657600080fd5b803590602001918460018302840111600160201b831117156108b757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506117f4945050505050565b6104e56004803603602081101561090e57600080fd5b50356001600160a01b0316611c35565b6103ec611ef7565b6103ec611efd565b6103ec6004803603604081101561094457600080fd5b506001600160a01b0381358116916020013516611f03565b61068d6004803603602081101561097257600080fd5b50356001600160a01b0316611f2e565b6103ec611f43565b6103ec611f49565b6103ec611f4f565b6103ec611f55565b6103ec611f5b565b61068d600480360360208110156109c057600080fd5b5035611f61565b6104e5600480360360208110156109dd57600080fd5b5035611f88565b6104e5600480360360408110156109fa57600080fd5b508035906020013560ff1661265c565b6103ec612b1e565b61068d60048036036020811015610a2857600080fd5b5035612b24565b6103ec612bcd565b610a5460048036036020811015610a4d57600080fd5b5035612bd3565b604051808260c080838360005b83811015610a79578181015183820152602001610a61565b5050505090500191505060405180910390f35b6103ec612c3d565b6105db612c43565b6103ec612c52565b6104e560048036036020811015610aba57600080fd5b50356001600160a01b0316612c58565b6104e560048036036020811015610ae057600080fd5b5035612dba565b61068d60048036036020811015610afd57600080fd5b50356001600160a01b0316612f82565b6104e560048036036020811015610b2357600080fd5b5035612f97565b6104e560048036036020811015610b4057600080fd5b503561319e565b6105db61373b565b6105db613741565b6103ec60048036036040811015610b6d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610b9757600080fd5b820183602082011115610ba957600080fd5b803590602001918460018302840111600160201b83111715610bca57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613747945050505050565b60146020528060005260406000206000915090508060000160009054906101000a90046001600160a01b0316908060010160009054906101000a90046001600160a01b0316908060020160009054906101000a90046001600160a01b0316908060030154908060040154908060050154908060060160009054906101000a90046001600160a01b0316908060070154908060080160009054906101000a90046001600160a01b03169080600901549080600a01549080600b01549080600d018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d5e5780601f10610d3357610100808354040283529160200191610d5e565b820191906000526020600020905b815481529060010190602001808311610d4157829003601f168201915b50505050509080600e015490508e565b60065481565b6001600160a01b03821660009081526012602052604081206003015460ff16610ddc576040805162461bcd60e51b81526020600482015260156024820152741b595b58995c88191bd95cc81b9bdd08195e1a5cdd605a1b604482015290519081900360640190fd5b6015548210610e2c576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b6014600060158481548110610e3d57fe5b6000918252602080832090910154835282810193909352604091820181206001600160a01b0387168252600f0190925290205460ff1690505b92915050565b6000610ea5600154610e99600754426138be90919063ffffffff16565b9063ffffffff61390716565b90505b90565b6012602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b03909416949293919260ff9091169186565b60026000541415610f34576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b6002600055610f438282613949565b50506001600055565b600060026000541415610f94576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b6002600055610fa1614a6c565b506001600160a01b03808416600090815260126020908152604091829020825160c081018452815490941684526001810154918401829052600281015492840192909252600382015460ff16151560608401526004820154608084015260059091015460a083015215158061101a575060008160400151115b6110555760405162461bcd60e51b815260040180806020018281038252602f815260200180614e6c602f913960400191505060405180910390fd5b6001600160a01b038416600090815260126020526040902060050154156110ad5760405162461bcd60e51b8152600401808060200182810382526021815260200180614ddd6021913960400191505060405180910390fd5b6110b5614aad565b600160a08201526110ce85600080808080808b89613ac8565b50506009546001600055600019019392505050565b60026000541415611129576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b600260009081553381526012602052604090206001015415158061115e57503360009081526012602052604090206002015415155b61119e576040805162461bcd60e51b815260206004820152600c60248201526b3737ba10309036b2b6b132b960a11b604482015290519081900360640190fd5b610f43338383613e82565b600f81815481106111b657fe5b6000918252602090912001546001600160a01b0316905081565b60026000541415611216576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b6002600090815533815260126020526040902060010154611272576040805162461bcd60e51b81526020600482015260116024820152703737ba10309039b430b932b437b63232b960791b604482015290519081900360640190fd5b6001600160a01b0381166112cd576040805162461bcd60e51b815260206004820152601a60248201527f6e657744656c65676174654b65792063616e6e6f742062652030000000000000604482015290519081900360640190fd5b6001600160a01b03811633146113a2576001600160a01b03811660009081526012602052604090206003015460ff16156113385760405162461bcd60e51b8152600401808060200182810382526021815260200180614f8c6021913960400191505060405180910390fd5b6001600160a01b03808216600090815260136020908152604080832054909316825260129052206003015460ff16156113a25760405162461bcd60e51b8152600401808060200182810382526027815260200180614cb96027913960400191505060405180910390fd5b33600081815260126020908152604080832080546001600160a01b0390811685526013845282852080546001600160a01b031990811690915590871680865294839020805482168717905581541684178155815193845290519093927fde7b64a369e10562cc2e71f0f1f944eaf144b75fead6ecb51fac9c4dd693488592908290030190a250506001600055565b61babe81565b6002600054141561147c576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b600260005561148a8161417b565b60006015828154811061149957fe5b60009182526020808320919091015480835260149091526040909120600c81015491925090600160201b900460ff16611519576040805162461bcd60e51b815260206004820152601c60248201527f6d75737420626520612077686974656c6973742070726f706f73616c00000000604482015290519081900360640190fd5b600c8101805461ff0019166101001790556000611535846144e4565b600f5490915061019011611547575060005b80156115d857600c8201805462ff00001916620100001790556006820180546001600160a01b039081166000908152600e60205260408120805460ff191660019081179091559254600f805494850181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8029092018054929091166001600160a01b03199092169190911790555b60068201546001600160a01b039081166000908152601060205260409020805460ff19169055600283015461160d9116614723565b6040805182151581529051849186917f2094fc13d2ecb0acd6861e82bd006c7e5ab6f312ec0c6cdfe3d1a01ee54d885a9181900360200190a3505060016000555050565b600a5481565b6015818154811061166457fe5b600091825260209091200154905081565b60116020526000908152604090205460ff1681565b6013602052600090815260409020546001600160a01b031681565b600260005414156116eb576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b600260005581518351146117305760405162461bcd60e51b8152600401808060200182810382526032815260200180614e9b6032913960400191505060405180910390fd5b60005b83518110156117cc57600083828151811061174a57fe5b6020026020010151905082156117a657336000908152600d60205260408120865190919087908590811061177a57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205490505b6117c38583815181106117b557fe5b602002602001015182613949565b50600101611733565b505060016000555050565b600d60209081526000928352604080842090915290825290205481565b60006002600054141561183c576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b6002600055670de0b6b3a764000061185a898963ffffffff61477816565b11156118ad576040805162461bcd60e51b815260206004820152601960248201527f746f6f206d616e79207368617265732072657175657374656400000000000000604482015290519081900360640190fd5b6001600160a01b0385166000908152600e602052604090205460ff1661191a576040805162461bcd60e51b815260206004820152601f60248201527f74726962757465546f6b656e206973206e6f742077686974656c697374656400604482015290519081900360640190fd5b6001600160a01b0383166000908152600e602052604090205460ff16611987576040805162461bcd60e51b815260206004820152601a60248201527f7061796d656e74206973206e6f742077686974656c6973746564000000000000604482015290519081900360640190fd5b6001600160a01b0389166119da576040805162461bcd60e51b815260206004820152601560248201527406170706c6963616e742063616e6e6f74206265203605c1b604482015290519081900360640190fd5b6001600160a01b03891661dead14801590611a0057506001600160a01b03891661beef14155b8015611a1757506001600160a01b03891661babe14155b611a525760405162461bcd60e51b8152600401808060200182810382526024815260200180614d726024913960400191505060405180910390fd5b6001600160a01b03891660009081526012602052604090206005015415611aaa5760405162461bcd60e51b8152600401808060200182810382526025815260200180614f236025913960400191505060405180910390fd5b600086118015611add57506001600160a01b0385166000908152600080516020614ecd8339815191526020526040902054155b15611b235760c8600c5410611b235760405162461bcd60e51b8152600401808060200182810382526047815260200180614d966047913960600191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b158015611b7857600080fd5b505af1158015611b8c573d6000803e3d6000fd5b505050506040513d6020811015611ba257600080fd5b5051611bf5576040805162461bcd60e51b815260206004820152601d60248201527f7472696275746520746f6b656e207472616e73666572206661696c6564000000604482015290519081900360640190fd5b611c0261beef86886147d2565b611c0a614aad565b611c1b8a8a8a8a8a8a8a8a89613ac8565b505060095460001901600160005598975050505050505050565b336000908152601360209081526040808320546001600160a01b031683526012909152902060010154611ca0576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420612064656c656761746560901b604482015290519081900360640190fd5b60026000541415611ce6576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b600260009081556001600160a01b0382168082527fa30f7a7832bd8a7a8daa3a3f5b7a6f7cec6a2fbb1a121fa5b76520e44736771c602090815260408084205481516370a0823160e01b81523060048201529151611d9c94919391926370a08231926024808301939192829003018186803b158015611d6457600080fd5b505afa158015611d78573d6000803e3d6000fd5b505050506040513d6020811015611d8e57600080fd5b50519063ffffffff6138be16565b905060008111611dea576040805162461bcd60e51b81526020600482015260146024820152731b9bc81d1bdad95b9cc81d1bc818dbdb1b1958dd60621b604482015290519081900360640190fd5b6001600160a01b0382166000908152600e602052604090205460ff16611e415760405162461bcd60e51b8152600401808060200182810382526024815260200180614e216024913960400191505060405180910390fd5b6001600160a01b0382166000908152600080516020614ecd8339815191526020526040902054611ea25760405162461bcd60e51b8152600401808060200182810382526036815260200180614eed6036913960400191505060405180910390fd5b611eaf61dead83836147d2565b6040805182815290516001600160a01b038416917f9381e53ffdc9733a6783a6f8665be3f89c231bb81a6771996ed553b4e75c0fe3919081900360200190a250506001600055565b600b5481565b60035481565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b600e6020526000908152604090205460ff1681565b600f5490565b60155490565b60075481565b60025481565b60045481565b6000611f786002548361477890919063ffffffff16565b611f80610e7c565b101592915050565b60026000541415611fce576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b60026000908155338152601360209081526040808320546001600160a01b03168352601290915290206001015461203d576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420612064656c656761746560901b604482015290519081900360640190fd5b60085460048054604080516323b872dd60e01b815233938101939093523060248401526044830191909152516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561209d57600080fd5b505af11580156120b1573d6000803e3d6000fd5b505050506040513d60208110156120c757600080fd5b50516121045760405162461bcd60e51b815260040180806020018281038252602681526020018061501b6026913960400191505060405180910390fd5b6008546004546121239161beef916001600160a01b03909116906147d2565b600081815260146020526040902060018101546001600160a01b0316612190576040805162461bcd60e51b815260206004820181905260248201527f70726f706f73616c206d7573742068617665206265656e2070726f706f736564604482015290519081900360640190fd5b600c81015460ff16156121d45760405162461bcd60e51b8152600401808060200182810382526023815260200180614f486023913960400191505060405180910390fd5b600c8101546301000000900460ff1615612235576040805162461bcd60e51b815260206004820152601b60248201527f70726f706f73616c20686173206265656e2063616e63656c6c65640000000000604482015290519081900360640190fd5b80546001600160a01b03166000908152601260205260409020600501541561228e5760405162461bcd60e51b8152600401808060200182810382526025815260200180614f236025913960400191505060405180910390fd5b600081600501541180156122c9575060068101546001600160a01b03166000908152600080516020614ecd8339815191526020526040902054155b1561230f5760c8600c541061230f5760405162461bcd60e51b8152600401808060200182810382526048815260200180614fd36048913960600191505060405180910390fd5b600c810154600160201b900460ff161561245f5760068101546001600160a01b03166000908152600e602052604090205460ff161561237f5760405162461bcd60e51b81526004018080602001828103825260298152602001806150866029913960400191505060405180910390fd5b60068101546001600160a01b031660009081526010602052604090205460ff16156123f1576040805162461bcd60e51b815260206004820152601d60248201527f616c72656164792070726f706f73656420746f2077686974656c697374000000604482015290519081900360640190fd5b600f54610190116124335760405162461bcd60e51b8152600401808060200182810382526027815260200180614e456027913960400191505060405180910390fd5b60068101546001600160a01b03166000908152601060205260409020805460ff19166001179055612509565b600c81015465010000000000900460ff16156125095780546001600160a01b031660009081526011602052604090205460ff16156124e4576040805162461bcd60e51b815260206004820152601860248201527f616c72656164792070726f706f73656420746f206b69636b0000000000000000604482015290519081900360640190fd5b80546001600160a01b03166000908152601160205260409020805460ff191660011790555b600061257e600161257261251b610e7c565b6015541561256a576015805460149160009161253e90600163ffffffff6138be16565b8154811061254857fe5b906000526020600020015481526020019081526020016000206009015461256d565b60005b614830565b9063ffffffff61477816565b60098301819055336000818152601360205260408120546002860180546001600160a01b0319166001600160a01b039092169182179055600c8601805460ff19166001908117909155601580548083018255938190527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759093018890559154939450928392917f2a383a979381335e3eb401ac01dd8083e024ff0256bf5338456ffc0063390bbd91889161263291906138be565b604080519283526020830191909152818101879052519081900360600190a3505060016000555050565b600260005414156126a2576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b60026000908155338152601360209081526040808320546001600160a01b031683526012909152902060010154612711576040805162461bcd60e51b815260206004820152600e60248201526d6e6f7420612064656c656761746560901b604482015290519081900360640190fd5b336000908152601360209081526040808320546001600160a01b031680845260129092529091206015548410612788576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b6000601460006015878154811061279b57fe5b90600052602060002001548152602001908152602001600020905060038460ff1610612804576040805162461bcd60e51b81526020600482015260136024820152726d757374206265206c657373207468616e203360681b604482015290519081900360640190fd5b60008460ff16600281111561281557fe5b90508160090154612824610e7c565b1015612877576040805162461bcd60e51b815260206004820152601d60248201527f766f74696e6720706572696f6420686173206e6f742073746172746564000000604482015290519081900360640190fd5b6128848260090154611f61565b156128c05760405162461bcd60e51b81526004018080602001828103825260228152602001806150416022913960400191505060405180910390fd5b6001600160a01b0384166000908152600f8301602052604081205460ff1660028111156128e957fe5b1461293b576040805162461bcd60e51b815260206004820152601860248201527f6d656d6265722068617320616c726561647920766f7465640000000000000000604482015290519081900360640190fd5b600181600281111561294957fe5b14806129605750600281600281111561295e57fe5b145b6129b1576040805162461bcd60e51b815260206004820152601d60248201527f766f7465206d7573742062652065697468657220596573206f72204e6f000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600f830160205260409020805482919060ff191660018360028111156129e257fe5b021790555060018160028111156129f557fe5b1415612a6d576001830154600a830154612a149163ffffffff61477816565b600a8301556004830154861115612a2d57600483018690555b600e820154600b54600a54612a479163ffffffff61477816565b1115612a6857600b54600a54612a629163ffffffff61477816565b600e8301555b612aa0565b6002816002811115612a7b57fe5b1415612aa0576001830154600b830154612a9a9163ffffffff61477816565b600b8301555b836001600160a01b0316336001600160a01b0316877f804f03797630bf8b8a46b9371608abbf7d78a20df720e477bab641957ca68a2060158a81548110612ae357fe5b906000526020600020015489604051808381526020018260ff1660ff1681526020019250505060405180910390a45050600160005550505050565b600c5481565b6015546000908210612b77576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b6014600060158481548110612b8857fe5b90600052602060002001548152602001908152602001600020600c01600160068110612bb057fe5b602081049091015460ff601f9092166101000a9004169050919050565b60055481565b612bdb614aad565b600082815260146020526040808220815160c081019283905292600c909101916006918390855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612c02575094979650505050505050565b60015481565b6008546001600160a01b031681565b60095481565b60026000541415612c9e576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b600260009081556001600160a01b03821681526012602052604090206005810154612d09576040805162461bcd60e51b81526020600482015260166024820152751b595b58995c881b5d5cdd081899481a5b881a985a5b60521b604482015290519081900360640190fd5b6000816002015411612d62576040805162461bcd60e51b815260206004820152601a60248201527f6d656d626572206d757374206861766520736f6d65206c6f6f74000000000000604482015290519081900360640190fd5b612d6f8160040154612b24565b612daa5760405162461bcd60e51b815260040180806020018281038252604d815260200180614d00604d913960600191505060405180910390fd5b610f438260008360020154613e82565b60026000541415612e00576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b60026000908155818152601460205260409020600c81015460ff1615612e575760405162461bcd60e51b8152600401808060200182810382526023815260200180614f486023913960400191505060405180910390fd5b600c8101546301000000900460ff1615612ea25760405162461bcd60e51b81526004018080602001828103825260238152602001806150636023913960400191505060405180910390fd5b60018101546001600160a01b03163314612f03576040805162461bcd60e51b815260206004820152601e60248201527f736f6c656c79207468652070726f706f7365722063616e2063616e63656c0000604482015290519081900360640190fd5b600c8101805463ff00000019166301000000179055600181015460068201546005830154612f439261beef926001600160a01b0391821692911690614847565b60408051338152905183917fc215fed6680bb02d323dc3f8b8f85241572607538426059c9232601bd293c3be919081900360200190a250506001600055565b60106020526000908152604090205460ff1681565b60026000541415612fdd576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b6002600055612feb8161417b565b600060158281548110612ffa57fe5b60009182526020808320919091015480835260149091526040909120600c8101549192509065010000000000900460ff1661307c576040805162461bcd60e51b815260206004820152601d60248201527f6d7573742062652061206775696c64206b69636b2070726f706f73616c000000604482015290519081900360640190fd5b600c8101805461ff0019166101001790556000613098846144e4565b9050801561312857600c8201805462ff000019166201000017905581546001600160a01b0316600090815260126020526040902060058101859055600181015460028201546130e691614778565b60028201556001810154600a546131029163ffffffff6138be16565b600a556001810154600b5461311c9163ffffffff61477816565b600b5560006001909101555b81546001600160a01b039081166000908152601160205260409020805460ff19169055600283015461315a9116614723565b6040805182151581529051849186917f0e347d00d3e9e6cdff9e6c09092c9ff1bd448f9b3dfb7091b30939ec5e7a3c739181900360200190a3505060016000555050565b600260005414156131e4576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b60026000556131f28161417b565b60006015828154811061320157fe5b60009182526020808320919091015480835260149091526040909120600c81015491925090600160201b900460ff1615801561324b5750600c81015465010000000000900460ff16155b61329c576040805162461bcd60e51b815260206004820152601b60248201527f6d7573742062652061207374616e646172642070726f706f73616c0000000000604482015290519081900360640190fd5b600c8101805461ff00191661010017905560006132b8846144e4565b9050670de0b6b3a76400006132ea83600401546125728560030154612572600b54600a5461477890919063ffffffff16565b11156132f4575060005b60088201546001600160a01b03166000908152600080516020614ecd83398151915260205260409020546007830154111561332d575060005b60008260050154118015613368575060068201546001600160a01b03166000908152600080516020614ecd8339815191526020526040902054155b8015613377575060c8600c5410155b15613380575060005b80156136b557600c8201805462ff000019166201000017905581546001600160a01b031660009081526012602052604090206003015460ff161561345757600382015482546001600160a01b03166000908152601260205260409020600101546133ef9163ffffffff61477816565b82546001600160a01b039081166000908152601260205260408082206001019390935560048501548554909216815291909120600201546134359163ffffffff61477816565b82546001600160a01b031660009081526012602052604090206002015561359a565b81546001600160a01b03908116600090815260136020908152604080832054909316825260129052206003015460ff16156134db5781546001600160a01b0390811660009081526013602090815260408083205490931680835283832080546001600160a01b03199081168317909155601290925292909120805490911690911790555b6040805160c08101825283546001600160a01b0390811680835260038087015460208086019182526004808a0154878901908152600160608901818152600060808b0181815260a08c01828152998252601287528c82209b518c54908c166001600160a01b0319918216178d559751938c0193909355925160028b015551958901805496151560ff1990971696909617909555935190870155925160059095019490945586549092168083526013909152929020805490911690911790555b6003820154600a546135b19163ffffffff61477816565b600a556004820154600b546135cb9163ffffffff61477816565b600b5560068201546001600160a01b03166000908152600080516020614ecd8339815191526020526040902054158015613609575060008260050154115b1561361857600c805460010190555b6006820154600583015461363d9161beef9161dead916001600160a01b031690614847565b8154600883015460078401546136659261dead926001600160a01b0391821692911690614847565b60088201546001600160a01b03166000908152600080516020614ecd83398151915260205260409020541580156136a0575060008260070154115b156136b057600c80546000190190555b6136e0565b6001820154600683015460058401546136e09261beef926001600160a01b0391821692911690614847565b60028201546136f7906001600160a01b0316614723565b6040805182151581529051849186917f86f74240ecee9e4230d26ff92e17fee978460d9c0f78f5c88b2864c9e7a494279181900360200190a3505060016000555050565b61beef81565b61dead81565b60006002600054141561378f576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ce0833981519152604482015290519081900360640190fd5b60026000556001600160a01b0383166137ef576040805162461bcd60e51b815260206004820152601a60248201527f6d7573742070726f7669646520746f6b656e2061646472657373000000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600e602052604090205460ff16156138475760405162461bcd60e51b81526004018080602001828103825260298152602001806150866029913960400191505060405180910390fd5b600f54610190116138895760405162461bcd60e51b8152600401808060200182810382526026815260200180614fad6026913960400191505060405180910390fd5b613891614aad565b600160808201526138aa60008080808881808a89613ac8565b505060095460001901600160005592915050565b600061390083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614863565b9392505050565b600061390083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506148fa565b336000908152600d602090815260408083206001600160a01b03861684529091529020548111156139b8576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015290519081900360640190fd5b6139c333838361495f565b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b158015613a1257600080fd5b505af1158015613a26573d6000803e3d6000fd5b505050506040513d6020811015613a3c57600080fd5b5051613a81576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b604080516001600160a01b038416815260208101839052815133927f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb928290030190a25050565b613ad0614acb565b604051806101e001604052808b6001600160a01b03168152602001336001600160a01b0316815260200160006001600160a01b031681526020018a8152602001898152602001888152602001876001600160a01b03168152602001868152602001856001600160a01b03168152602001600081526020016000815260200160008152602001838152602001848152602001600081525090508060146000600954815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060e082015181600701556101008201518160080160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01906006613cc1929190614b74565b506101a08201518051613cde91600d840191602090910190614c06565b506101c082015181600e0155905050600060136000336001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050806001600160a01b0316336001600160a01b03168c6001600160a01b03167fa763e0f5e4f4e33a3397b4ba22677c9b6fd2075ed6504596333006ff2f3e38748d8d8d8d8d8d8d8d600954604051808a8152602001898152602001888152602001876001600160a01b03166001600160a01b03168152602001868152602001856001600160a01b03166001600160a01b031681526020018060200184600660200280838360005b83811015613de8578181015183820152602001613dd0565b50505050905001838152602001828103825285818151815260200191508051906020019080838360005b83811015613e2a578181015183820152602001613e12565b50505050905090810190601f168015613e575780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390a45050600980546001019055505050505050505050565b6000613e9b600b54600a5461477890919063ffffffff16565b6001600160a01b0385166000908152601260205260409020600181015491925090841115613f06576040805162461bcd60e51b8152602060048201526013602482015272696e73756666696369656e742073686172657360681b604482015290519081900360640190fd5b8281600201541015613f53576040805162461bcd60e51b81526020600482015260116024820152701a5b9cdd59999a58da595b9d081b1bdbdd607a1b604482015290519081900360640190fd5b613f608160040154612b24565b613f9b5760405162461bcd60e51b815260040180806020018281038252604d815260200180614d00604d913960600191505060405180910390fd5b6000613fad858563ffffffff61477816565b6001830154909150613fc5908663ffffffff6138be16565b60018301556002820154613fdf908563ffffffff6138be16565b6002830155600a54613ff7908663ffffffff6138be16565b600a55600b5461400d908563ffffffff6138be16565b600b5560005b600f548110156141385761dead6000908152600d602052600f805461407b91600080516020614ecd833981519152918491908690811061404f57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484876149bf565b9050801561412f5761dead6000908152600d602052600f80548392600080516020614ecd833981519152929091869081106140b257fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220805495909503909455918b168252600d909252908120600f8054849391908690811061410357fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020805490910190555b50600101614013565b506040805186815260208101869052815133927fcad1a1c68982832d9abc314de8a1e5d5e8c81b0588961e360766736d10c3be1a928290030190a2505050505050565b60155481106141cb576040805162461bcd60e51b81526020600482015260176024820152761c1c9bdc1bdcd85b08191bd95cc81b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b6141d3614acb565b60146000601584815481106141e457fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b039081168252600183015481169582019590955260028201548516818501526003820154606082015260048201546080820152600582015460a0820152600680830154861660c080840191909152600784015460e084015260088401549096166101008301526009830154610120830152600a830154610140830152600b83015461016083015284519586019485905290949193610180860193600c86019291908390855b825461010083900a900460ff1615158152602060019283018181049485019490930390920291018084116142ba57505050928452505050600d8201805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815293820193929183018282801561437d5780601f106143525761010080835404028352916020019161437d565b820191906000526020600020905b81548152906001019060200180831161436057829003601f168201915b50505050508152602001600e8201548152505090506143b260035461257260025484610120015161477890919063ffffffff16565b6143ba610e7c565b10156143f75760405162461bcd60e51b8152600401808060200182810382526025815260200180614d4d6025913960400191505060405180910390fd5b610180810151602001511561443d5760405162461bcd60e51b81526004018080602001828103825260238152602001806150af6023913960400191505060405180910390fd5b8115806144a5575060146000601561445c85600163ffffffff6138be16565b8154811061446657fe5b90600052602060002001548152602001908152602001600020600c0160016006811061448e57fe5b602081049091015460ff601f9092166101000a9004165b6144e05760405162461bcd60e51b8152600401808060200182810382526023815260200180614dfe6023913960400191505060405180910390fd5b5050565b60006144ee614acb565b60146000601585815481106144ff57fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b039081168252600183015481169582019590955260028201548516818501526003820154606082015260048201546080820152600582015460a0820152600680830154861660c080840191909152600784015460e084015260088401549096166101008301526009830154610120830152600a830154610140830152600b83015461016083015284519586019485905290949193610180860193600c86019291908390855b825461010083900a900460ff1615158152602060019283018181049485019490930390920291018084116145d557505050928452505050600d8201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156146985780601f1061466d57610100808354040283529160200191614698565b820191906000526020600020905b81548152906001019060200180831161467b57829003601f168201915b50505050508152602001600e820154815250509050806101600151816101400151119150806101c001516146eb6005546146df600b54600a5461477890919063ffffffff16565b9063ffffffff614a1316565b10156146f657600091505b80516001600160a01b03166000908152601260205260409020600501541561471d57600091505b50919050565b6008546006546147429161beef9133916001600160a01b031690614847565b6008546006546004546147759261beef9285926001600160a01b03909216916147709163ffffffff6138be16565b614847565b50565b600082820183811015613900576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b039283166000908152600d602090815260408083209490951682529283528381208054830190557fa30f7a7832bd8a7a8daa3a3f5b7a6f7cec6a2fbb1a121fa5b76520e44736771c90925291902080549091019055565b6000818310156148405781613900565b5090919050565b61485284838361495f565b61485d8383836147d2565b50505050565b600081848411156148f25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156148b757818101518382015260200161489f565b50505050905090810190601f1680156148e45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836149495760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156148b757818101518382015260200161489f565b50600083858161495557fe5b0495945050505050565b6001600160a01b039283166000908152600d60209081526040808320949095168252928352838120805483900390557fa30f7a7832bd8a7a8daa3a3f5b7a6f7cec6a2fbb1a121fa5b76520e44736771c9092529190208054919091039055565b6000816149cb57600080fd5b836149d857506000613900565b838302838582816149e557fe5b0414156149fe578281816149f557fe5b04915050613900565b83838681614a0857fe5b040295945050505050565b600082614a2257506000610e76565b82820282848281614a2f57fe5b04146139005760405162461bcd60e51b8152600401808060200182810382526021815260200180614f6b6021913960400191505060405180910390fd5b6040518060c0016040528060006001600160a01b03168152602001600081526020016000815260200160001515815260200160008152602001600081525090565b6040518060c001604052806006906020820280388339509192915050565b604051806101e0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001614b60614aad565b815260200160608152602001600081525090565b600183019183908215614bf65791602002820160005b83821115614bc757835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302614b8a565b8015614bf45782816101000a81549060ff0219169055600101602081600001049283019260010302614bc7565b505b50614c02929150614c80565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614c4757805160ff1916838001178555614c74565b82800160010185558215614c74579182015b82811115614c74578251825591602001919060010190614c59565b50614c02929150614c9e565b610ea891905b80821115614c0257805460ff19168155600101614c86565b610ea891905b80821115614c025760008155600101614ca456fe63616e6e6f74206f7665727772697465206578697374696e672064656c6567617465206b6579735265656e7472616e637947756172643a207265656e7472616e742063616c6c0063616e6e6f7420726167657175697420756e74696c206869676865737420696e6465782070726f706f73616c206d656d62657220766f74656420594553206f6e2069732070726f63657373656470726f706f73616c206973206e6f7420726561647920746f2062652070726f6365737365646170706c6963616e7420616464726573732063616e6e6f7420626520726573657276656463616e6e6f74207375626d6974206d6f726520747269627574652070726f706f73616c7320666f72206e657720746f6b656e73202d206775696c6462616e6b2069732066756c6c6d656d626572206d757374206e6f7420616c7265616479206265206a61696c656470726576696f75732070726f706f73616c206d7573742062652070726f636573736564746f6b656e20746f20636f6c6c656374206d7573742062652077686974656c697374656463616e6e6f742073706f6e736f72206d6f72652077686974656c6973742070726f706f73616c736d656d626572206d7573742068617665206174206c65617374206f6e65207368617265206f72206f6e65206c6f6f74746f6b656e7320616e6420616d6f756e747320617272617973206d757374206265206d61746368696e67206c656e67746873dc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a746f6b656e20746f20636f6c6c656374206d7573742068617665206e6f6e2d7a65726f206775696c642062616e6b2062616c616e636570726f706f73616c206170706c6963616e74206d757374206e6f74206265206a61696c656470726f706f73616c2068617320616c7265616479206265656e2073706f6e736f726564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7763616e6e6f74206f7665727772697465206578697374696e67206d656d6265727363616e6e6f74207375626d6974206d6f72652077686974656c6973742070726f706f73616c7363616e6e6f742073706f6e736f72206d6f726520747269627574652070726f706f73616c7320666f72206e657720746f6b656e73202d206775696c6462616e6b2069732066756c6c70726f706f73616c206465706f73697420746f6b656e207472616e73666572206661696c656470726f706f73616c20766f74696e6720706572696f6420686173206578706972656470726f706f73616c2068617320616c7265616479206265656e2063616e63656c6c656463616e6e6f7420616c726561647920686176652077686974656c69737465642074686520746f6b656e70726f706f73616c2068617320616c7265616479206265656e2070726f636573736564a265627a7a72315820eba0b3393f41c9b9cb3244afe1f8c1d338844a4dcaa31cdc4cb50b947eba16cc64736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000438000000000000000000000000000000000000000000000000000000000000000230000000000000000000000000000000000000000000000000000000000000023000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20000000000000000000000000c89b6f0146642688bb254bf93c28fccf1e182c810000000000000000000000005608169973d639649196a84ee4085a708bcbf3970000000000000000000000007587caefc8096f5f40acb83a09df031a018c66ec00000000000000000000000019bc62ff7cd9ffd6bdced9802ff718f09f7259f10000000000000000000000003edeb7ccf325d0aec03cffb89768da2d6f0c26f10000000000000000000000000f50d31b3eaefd65236dd3736b863cffa4c63c4e000000000000000000000000fa9b5f7fdc8ab34aaf3099889475d47febf830d7000000000000000000000000fbe18f066f9583dac19c88444bc2005c99881e56000000000000000000000000320cf69bf1d9b3f942d09dce2fc7159aa1ff80d7000000000000000000000000d3f03984a90fd15e909b2e9467e98cadea181da30000000000000000000000000000000000000000000000000000000000000009000000000000000000000000c00e94cb662c3520282e6f5717214004a7f268880000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e364300000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f40000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407
-----Decoded View---------------
Arg [0] : _summoners (address[]): 0x1C0Aa8cCD568d90d61659F060D1bFb1e6f855A20,0xC89b6f0146642688bb254bF93C28fcCF1E182C81,0x5608169973d639649196A84EE4085a708bcBf397,0x7587cAefc8096f5F40ACB83A09Df031a018C66ec,0x19bC62FF7CD9FFD6BdCed9802fF718f09F7259f1,0x3eDEb7Ccf325d0aEc03Cffb89768dA2d6f0C26F1,0x0f50D31B3eaefd65236dd3736B863CfFa4c63C4E,0xfA9b5f7fDc8AB34AAf3099889475d47febF830D7,0xfbe18f066F9583dAc19C88444BC2005c99881E56,0x320CF69bF1d9b3F942d09Dce2fC7159AA1Ff80D7,0xD3F03984a90fd15E909B2E9467E98cADeA181da3
Arg [1] : _approvedTokens (address[]): 0xc00e94Cb662C3520282E6f5717214004A7f26888,0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5,0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643,0x39AA39c021dfbaE8faC545936693aC917d5E7563,0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9,0xC11b1268C1A384e55C48c2391d8d480264A3A7F4,0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E,0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1,0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407
Arg [2] : _periodDuration (uint256): 17280
Arg [3] : _votingPeriodLength (uint256): 35
Arg [4] : _gracePeriodLength (uint256): 35
Arg [5] : _proposalDeposit (uint256): 0
Arg [6] : _dilutionBound (uint256): 3
Arg [7] : _processingReward (uint256): 0
-----Encoded View---------------
30 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [2] : 0000000000000000000000000000000000000000000000000000000000004380
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000023
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000023
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [9] : 0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20
Arg [10] : 000000000000000000000000c89b6f0146642688bb254bf93c28fccf1e182c81
Arg [11] : 0000000000000000000000005608169973d639649196a84ee4085a708bcbf397
Arg [12] : 0000000000000000000000007587caefc8096f5f40acb83a09df031a018c66ec
Arg [13] : 00000000000000000000000019bc62ff7cd9ffd6bdced9802ff718f09f7259f1
Arg [14] : 0000000000000000000000003edeb7ccf325d0aec03cffb89768da2d6f0c26f1
Arg [15] : 0000000000000000000000000f50d31b3eaefd65236dd3736b863cffa4c63c4e
Arg [16] : 000000000000000000000000fa9b5f7fdc8ab34aaf3099889475d47febf830d7
Arg [17] : 000000000000000000000000fbe18f066f9583dac19c88444bc2005c99881e56
Arg [18] : 000000000000000000000000320cf69bf1d9b3f942d09dce2fc7159aa1ff80d7
Arg [19] : 000000000000000000000000d3f03984a90fd15e909b2e9467e98cadea181da3
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [21] : 000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888
Arg [22] : 0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed5
Arg [23] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Arg [24] : 00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563
Arg [25] : 000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9
Arg [26] : 000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4
Arg [27] : 0000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e
Arg [28] : 000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1
Arg [29] : 000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407
Deployed Bytecode Sourcemap
10637:35138:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10637:35138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17240:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17240:45:0;;:::i;:::-;;;;;-1:-1:-1;;;;;17240:45:0;-1:-1:-1;;;;;17240:45:0;;;;;;-1:-1:-1;;;;;17240:45:0;-1:-1:-1;;;;;17240:45:0;;;;;;-1:-1:-1;;;;;17240:45:0;-1:-1:-1;;;;;17240:45:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17240:45:0;-1:-1:-1;;;;;17240:45:0;;;;;;;;;;;-1:-1:-1;;;;;17240:45:0;-1:-1:-1;;;;;17240:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17240:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11259:31;;;:::i;:::-;;;;;;;;;;;;;;;;44155:355;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;44155:355:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43607:126;;;:::i;17122:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17122:41:0;-1:-1:-1;;;;;17122:41:0;;:::i;:::-;;;;-1:-1:-1;;;;;17122:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39596:126;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;39596:126:0;;;;;;;;:::i;:::-;;22804:659;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;22804:659:0;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;22804:659:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22804:659:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;22804:659:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;22804:659:0;;-1:-1:-1;22804:659:0;;-1:-1:-1;;;;;22804:659:0:i;37208:157::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37208:157:0;;;;;;;:::i;16969:31::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16969:31:0;;:::i;:::-;;;;-1:-1:-1;;;;;16969:31:0;;;;;;;;;;;;;;42062:836;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42062:836:0;-1:-1:-1;;;;;42062:836:0;;:::i;14508:47::-;;;:::i;33387:954::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33387:954:0;;:::i;14159:30::-;;;:::i;17294:::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17294:30:0;;:::i;17067:46::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17067:46:0;-1:-1:-1;;;;;17067:46:0;;:::i;:::-;;;;;;;;;;;;;;;;;;17170:61;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17170:61:0;-1:-1:-1;;;;;17170:61:0;;:::i;39730:543::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39730:543:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;39730:543:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39730:543:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39730:543:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39730:543:0;;;;;;;;-1:-1:-1;39730:543:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;39730:543:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39730:543:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39730:543:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39730:543:0;;-1:-1:-1;;;;39730:543:0;;;;-1:-1:-1;39730:543:0;:::i;14562:73::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14562:73:0;;;;;;;;;;:::i;20296:1791::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;20296:1791:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;20296:1791:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20296:1791:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;20296:1791:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;20296:1791:0;;-1:-1:-1;20296:1791:0;;-1:-1:-1;;;;;20296:1791:0:i;40652:686::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40652:686:0;-1:-1:-1;;;;;40652:686:0;;:::i;14231:28::-;;;:::i;10951:32::-;;;:::i;44003:144::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;44003:144:0;;;;;;;;;;:::i;16916:46::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16916:46:0;-1:-1:-1;;;;;16916:46:0;;:::i;44518:102::-;;;:::i;43741:110::-;;;:::i;11370:28::-;;;:::i;10878:33::-;;;:::i;11023:30::-;;;:::i;43245:169::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43245:169:0;;:::i;24854:2455::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24854:2455:0;;:::i;27372:1979::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27372:1979:0;;;;;;;;;:::i;14299:39::-;;;:::i;42991:246::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42991:246:0;;:::i;11126:28::-;;;:::i;43859:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43859:136:0;;:::i;:::-;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;43859:136:0;;;;;;;;;;;;;;;;10780:29;;;:::i;11453:27::-;;;:::i;14091:32::-;;;:::i;39077:511::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39077:511:0;-1:-1:-1;;;;;39077:511:0;;:::i;41461:593::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41461:593:0;;:::i;17009:51::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17009:51:0;-1:-1:-1;;;;;17009:51:0;;:::i;34349:1079::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34349:1079:0;;:::i;29359:4020::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29359:4020:0;;:::i;14453:48::-;;;:::i;14399:47::-;;;:::i;22095:701::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;22095:701:0;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;22095:701:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22095:701:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;22095:701:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;22095:701:0;;-1:-1:-1;22095:701:0;;-1:-1:-1;;;;;22095:701:0:i;17240:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17240:45:0;;;;;;;;;;;;;-1:-1:-1;;;;;17240:45:0;;;;;;;;;;;;;-1:-1:-1;;;;;17240:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17240:45:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17240:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11259:31::-;;;;:::o;44155:355::-;-1:-1:-1;;;;;44278:22:0;;44253:4;44278:22;;;:7;:22;;;;;:29;;;;;44270:63;;;;;-1:-1:-1;;;44270:63:0;;;;;;;;;;;;-1:-1:-1;;;44270:63:0;;;;;;;;;;;;;;;44368:13;:20;44352:36;;44344:72;;;;;-1:-1:-1;;;44344:72:0;;;;;;;;;;;;-1:-1:-1;;;44344:72:0;;;;;;;;;;;;;;;44434:9;:39;44444:13;44458;44444:28;;;;;;;;;;;;;;;;;;;;44434:39;;;;;;;;;;;;;;;-1:-1:-1;;;;;44434:68:0;;;;:53;;:68;;;;;;;;;-1:-1:-1;44155:355:0;;;;;:::o;43607:126::-;43656:7;43683:42;43710:14;;43683:22;43691:13;;43683:3;:7;;:22;;;;:::i;:::-;:26;:42;:26;:42;:::i;:::-;43676:49;;43607:126;;:::o;17122:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17122:41:0;;;;;;;;;;;;;;:::o;39596:126::-;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;39683:31;39700:5;39707:6;39683:16;:31::i;:::-;-1:-1:-1;;9638:1:0;10600:7;:22;39596:126::o;22804:659::-;22911:18;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;22942:20;;:::i;:::-;-1:-1:-1;;;;;;22965:21:0;;;;;;;:7;:21;;;;;;;;;22942:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23007:17;;;:36;;;23042:1;23028:6;:11;;;:15;23007:36;22999:96;;;;-1:-1:-1;;;22999:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23114:21:0;;;;;;:7;:21;;;;;:28;;;:33;23106:79;;;;-1:-1:-1;;;23106:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23198:20;;:::i;:::-;23308:4;23297:8;;;:15;23339:81;23355:12;23297:15;;;;;;23405:7;23297:5;23339:15;:81::i;:::-;-1:-1:-1;;23438:13:0;;23454:1;10600:7;:22;-1:-1:-1;;23438:17:0;;22804:659;-1:-1:-1;;;22804:659:0:o;37208:157::-;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;;;17380:10;17372:19;;:7;:19;;;;;:26;;;:30;;;:62;;-1:-1:-1;17414:10:0;17433:1;17406:19;;;:7;:19;;;;;:24;;;:28;;17372:62;17364:87;;;;;-1:-1:-1;;;17364:87:0;;;;;;;;;;;;-1:-1:-1;;;17364:87:0;;;;;;;;;;;;;;;37310:47;37320:10;37332:12;37346:10;37310:9;:47::i;16969:31::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16969:31:0;;-1:-1:-1;16969:31:0;:::o;42062:836::-;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;;;17531:10;17523:19;;:7;:19;;;;;:26;;;17515:60;;;;;-1:-1:-1;;;17515:60:0;;;;;;;;;;;;-1:-1:-1;;;17515:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42168:28:0;;42160:67;;;;;-1:-1:-1;;;42160:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42330:28:0;;42348:10;42330:28;42326:264;;-1:-1:-1;;;;;42384:23:0;;;;;;:7;:23;;;;;:30;;;;;42383:31;42375:77;;;;-1:-1:-1;;;42375:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42484:42:0;;;42476:51;42484:42;;;:26;:42;;;;;;;;;;;;42476:51;;:7;:51;;;:58;;;;;42475:59;42467:111;;;;-1:-1:-1;;;42467:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42634:10;42602:21;42626:19;;;:7;:19;;;;;;;;42683:18;;-1:-1:-1;;;;;42683:18:0;;;42656:46;;:26;:46;;;;;:59;;-1:-1:-1;;;;;;42656:59:0;;;;;;42726:42;;;;;;;;;;:55;;;;;;;;42792:35;;;;;;;42845:45;;;;;;;42626:19;;42634:10;42845:45;;;;;;;;;-1:-1:-1;;9638:1:0;10600:7;:22;42062:836::o;14508:47::-;14548:6;14508:47;:::o;33387:954::-;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;33475:45;33506:13;33475:30;:45::i;:::-;33533:18;33554:13;33568;33554:28;;;;;;;;;;;;;;;;;;;;;33621:21;;;:9;:21;;;;;;;33663:14;;;:17;33554:28;;-1:-1:-1;33621:21:0;-1:-1:-1;;;33663:17:0;;;;33655:58;;;;;-1:-1:-1;;;33655:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33726:14;;;:24;;-1:-1:-1;;33726:24:0;;;;;:17;33791:23;33800:13;33791:8;:23::i;:::-;33831:14;:21;33776:38;;-1:-1:-1;12170:3:0;-1:-1:-1;33827:98:0;;-1:-1:-1;33908:5:0;33827:98;33941:7;33937:202;;;33965:14;;;:24;;-1:-1:-1;;33965:24:0;;;;;34040:21;;;;;-1:-1:-1;;;;;34040:21:0;;;33965:17;34017:46;;;:14;33965:17;34017:46;;;;:53;;-1:-1:-1;;34017:53:0;33985:4;34017:53;;;;;;34105:21;;34085:14;27:10:-1;;23:18;;;45:23;;34085:42:0;;;;;;;;;34105:21;;;;-1:-1:-1;;;;;;34085:42:0;;;;;;;;;33937:202;34179:21;;;;-1:-1:-1;;;;;34179:21:0;;;34205:5;34151:51;;;:19;:51;;;;;:59;;-1:-1:-1;;34151:59:0;;;34238:16;;;;34223:32;;34238:16;34223:14;:32::i;:::-;34273:60;;;;;;;;;;34313:10;;34298:13;;34273:60;;;;;;;;;-1:-1:-1;;9638:1:0;10600:7;:22;-1:-1:-1;;33387:954:0:o;14159:30::-;;;;:::o;17294:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17294:30:0;:::o;17067:46::-;;;;;;;;;;;;;;;:::o;17170:61::-;;;;;;;;;;;;-1:-1:-1;;;;;17170:61:0;;:::o;39730:543::-;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;39873:14;;39856:13;;:31;39848:94;;;;-1:-1:-1;;;39848:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39960:9;39955:311;39977:6;:13;39973:1;:17;39955:311;;;40012:22;40037:7;40045:1;40037:10;;;;;;;;;;;;;;40012:35;;40066:3;40062:133;;;40157:10;40139:29;;;;:17;:29;;;;;40169:9;;40139:29;;;40169:6;;40176:1;;40169:9;;;;;;;;;;;;-1:-1:-1;;;;;40139:40:0;-1:-1:-1;;;;;40139:40:0;;;;;;;;;;;;;40122:57;;40062:133;40211:43;40228:6;40235:1;40228:9;;;;;;;;;;;;;;40239:14;40211:16;:43::i;:::-;-1:-1:-1;39992:3:0;;39955:311;;;-1:-1:-1;;9638:1:0;10600:7;:22;-1:-1:-1;;39730:543:0:o;14562:73::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20296:1791::-;20612:18;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;12065:6;20651:34;:15;20671:13;20651:34;:19;:34;:::i;:::-;:67;;20643:105;;;;;-1:-1:-1;;;20643:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20767:28:0;;;;;;:14;:28;;;;;;;;20759:72;;;;;-1:-1:-1;;;20759:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20850:28:0;;;;;;:14;:28;;;;;;;;20842:67;;;;;-1:-1:-1;;;20842:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20928:23:0;;20920:57;;;;;-1:-1:-1;;;20920:57:0;;;;;;;;;;;;-1:-1:-1;;;20920:57:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20996:18:0;;14439:6;20996:18;;;;:41;;-1:-1:-1;;;;;;21018:19:0;;14494:6;21018:19;;20996:41;:63;;;;-1:-1:-1;;;;;;21041:18:0;;14548:6;21041:18;;20996:63;20988:112;;;;-1:-1:-1;;;20988:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21119:18:0;;;;;;:7;:18;;;;;:25;;;:30;21111:80;;;;-1:-1:-1;;;21111:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21225:1;21208:14;:18;:65;;;;-1:-1:-1;;;;;;21230:38:0;;:24;:38;;;-1:-1:-1;;;;;;;;;;;21230:24:0;:38;:24;:38;;;:43;21208:65;21204:230;;;12265:3;21298:20;;:48;21290:132;;;;-1:-1:-1;;;21290:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21555:76;;;-1:-1:-1;;;21555:76:0;;21589:10;21555:76;;;;21609:4;21555:76;;;;;;;;;;;;-1:-1:-1;;;;;21555:33:0;;;;;:76;;;;;;;;;;;;;;-1:-1:-1;21555:33:0;:76;;;5:2:-1;;;;30:1;27;20:12;5:2;21555:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21555:76:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21555:76:0;21547:118;;;;;-1:-1:-1;;;21547:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21676:56;14494:6;21703:12;21717:14;21676:18;:56::i;:::-;21745:20;;:::i;:::-;21846:136;21862:9;21873:15;21890:13;21905:14;21921:12;21935:16;21953:12;21967:7;21976:5;21846:15;:136::i;:::-;-1:-1:-1;;22000:13:0;;-1:-1:-1;;22000:17:0;9638:1;10600:7;:22;20296:1791;;-1:-1:-1;;;;;;;;20296:1791:0:o;40652:686::-;17679:10;17701:1;17652:38;;;:26;:38;;;;;;;;;-1:-1:-1;;;;;17652:38:0;17644:47;;:7;:47;;;;;17652:38;17644:54;;17636:85;;;;;-1:-1:-1;;;17636:85:0;;;;;;;;;;;;-1:-1:-1;;;17636:85:0;;;;;;;;;;;;;;;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;;;-1:-1:-1;;;;;40803:31:0;;;;;:24;;:31;;;:24;:31;;;;40760:38;;-1:-1:-1;;;40760:38:0;;40792:4;40760:38;;;;;;:75;;40803:31;;;;40760:23;;:38;;;;;40803:24;;40760:38;;;;;40803:31;40760:38;;;5:2:-1;;;;30:1;27;20:12;5:2;40760:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40760:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40760:38:0;;:75;:42;:75;:::i;:::-;40734:101;;40985:1;40967:15;:19;40959:52;;;;;-1:-1:-1;;;40959:52:0;;;;;;;;;;;;-1:-1:-1;;;40959:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41030:21:0;;;;;;:14;:21;;;;;;;;41022:70;;;;-1:-1:-1;;;41022:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41111:31:0;;41145:1;41111:31;;;-1:-1:-1;;;;;;;;;;;41111:24:0;:31;:24;:31;;;41103:102;;;;-1:-1:-1;;;41103:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41226:49;14439:6;41252:5;41259:15;41226:18;:49::i;:::-;41291:39;;;;;;;;-1:-1:-1;;;;;41291:39:0;;;;;;;;;;;;;-1:-1:-1;;9638:1:0;10600:7;:22;40652:686::o;14231:28::-;;;;:::o;10951:32::-;;;;:::o;44003:144::-;-1:-1:-1;;;;;44109:23:0;;;44082:7;44109:23;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;;44003:144::o;16916:46::-;;;;;;;;;;;;;;;:::o;44518:102::-;44591:14;:21;44518:102;:::o;43741:110::-;43823:13;:20;43741:110;:::o;11370:28::-;;;;:::o;10878:33::-;;;;:::o;11023:30::-;;;;:::o;43245:169::-;43322:4;43368:38;43387:18;;43368:14;:18;;:38;;;;:::i;:::-;43346:18;:16;:18::i;:::-;:60;;;43245:169;-1:-1:-1;;43245:169:0:o;24854:2455::-;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;;;17679:10;17652:38;;:26;:38;;;;;;;;;-1:-1:-1;;;;;17652:38:0;17644:47;;:7;:47;;;;;17652:38;17644:54;;17636:85;;;;;-1:-1:-1;;;17636:85:0;;;;;;;;;;;;-1:-1:-1;;;17636:85:0;;;;;;;;;;;;;;;25067:12;;25121:15;;;25060:77;;;-1:-1:-1;;;25060:77:0;;25094:10;25060:77;;;;;;;25114:4;25060:77;;;;;;;;;;;;-1:-1:-1;;;;;25067:12:0;;;;25060:33;;:77;;;;;;;;;;;;;;;25067:12;;25060:77;;;5:2:-1;;;;30:1;27;20:12;5:2;25060:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25060:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25060:77:0;25052:128;;;;-1:-1:-1;;;25052:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25218:12;;25232:15;;25191:57;;14494:6;;-1:-1:-1;;;;;25218:12:0;;;;25191:18;:57::i;:::-;25261:25;25289:21;;;:9;:21;;;;;25331:17;;;;-1:-1:-1;;;;;25331:17:0;25323:76;;;;;-1:-1:-1;;;25323:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25419:14;;;:17;;;25418:18;25410:66;;;;-1:-1:-1;;;25410:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25496:14;;;:17;;;;;;25495:18;25487:58;;;;;-1:-1:-1;;;25487:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25572:18;;-1:-1:-1;;;;;25572:18:0;25564:27;;;;:7;:27;;;;;:34;;;:39;25556:89;;;;-1:-1:-1;;;25556:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25688:1;25662:8;:23;;;:27;:83;;;;-1:-1:-1;25718:21:0;;;;-1:-1:-1;;;;;25718:21:0;25693:24;:47;;;-1:-1:-1;;;;;;;;;;;25693:24:0;:47;:24;:47;;;:52;25662:83;25658:249;;;12265:3;25770:20;;:48;25762:133;;;;-1:-1:-1;;;25762:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25954:14;;;:17;-1:-1:-1;;;25954:17:0;;;;25950:667;;;26020:21;;;;-1:-1:-1;;;;;26020:21:0;25997:46;;;;:14;:46;;;;;;;;25996:47;25988:101;;;;-1:-1:-1;;;25988:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26141:21;;;;-1:-1:-1;;;;;26141:21:0;26113:51;;;;:19;:51;;;;;;;;26112:52;26104:94;;;;;-1:-1:-1;;;26104:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26221:14;:21;12170:3;-1:-1:-1;26213:101:0;;;;-1:-1:-1;;;26213:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26357:21;;;;-1:-1:-1;;;;;26357:21:0;26329:51;;;;:19;:51;;;;;:58;;-1:-1:-1;;26329:58:0;26383:4;26329:58;;;25950:667;;;26443:14;;;:17;;;;;;26439:178;;;26501:18;;-1:-1:-1;;;;;26501:18:0;26486:34;;;;:14;:34;;;;;;;;26485:35;26477:72;;;;;-1:-1:-1;;;26477:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26579:18;;-1:-1:-1;;;;;26579:18:0;26564:34;;;;:14;:34;;;;;:41;;-1:-1:-1;;26564:41:0;26601:4;26564:41;;;26439:178;26677:22;26702:169;26869:1;26702:162;26720:18;:16;:18::i;:::-;26753:13;:20;:25;:100;;26795:13;26809:20;;26785:9;;:53;;26809:27;;26834:1;26809:27;:24;:27;:::i;:::-;26795:42;;;;;;;;;;;;;;;;26785:53;;;;;;;;;;;:68;;;26753:100;;;26781:1;26753:100;26702:3;:162::i;:::-;:166;:169;:166;:169;:::i;:::-;26884:23;;;:40;;;26988:10;26937:21;26961:38;;;:26;:38;;;;;;27010:16;;;:32;;-1:-1:-1;;;;;;27010:32:0;-1:-1:-1;;;;;26961:38:0;;;27010:32;;;;;27055:14;;;:24;;-1:-1:-1;;27055:24:0;-1:-1:-1;27055:24:0;;;;;;27146:13;27:10:-1;;23:18;;;45:23;;27146:30:0;;;;;;;;;;;27257:20;;26884:40;;-1:-1:-1;26961:38:0;;;26988:10;27202:99;;27146:30;;27257:27;;:20;:24;:27::i;:::-;27202:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9638:1:0;10600:7;:22;-1:-1:-1;;24854:2455:0:o;27372:1979::-;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;;;17679:10;17652:38;;:26;:38;;;;;;;;;-1:-1:-1;;;;;17652:38:0;17644:47;;:7;:47;;;;;17652:38;17644:54;;17636:85;;;;;-1:-1:-1;;;17636:85:0;;;;;;;;;;;;-1:-1:-1;;;17636:85:0;;;;;;;;;;;;;;;27526:10;27475:21;27499:38;;;:26;:38;;;;;;;;;-1:-1:-1;;;;;27499:38:0;27572:22;;;:7;:22;;;;;;27631:13;:20;27615:36;;27607:72;;;;;-1:-1:-1;;;27607:72:0;;;;;;;;;;;;-1:-1:-1;;;27607:72:0;;;;;;;;;;;;;;;27690:25;27718:9;:39;27728:13;27742;27728:28;;;;;;;;;;;;;;;;27718:39;;;;;;;;;;;27690:67;;27789:1;27778:8;:12;;;27770:44;;;;;-1:-1:-1;;;27770:44:0;;;;;;;;;;;;-1:-1:-1;;;27770:44:0;;;;;;;;;;;;;;;27825:9;27842:8;27837:14;;;;;;;;;;27825:26;;27894:8;:23;;;27872:18;:16;:18::i;:::-;:45;;27864:87;;;;;-1:-1:-1;;;27864:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27971:47;27994:8;:23;;;27971:22;:47::i;:::-;27970:48;27962:95;;;;-1:-1:-1;;;27962:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28076:37:0;;28117:9;28076:37;;;:22;;;:37;;;;;;;;:50;;;;;;;;;28068:87;;;;;-1:-1:-1;;;28068:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28182:8;28174:4;:16;;;;;;;;;:35;;;-1:-1:-1;28202:7:0;28194:4;:15;;;;;;;;;28174:35;28166:77;;;;;-1:-1:-1;;;28166:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28256:37:0;;;;;;:22;;;:37;;;;;:44;;28296:4;;28256:37;-1:-1:-1;;28256:44:0;;28296:4;28256:44;;;;;;;;;;;;-1:-1:-1;28325:8:0;28317:4;:16;;;;;;;;;28313:754;;;28392:13;;;;28370:17;;;;:36;;;:21;:36;:::i;:::-;28350:17;;;:56;28538:26;;;;28522:42;;28518:125;;;28585:26;;;:42;;;28518:125;28802:39;;;;28789:9;;28773:11;;:26;;;:15;:26;:::i;:::-;:68;28769:177;;;28920:9;;28904:11;;:26;;;:15;:26;:::i;:::-;28862:39;;;:68;28769:177;28313:754;;;28977:7;28969:4;:15;;;;;;;;;28965:102;;;29041:13;;;;29020:16;;;;:35;;;:20;:35;:::i;:::-;29001:16;;;:54;28965:102;29319:13;-1:-1:-1;;;;;29251:92:0;29307:10;-1:-1:-1;;;;;29251:92:0;29292:13;29251:92;29262:13;29276;29262:28;;;;;;;;;;;;;;;;29334:8;29251:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9638:1:0;10600:7;:22;-1:-1:-1;;;;27372:1979:0:o;14299:39::-;;;;:::o;42991:246::-;43109:13;:20;43062:4;;43087:42;;43079:78;;;;;-1:-1:-1;;;43079:78:0;;;;;;;;;;;;-1:-1:-1;;;43079:78:0;;;;;;;;;;;;;;;43175:9;:45;43185:13;43199:19;43185:34;;;;;;;;;;;;;;;;43175:45;;;;;;;;;;;:51;;43227:1;43175:54;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42991:246:0;;;:::o;11126:28::-;;;;:::o;43859:136::-;43926:14;;:::i;:::-;43960:21;;;;:9;:21;;;;;;43953:34;;;;;;;;;;43960:27;;;;;43953:34;;43960:27;;43953:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43953:34:0;;43859:136;-1:-1:-1;;;;;;;43859:136:0:o;10780:29::-;;;;:::o;11453:27::-;;;-1:-1:-1;;;;;11453:27:0;;:::o;14091:32::-;;;;:::o;39077:511::-;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;;;-1:-1:-1;;;;;39172:21:0;;;;:7;:21;;;;;39214:13;;;;39206:53;;;;;-1:-1:-1;;;39206:53:0;;;;;;;;;;;;-1:-1:-1;;;39206:53:0;;;;;;;;;;;;;;;39292:1;39278:6;:11;;;:15;39270:54;;;;;-1:-1:-1;;;39270:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39407:39;39419:6;:26;;;39407:11;:39::i;:::-;39399:129;;;;-1:-1:-1;;;39399:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39541:39;39551:12;39565:1;39568:6;:11;;;39541:9;:39::i;41461:593::-;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;;;41564:21;;;:9;:21;;;;;41605:14;;;:17;;;41604:18;41596:66;;;;-1:-1:-1;;;41596:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41682:14;;;:17;;;;;;41681:18;41673:66;;;;-1:-1:-1;;;41673:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41772:17;;;;-1:-1:-1;;;;;41772:17:0;41758:10;:31;41750:74;;;;;-1:-1:-1;;;41750:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41837:14;;;:24;;-1:-1:-1;;41837:24:0;;;;;41857:4;41926:17;;;41945:21;;;;41968:23;;;;41895:97;;14494:6;;-1:-1:-1;;;;;41926:17:0;;;;41945:21;;;41895:22;:97::i;:::-;42008:38;;;42035:10;42008:38;;;;42023:10;;42008:38;;;;;;;;;;-1:-1:-1;;9638:1:0;10600:7;:22;41461:593::o;17009:51::-;;;;;;;;;;;;;;;:::o;34349:1079::-;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;34437:45;34468:13;34437:30;:45::i;:::-;34495:18;34516:13;34530;34516:28;;;;;;;;;;;;;;;;;;;;;34583:21;;;:9;:21;;;;;;;34625:14;;;:17;34516:28;;-1:-1:-1;34583:21:0;34625:17;;;;;34617:59;;;;;-1:-1:-1;;;34617:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34689:14;;;:24;;-1:-1:-1;;34689:24:0;;;;;:17;34754:23;34763:13;34754:8;:23::i;:::-;34739:38;;34794:7;34790:453;;;34818:14;;;:24;;-1:-1:-1;;34818:24:0;;;;;34900:18;;-1:-1:-1;;;;;34900:18:0;34818:17;34892:27;;;:7;34818:17;34892:27;;;;34934:13;;;:29;;;34838:4;35050:13;;;34833:1;35034:11;;;:30;;:15;:30::i;:::-;35020:11;;;:44;35109:13;;;;35093:11;;:30;;;:15;:30;:::i;:::-;35079:11;:44;35164:13;;;;35150:9;;:28;;;:13;:28;:::i;:::-;35138:9;:40;35209:1;35193:13;;;;:17;34790:453;35270:18;;-1:-1:-1;;;;;35270:18:0;;;35292:5;35255:34;;;:14;:34;;;;;:42;;-1:-1:-1;;35255:42:0;;;35325:16;;;;35310:32;;35325:16;35310:14;:32::i;:::-;35360:60;;;;;;;;;;35400:10;;35385:13;;35360:60;;;;;;;;;-1:-1:-1;;9638:1:0;10600:7;:22;-1:-1:-1;;34349:1079:0:o;29359:4020::-;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;29438:45;29469:13;29438:30;:45::i;:::-;29496:18;29517:13;29531;29517:28;;;;;;;;;;;;;;;;;;;;;29584:21;;;:9;:21;;;;;;;29627:14;;;:17;29517:28;;-1:-1:-1;29584:21:0;-1:-1:-1;;;29627:17:0;;;;29626:18;:40;;;;-1:-1:-1;29649:14:0;;;:17;;;;;;29648:18;29626:40;29618:80;;;;;-1:-1:-1;;;29618:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29711:14;;;:24;;-1:-1:-1;;29711:24:0;;;;;:17;29776:23;29785:13;29776:8;:23::i;:::-;29761:38;;12065:6;29912:84;29973:8;:22;;;29912:56;29943:8;:24;;;29912:26;29928:9;;29912:11;;:15;;:26;;;;:::i;:84::-;:116;29908:164;;;-1:-1:-1;30055:5:0;29908:164;30257:21;;;;-1:-1:-1;;;;;30257:21:0;30232:24;:47;;;-1:-1:-1;;;;;;;;;;;30232:24:0;:47;:24;:47;;;30204:25;;;;:75;30200:123;;;-1:-1:-1;30306:5:0;30200:123;30474:1;30448:8;:23;;;:27;:83;;;;-1:-1:-1;30504:21:0;;;;-1:-1:-1;;;;;30504:21:0;30479:24;:47;;;-1:-1:-1;;;;;;;;;;;30479:24:0;:47;:24;:47;;;:52;30448:83;:136;;;;;12265:3;30535:20;;:49;;30448:136;30444:183;;;-1:-1:-1;30610:5:0;30444:183;30671:7;30667:2591;;;30695:14;;;:24;;-1:-1:-1;;30695:24:0;;;;;30849:18;;-1:-1:-1;;;;;30849:18:0;30695:17;30841:27;;;:7;30695:17;30841:27;;;;:34;;;30695:24;30841:34;30837:1172;;;30972:24;;;;30941:18;;-1:-1:-1;;;;;30941:18:0;30933:27;;;;:7;:27;;;;;30941:18;30933:34;;:64;;;:38;:64;:::i;:::-;30904:18;;-1:-1:-1;;;;;30904:18:0;;;30896:27;;;;:7;:27;;;;;;30904:18;30896:34;:101;;;;31088:22;;;;31059:18;;;;;31051:27;;;;;;:32;;;:60;;;:36;:60;:::i;:::-;31024:18;;-1:-1:-1;;;;;31024:18:0;31016:27;;;;:7;:27;;;;;:32;;:95;30837:1172;;;31391:18;;-1:-1:-1;;;;;31391:18:0;;;31356:55;31364:46;;;:26;:46;;;;;;;;;;;;31356:55;;:7;:55;;;:62;;;;;31352:349;;;31497:18;;-1:-1:-1;;;;;31497:18:0;;;31443:24;31470:46;;;:26;:46;;;;;;;;;;;;31539:44;;;;;;:63;;-1:-1:-1;;;;;;31539:63:0;;;;;;;;31625:7;:25;;;;;;;:56;;;;;;;;;;31352:349;31819:88;;;;;;;;31826:18;;-1:-1:-1;;;;;31826:18:0;;;31819:88;;;31846:24;;;;;31819:88;;;;;;;31872:22;;;;;31819:88;;;;;;31826:18;31819:88;;;;;;-1:-1:-1;31819:88:0;;;;;;;;;;;;31789:27;;;:7;:27;;;;;:118;;;;;;;-1:-1:-1;;;;;;31789:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31789:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;31975:18;;;;;31926:46;;;:26;:46;;;;;;:67;;;;;;;;;;30837:1172;32094:24;;;;32078:11;;:41;;;:15;:41;:::i;:::-;32064:11;:55;32160:22;;;;32146:9;;:37;;;:13;:37;:::i;:::-;32134:9;:49;32367:21;;;;-1:-1:-1;;;;;32367:21:0;32342:24;:47;;;-1:-1:-1;;;;;;;;;;;32342:24:0;:47;:24;:47;;;:52;:83;;;;;32424:1;32398:8;:23;;;:27;32342:83;32338:149;;;32446:20;:25;;32470:1;32446:25;;;32338:149;32541:21;;;;32564:23;;;;32503:85;;14494:6;;14439;;-1:-1:-1;;;;;32541:21:0;;32503:22;:85::i;:::-;32633:18;;32653:21;;;;32676:25;;;;32603:99;;14439:6;;-1:-1:-1;;;;;32633:18:0;;;;32653:21;;;32603:22;:99::i;:::-;32861:21;;;;-1:-1:-1;;;;;32861:21:0;32836:24;:47;;;-1:-1:-1;;;;;;;;;;;32836:24:0;:47;:24;:47;;;:52;:85;;;;;32920:1;32892:8;:25;;;:29;32836:85;32832:151;;;32942:20;:25;;-1:-1:-1;;32942:25:0;;;32832:151;30667:2591;;;33180:17;;;;33199:21;;;;33222:23;;;;33149:97;;14494:6;;-1:-1:-1;;;;;33180:17:0;;;;33199:21;;;33149:22;:97::i;:::-;33285:16;;;;33270:32;;-1:-1:-1;;;;;33285:16:0;33270:14;:32::i;:::-;33320:51;;;;;;;;;;33351:10;;33336:13;;33320:51;;;;;;;;;-1:-1:-1;;9638:1:0;10600:7;:22;-1:-1:-1;;29359:4020:0:o;14453:48::-;14494:6;14453:48;:::o;14399:47::-;14439:6;14399:47;:::o;22095:701::-;22206:18;9682:1;10288:7;;:19;;10280:63;;;;;-1:-1:-1;;;10280:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10280:63:0;;;;;;;;;;;;;;;9682:1;10421:7;:18;-1:-1:-1;;;;;22245:30:0;;22237:69;;;;;-1:-1:-1;;;22237:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22326:32:0;;;;;;:14;:32;;;;;;;;22325:33;22317:87;;;;-1:-1:-1;;;22317:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22423:14;:21;12170:3;-1:-1:-1;22415:100:0;;;;-1:-1:-1;;;22415:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22528:20;;:::i;:::-;22638:4;22627:8;;;:15;22668:85;22627:15;;;;22705:16;22627:15;;22738:7;22627:5;22668:15;:85::i;:::-;-1:-1:-1;;22771:13:0;;-1:-1:-1;;22771:17:0;9638:1;10600:7;:22;22095:701;;-1:-1:-1;;22095:701:0:o;1331:136::-;1389:7;1416:43;1420:1;1423;1416:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1409:50;1331:136;-1:-1:-1;;;1331:136:0:o;3168:132::-;3226:7;3253:39;3257:1;3260;3253:39;;;;;;;;;;;;;;;;;:3;:39::i;40285:359::-;40388:10;40370:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;40370:36:0;;;;;;;;;;:46;-1:-1:-1;40370:46:0;40362:79;;;;;-1:-1:-1;;;40362:79:0;;;;;;;;;;;;-1:-1:-1;;;40362:79:0;;;;;;;;;;;;;;;40452:52;40478:10;40490:5;40497:6;40452:25;:52::i;:::-;40523:42;;;-1:-1:-1;;;40523:42:0;;40546:10;40523:42;;;;;;;;;;;;-1:-1:-1;;;;;40523:22:0;;;;;:42;;;;;;;;;;;;;;-1:-1:-1;40523:22:0;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;40523:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40523:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40523:42:0;40515:70;;;;;-1:-1:-1;;;40515:70:0;;;;;;;;;;;;-1:-1:-1;;;40515:70:0;;;;;;;;;;;;;;;40601:35;;;-1:-1:-1;;;;;40601:35:0;;;;;;;;;;;;40610:10;;40601:35;;;;;;;;40285:359;;:::o;23471:1375::-;23810:24;;:::i;:::-;23837:595;;;;;;;;23873:9;-1:-1:-1;;;;;23837:595:0;;;;;23908:10;-1:-1:-1;;;;;23837:595:0;;;;;23951:1;-1:-1:-1;;;;;23837:595:0;;;;;23986:15;23837:595;;;;24032:13;23837:595;;;;24077:14;23837:595;;;;24121:12;-1:-1:-1;;;;;23837:595:0;;;;;24167:16;23837:595;;;;24213:12;-1:-1:-1;;;;;23837:595:0;;;;;24257:1;23837:595;;;;24284:1;23837:595;;;;24310:1;23837:595;;;;24334:5;23837:595;;;;24364:7;23837:595;;;;24419:1;23837:595;;;23810:622;;24472:8;24445:9;:24;24455:13;;24445:24;;;;;;;;;;;:35;;;;;;;;;;;;;-1:-1:-1;;;;;24445:35:0;;;;;-1:-1:-1;;;;;24445:35:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24445:35:0;;;;;-1:-1:-1;;;;;24445:35:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24445:35:0;;;;;-1:-1:-1;;;;;24445:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24445:35:0;;;;;-1:-1:-1;;;;;24445:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24445:35:0;;;;;-1:-1:-1;;;;;24445:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24445:35:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24491:21;24515:26;:38;24542:10;-1:-1:-1;;;;;24515:38:0;-1:-1:-1;;;;;24515:38:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24515:38:0;24491:62;;24795:13;-1:-1:-1;;;;;24632:177:0;24783:10;-1:-1:-1;;;;;24632:177:0;24647:9;-1:-1:-1;;;;;24632:177:0;;24658:15;24675:13;24690:14;24706:12;24720:16;24738:12;24752:7;24761:5;24768:13;;24632:177;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24632:177:0;-1:-1:-1;;;;;24632:177:0;;;;;;;;;;;-1:-1:-1;;;;;24632:177:0;-1:-1:-1;;;;;24632:177:0;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24632:177:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24632:177:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24820:13:0;:18;;24837:1;24820:18;;;-1:-1:-1;;;;;;;;;23471:1375:0:o;37373:1696::-;37477:33;37513:26;37529:9;;37513:11;;:15;;:26;;;;:::i;:::-;-1:-1:-1;;;;;37576:22:0;;37552:21;37576:22;;;:7;:22;;;;;37619:13;;;;37477:62;;-1:-1:-1;37576:22:0;37619:29;-1:-1:-1;37619:29:0;37611:61;;;;;-1:-1:-1;;;37611:61:0;;;;;;;;;;;;-1:-1:-1;;;37611:61:0;;;;;;;;;;;;;;;37706:10;37691:6;:11;;;:25;;37683:55;;;;;-1:-1:-1;;;37683:55:0;;;;;;;;;;;;-1:-1:-1;;;37683:55:0;;;;;;;;;;;;;;;37759:39;37771:6;:26;;;37759:11;:39::i;:::-;37751:129;;;;-1:-1:-1;;;37751:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37893:27;37923:28;:12;37940:10;37923:28;:16;:28;:::i;:::-;38013:13;;;;37893:58;;-1:-1:-1;38013:31:0;;38031:12;38013:31;:17;:31;:::i;:::-;37997:13;;;:47;38069:11;;;;:27;;38085:10;38069:27;:15;:27;:::i;:::-;38055:11;;;:41;38121:11;;:29;;38137:12;38121:29;:15;:29;:::i;:::-;38107:11;:43;38173:9;;:25;;38187:10;38173:25;:13;:25;:::i;:::-;38161:9;:37;38216:9;38211:787;38235:14;:21;38231:25;;38211:787;;;14439:6;38278:24;38315;;;:17;:24;;38340:14;:17;;38305:102;;-1:-1:-1;;;;;;;;;;;38315:24:0;38278;;38340:14;38355:1;;38340:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38340:17:0;38315:43;;;;;;;;;;;;;38360:19;38381:25;38305:9;:102::i;:::-;38278:129;-1:-1:-1;38426:20:0;;38422:565;;14439:6;38818:24;;;;:17;:24;;38843:14;:17;;38865:16;;-1:-1:-1;;;;;;;;;;;38818:24:0;;;38858:1;;38843:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38843:17:0;;;38818:43;;;;;;;;;;;;;;;:63;;;;;;;;;38900:32;;;;;:17;:32;;;;;;38933:14;:17;;38955:16;;38843:17;38933:14;38948:1;;38933:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38933:17:0;38900:51;;;;;;;;;;;;:71;;;;;;;38422:565;-1:-1:-1;38258:3:0;;38211:787;;;-1:-1:-1;39015:46:0;;;;;;;;;;;;;;39024:10;;39015:46;;;;;;;;37373:1696;;;;;;:::o;36325:621::-;36437:13;:20;36421:36;;36413:72;;;;;-1:-1:-1;;;36413:72:0;;;;;;;;;;;;-1:-1:-1;;;36413:72:0;;;;;;;;;;;;;;;36496:24;;:::i;:::-;36523:9;:39;36533:13;36547;36533:28;;;;;;;;;;;;;;;;;;;;;36523:39;;;;;;;;;;;;;;;36496:66;;;;;;;;;-1:-1:-1;;;;;36496:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36523:39;;36496:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36496:66:0;;;-1:-1:-1;;;36496:66:0;;;;;;;;;;;;;;;;-1:-1:-1;;36496:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36605:70;36657:17;;36605:47;36633:18;;36605:8;:23;;;:27;;:47;;;;:::i;:70::-;36583:18;:16;:18::i;:::-;:92;;36575:142;;;;-1:-1:-1;;;36575:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36736:14;;;;:17;;;:26;36728:74;;;;-1:-1:-1;;;36728:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36821:18;;;:77;;-1:-1:-1;36843:9:0;:46;36853:13;36867:20;:13;36885:1;36867:20;:17;:20;:::i;:::-;36853:35;;;;;;;;;;;;;;;;36843:46;;;;;;;;;;;:52;;36896:1;36843:55;;;;;;;;;;;;;;;;;;;;;;;;36821:77;36813:125;;;;-1:-1:-1;;;36813:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36325:621;;:::o;35436:881::-;35500:12;35525:24;;:::i;:::-;35552:9;:39;35562:13;35576;35562:28;;;;;;;;;;;;;;;;;;;;;35552:39;;;;;;;;;;;;;;;35525:66;;;;;;;;;-1:-1:-1;;;;;35525:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35552:39;;35525:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35525:66:0;;;-1:-1:-1;;;35525:66:0;;;;;;;;;;;;;;;;-1:-1:-1;;35525:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35634:8;:16;;;35614:8;:17;;;:36;35604:46;;35785:8;:39;;;35735:47;35768:13;;35736:26;35752:9;;35736:11;;:15;;:26;;;;:::i;:::-;35735:32;:47;:32;:47;:::i;:::-;:89;35731:137;;;35851:5;35841:15;;35731:137;36208:18;;-1:-1:-1;;;;;36200:27:0;;;;;:7;:27;;;;;:34;;;:39;36196:87;;36266:5;36256:15;;36196:87;-1:-1:-1;35436:881:0;;;:::o;36954:246::-;37058:12;;37072:16;;37015:74;;14494:6;;37046:10;;-1:-1:-1;;;;;37058:12:0;;37015:22;:74::i;:::-;37140:12;;37174:16;;37154:15;;37100:92;;14494:6;;37131:7;;-1:-1:-1;;;;;37140:12:0;;;;37154:37;;;:19;:37;:::i;:::-;37100:22;:92::i;:::-;36954:246;:::o;867:181::-;925:7;957:5;;;981:6;;;;973:46;;;;;-1:-1:-1;;;973:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;44694:193;-1:-1:-1;;;;;44787:23:0;;;;;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;:40;;;;;;44838:24;:31;;;;;;:41;;;;;;;44694:193::o;43492:107::-;43550:7;43582:1;43577;:6;;:14;;43590:1;43577:14;;;-1:-1:-1;43586:1:0;;43492:107;-1:-1:-1;43492:107:0:o;45103:211::-;45212:46;45238:4;45244:5;45251:6;45212:25;:46::i;:::-;45269:37;45288:2;45292:5;45299:6;45269:18;:37::i;:::-;45103:211;;;;:::o;1770:192::-;1856:7;1892:12;1884:6;;;;1876:29;;;;-1:-1:-1;;;1876:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1876:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1928:5:0;;;1770:192::o;3796:278::-;3882:7;3917:12;3910:5;3902:28;;;;-1:-1:-1;;;3902:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3902:28:0;;3941:9;3957:1;3953;:5;;;;;;;3796:278;-1:-1:-1;;;;;3796:278:0:o;44895:200::-;-1:-1:-1;;;;;44995:23:0;;;;;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;:40;;;;;;;45046:24;:31;;;;;;:41;;;;;;;;44895:200::o;45322:450::-;45425:7;45453:23;45445:32;;;;;;45494:12;45490:31;;-1:-1:-1;45517:1:0;45510:8;;45490:31;45548:16;;;45558:6;45548:7;:16;:7;45581:14;;;;;:24;45577:129;;;45676:18;45669:4;:25;;;;;;45662:32;;;;;45577:129;45758:6;45736:18;45726:7;:28;;;;;;45725:39;;45322:450;-1:-1:-1;;;;;45322:450:0:o;2221:471::-;2279:7;2524:6;2520:47;;-1:-1:-1;2554:1:0;2547:8;;2520:47;2591:5;;;2595:1;2591;:5;:1;2615:5;;;;;:10;2607:56;;;;-1:-1:-1;;;2607:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10637:35138;;;;;;;;;;-1:-1:-1;;;;;10637:35138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;10637:35138:0;;;-1:-1:-1;;10637:35138:0:o;:::-;;;;;;;;;;-1:-1:-1;;;;;10637:35138:0;;;;;;-1:-1:-1;;;;;10637:35138:0;;;;;;-1:-1:-1;;;;;10637:35138:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10637:35138:0;;;;;;;;;;;-1:-1:-1;;;;;10637:35138:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10637:35138:0;;;-1:-1:-1;10637:35138:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10637:35138:0;;;-1:-1:-1;10637:35138:0;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;10637:35138:0;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://eba0b3393f41c9b9cb3244afe1f8c1d338844a4dcaa31cdc4cb50b947eba16cc
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 32 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.