ETH Price: $3,913.07 (+0.12%)

Token

ERC-20: Baal Labs (BAAL)
 

Overview

Max Total Supply

600 BAAL

Holders

6

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
hq.spengrah.eth
Balance
100 BAAL

Value
$0.00
0x15c6ac4cf1b5e49c44332fb0a1043ccab19db80a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
Baal

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 777 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-15
*/

// SPDX-License-Identifier: UNLICENSED
/*
███   ██   ██   █     
█  █  █ █  █ █  █     
█ ▀ ▄ █▄▄█ █▄▄█ █     
█  ▄▀ █  █ █  █ ███▄  
███      █    █     ▀ 
        █    █        
       ▀    ▀*/
pragma solidity >=0.8.0;

/// @notice Interface for Baal {memberAction} that adjusts member `shares` & `loot`.
interface IShaman {
    function memberAction(address member, uint96 loot, uint96 shares) external payable returns (uint96 lootOut, uint96 sharesOut);
}

/// @title Baal ';_;'.
/// @notice Flexible guild contract inspired by Moloch DAO framework.
contract Baal {
    bool public lootPaused; /*tracks transferability of `loot` economic weight - amendable through 'period'[2] proposal*/
    bool public sharesPaused; /*tracks transferability of erc20 `shares` - amendable through 'period'[2] proposal*/
    bool singleSummoner; /*internal flag to gauge speedy proposal processing*/
    
    uint8  constant public decimals = 18; /*unit scaling factor in erc20 `shares` accounting - '18' is default to match ETH & common erc20s*/
    uint16 constant MAX_GUILD_TOKEN_COUNT = 400; /*maximum number of whitelistable tokens subject to {ragequit}*/
    
    uint96 public totalLoot; /*counter for total `loot` economic weight held by `members`*/  
    uint96 public totalSupply; /*counter for total `members` voting `shares` with erc20 accounting*/
    
    uint32 public gracePeriod; /*time delay after proposal voting period for processing*/
    uint32 public minVotingPeriod; /*minimum period for voting in seconds - amendable through 'period'[2] proposal*/
    uint32 public maxVotingPeriod; /*maximum period for voting in seconds - amendable through 'period'[2] proposal*/
    uint public proposalCount; /*counter for total `proposals` submitted*/
    uint status; /*internal reentrancy check tracking value*/
    
    string public name; /*'name' for erc20 `shares` accounting*/
    string public symbol; /*'symbol' for erc20 `shares` accounting*/
    
    bytes32 constant DOMAIN_TYPEHASH = keccak256('EIP712Domain(string name,uint chainId,address verifyingContract)'); /*EIP-712 typehash for Baal domain*/
    bytes32 constant DELEGATION_TYPEHASH = keccak256('Delegation(address delegatee,uint nonce,uint expiry)'); /*EIP-712 typehash for Baal delegation*/
    bytes32 constant PERMIT_TYPEHASH = keccak256('Permit(address owner,address spender,uint value,uint nonce,uint deadline)'); /*EIP-712 typehash for EIP-2612 {permit}*/
    bytes32 constant VOTE_TYPEHASH = keccak256('Vote(uint proposalId,bool support)'); /*EIP-712 typehash for Baal proposal vote*/
    
    address[] guildTokens; /*array list of erc20 tokens approved on summoning or by 'whitelist'[3] `proposals` for {ragequit} claims*/
    
    mapping(address => mapping(address => uint))    public allowance; /*maps approved pulls of `shares` with erc20 accounting*/
    mapping(address => uint)                        public balanceOf; /*maps `members` accounts to `shares` with erc20 accounting*/
    mapping(address => mapping(uint => Checkpoint)) public checkpoints; /*maps record of vote `checkpoints` for each account by index*/
    mapping(address => uint)                        public numCheckpoints; /*maps number of `checkpoints` for each account*/
    mapping(address => address)                     public delegates; /*maps record of each account's `shares` delegate*/
    mapping(address => uint)                        public nonces; /*maps record of states for signing & validating signatures*/
    
    mapping(address => Member) public members; /*maps `members` accounts to struct details*/
    mapping(uint => Proposal)  public proposals; /*maps `proposalCount` to struct details*/
    mapping(uint => bool)      public proposalsPassed; /*maps `proposalCount` to approval status - separated out as struct is deleted, and this value can be used by minion-like contracts*/
    mapping(address => bool)   public shamans; /*maps contracts approved in 'whitelist'[3] proposals for {memberAction} that mint or burn `shares`*/
    
    event SummonComplete(bool lootPaused, bool sharesPaused, uint gracePeriod, uint minVotingPeriod, uint maxVotingPeriod, string name, string symbol, address[] guildTokens, address[] shamans, address[] summoners, uint96[] loot, uint96[] shares); /*emits after Baal summoning*/
    event SubmitProposal(uint8 indexed flag, uint indexed proposal, uint indexed votingPeriod, address[] to, uint96[] value, bytes[] data, string details); /*emits after proposal is submitted*/
    event SponsorProposal(address indexed member, uint indexed proposal, uint indexed votingStarts); /*emits after member has sponsored proposal*/
    event SubmitVote(address indexed member, uint balance, uint indexed proposal, bool indexed approved); /*emits after vote is submitted on proposal*/
    event ProcessProposal(uint indexed proposal); /*emits when proposal is processed & executed*/
    event Ragequit(address indexed member, address to, uint96 indexed lootToBurn, uint96 indexed sharesToBurn); /*emits when users burn Baal `shares` and/or `loot` for given `to` account*/
    event Approval(address indexed owner, address indexed spender, uint amount); /*emits when Baal `shares` are approved for pulls with erc20 accounting*/
    event Transfer(address indexed from, address indexed to, uint amount); /*emits when Baal `shares` are minted, burned or transferred with erc20 accounting*/
    event TransferLoot(address indexed from, address indexed to, uint96 amount); /*emits when Baal `loot` is minted, burned or transferred*/
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /*emits when an account changes its voting delegate*/
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /*emits when a delegate account's voting balance changes*/
    
    modifier nonReentrant() { /*reentrancy guard*/
        require(status == 1,'reentrant'); 
        status = 2; 
        _;
        status = 1;
    }
    
    struct Checkpoint { /*Baal checkpoint for marking number of delegated votes*/
        uint32 fromTimeStamp; /*unix time for referencing voting balance*/
        uint96 votes; /*votes at given unix time*/
    }
 
    struct Member { /*Baal membership details*/
        uint96 loot; /*economic weight held by `members` - can be set on summoning & adjusted via {memberAction}*/
        uint highestIndexYesVote; /*highest proposal index on which a member `approved`*/
    }
    
    struct Proposal { /*Baal proposal details*/
        uint32 votingPeriod; /*time for voting in seconds*/
        uint32 votingStarts; /*starting time for proposal in seconds since unix epoch*/
        uint32 votingEnds; /*termination time for proposal in seconds since unix epoch - derived from `votingPeriod` set on proposal*/
        uint96 yesVotes; /*counter for `members` `approved` 'votes' to calculate approval on processing*/
        uint96 noVotes; /*counter for `members` 'dis-approved' 'votes' to calculate approval on processing*/
        bool[4] flags; /*flags for proposal type & status - [action, member, period, whitelist]*/
        address[] to; /*account(s) that receive(s) Baal state updates*/
        uint96[] value; /*value(s) associated with Baal state updates (also used to toggle)*/
        bytes[] data; /*raw data associated with Baal state updates (also used to toggle)*/
        string details; /*human-readable context for proposal*/
    }

    /// @notice Summon Baal with voting configuration & initial array of `members` accounts with `shares` & `loot` weights.
    /// @param _sharesPaused Sets transferability of Baal voting shares on initialization - if 'paused', `loot` will also be 'paused'.
    /// @param _gracePeriod Time delay in seconds after voting period before proposal can be processed.
    /// @param _minVotingPeriod Minimum voting period in seconds for `members` to cast votes on proposals.
    /// @param _maxVotingPeriod Maximum voting period in seconds for `members` to cast votes on proposals.
    /// @param _name Name for erc20 `shares` accounting.
    /// @param _symbol Symbol for erc20 `shares` accounting.
    /// @param _guildTokens Tokens approved for internal accounting - {ragequit} of `shares` &/or `loot`.
    /// @param _shamans External contracts approved for {memberAction} that adjust `shares` & `loot`.
    /// @param _summoners Accounts to add as `members`.
    /// @param _loot Economic weight among `members`.
    /// @param _shares Voting weight among `members` (`shares` also have economic weight & are erc20 tokens).
    constructor(
        bool             _sharesPaused,
        uint32           _gracePeriod,
        uint32           _minVotingPeriod, 
        uint32           _maxVotingPeriod,
        string    memory _name, 
        string    memory _symbol,
        address[] memory _guildTokens,
        address[] memory _shamans, 
        address[] memory _summoners, 
        uint96[]  memory _loot, 
        uint96[]  memory _shares
    ) {
        require(_minVotingPeriod != 0,'0_min'); /*check min. period isn't null*/
        require(_minVotingPeriod <= _maxVotingPeriod,'min>max'); /*check minimum period doesn't exceed max*/
        require(_guildTokens.length != 0,'0_tokens'); /*check approved tokens are not null*/
        require(_summoners.length != 0,'0_summoners'); /*check that there is at least 1 summoner*/
        require(_summoners.length == _loot.length && _loot.length == _shares.length,'!member array parity'); /*check `members`-related array lengths match*/
        
        unchecked {
            for (uint i; i < _shamans.length; i++) shamans[_shamans[i]] = true; /*update mapping of approved `shamans` in Baal*/
            for (uint i; i < _guildTokens.length; i++) guildTokens.push(_guildTokens[i]); /*update array of `guildTokens` approved for {ragequit}*/
            for (uint i; i < _summoners.length; i++) {
                _mintLoot(_summoners[i], _loot[i]); /*mint Baal `loot` to `summoners`*/
                _mintShares(_summoners[i], _shares[i]); /*mint Baal `shares` to `summoners`*/ 
                _delegate(_summoners[i], _summoners[i]); /*delegate `summoners` voting weights to themselves - this saves a step before voting*/
                if (_summoners.length == 1) singleSummoner = true; /*flag if Baal summoned singly for speedy processing*/
            }
        }
        
        gracePeriod = _gracePeriod; /*sets delay for processing proposal*/
        minVotingPeriod = _minVotingPeriod; /*set minimum voting period - adjustable via 'period'[2] proposal*/
        maxVotingPeriod = _maxVotingPeriod; /*set maximum voting period - adjustable via 'period'[2] proposal*/
        if (_sharesPaused) lootPaused = true; /*set initial transferability for `loot` - if `sharesPaused`, transfers are blocked*/
        sharesPaused = _sharesPaused; /*set initial transferability for `shares` tokens - if 'true', transfers are blocked*/
        name = _name; /*initialize Baal `name` with erc20 accounting*/
        symbol = _symbol; /*initialize Baal `symbol` with erc20 accounting*/
        status = 1; /*initialize 'reentrancy guard' status*/
        
        emit SummonComplete(lootPaused, _sharesPaused, _gracePeriod, _minVotingPeriod, _maxVotingPeriod, _name, _symbol, _guildTokens, _shamans, _summoners, _loot, _shares); /*emit event reflecting Baal summoning completed*/
    }

    /// @notice Execute membership action to mint or burn `shares` and/or `loot` against whitelisted `shamans` in consideration of user & given amounts.
    /// @param shaman Whitelisted contract to trigger action.
    /// @param loot Economic weight involved in external call.
    /// @param shares Voting weight involved in external call.
    /// @param mint Confirm whether action involves 'mint' or 'burn' action - if `false`, perform burn.
    /// @return lootOut sharesOut Membership updates derived from action.
    function memberAction(
        address shaman, 
        uint96 loot, 
        uint96 shares, 
        bool mint
    ) external nonReentrant payable returns (uint96 lootOut, uint96 sharesOut) {
        require(shamans[shaman],'!shaman'); /*check `shaman` is approved*/
        
        (lootOut, sharesOut) = IShaman(shaman).memberAction{value: msg.value}(msg.sender, loot, shares); /*fetch 'reaction' per inputs*/
        
        if (mint) { /*execute `mint` actions*/
            if (lootOut != 0) _mintLoot(msg.sender, lootOut); /*add `loot` to user account & Baal total*/
            if (sharesOut != 0) _mintShares(msg.sender, sharesOut); /*add `shares` to user account & Baal total with erc20 accounting*/
        } else { /*otherwise, execute `burn` actions*/
            if (lootOut != 0) _burnLoot(msg.sender, lootOut); /*subtract `loot` from user account & Baal total*/
            if (sharesOut != 0) _burnShares(msg.sender, sharesOut); /*subtract `shares` from user account & Baal total with erc20 accounting*/
        }
    }
    
    /*****************
    PROPOSAL FUNCTIONS
    *****************/
    /// @notice Submit proposal to Baal `members` for approval within given voting period.
    /// @param flag Index to assign proposal type '[0...3]'.
    /// @param votingPeriod Voting period in seconds.
    /// @param to Account to target for proposal.
    /// @param value Numerical value to bind to proposal.
    /// @param data Data to bind to proposal.
    /// @param details Context for proposal.
    /// @return proposal Count for submitted proposal.
    function submitProposal(
        uint8 flag, 
        uint32 votingPeriod, 
        address[] calldata to, 
        uint96[] calldata value, 
        bytes[] calldata data, 
        string calldata details
    ) external nonReentrant returns (uint proposal) {
        require(minVotingPeriod <= votingPeriod && votingPeriod <= maxVotingPeriod,'!votingPeriod'); /*check voting period is within Baal bounds*/
        require(to.length <= 10,'array max'); /*limit executable actions to help avoid block gas limit errors on processing*/
        require(flag <= 3,'!flag'); /*check 'flag' is in bounds*/
        
        bool[4] memory flags; /*plant `flags` - [action, member, period, whitelist]*/
        flags[flag] = true; /*flag proposal type for struct storage*/ 
        
        if (flag == 2) {
            if (value.length == 1) {
                require(value[0] <= maxVotingPeriod,'over max');
            } else if (value.length == 2) {
                require(value[1] >= minVotingPeriod,'under min');
            }
        } else {
            require(to.length == value.length && value.length == data.length,'!array parity'); /*check array lengths match*/
        }
        
        bool selfSponsor; /*plant sponsor flag*/
        if (balanceOf[msg.sender] != 0) selfSponsor = true; /*if a member, self-sponsor*/

        unchecked {
            proposalCount++; /*increment proposal counter*/
            proposals[proposalCount] = Proposal( /*push params into proposal struct - start voting period timer if member submission*/
                votingPeriod,
                selfSponsor ? uint32(block.timestamp) : 0, 
                selfSponsor ? uint32(block.timestamp) + votingPeriod : 0, 
                0, 0, flags, to, value, data, details
            );
        }
        
        emit SubmitProposal(flag, proposal, votingPeriod, to, value, data, details); /*emit event reflecting proposal submission*/
    }
    
    /// @notice Sponsor proposal to Baal `members` for approval within voting period.
    /// @param proposal Number of proposal in `proposals` mapping to sponsor.
    function sponsorProposal(uint proposal) external nonReentrant {
        Proposal storage prop = proposals[proposal]; /*alias proposal storage pointers*/
        
        require(balanceOf[msg.sender] != 0,'!member'); /*check 'membership' - required to sponsor proposal*/
        require(prop.votingPeriod != 0,'!exist'); /*check proposal existence*/
        require(prop.votingStarts == 0,'sponsored'); /*check proposal not already sponsored*/
        
        prop.votingStarts = uint32(block.timestamp);
        
        unchecked {
            prop.votingEnds = uint32(block.timestamp) + prop.votingPeriod;
        }

        emit SponsorProposal(msg.sender, proposal, block.timestamp);
    }

    /// @notice Submit vote - proposal must exist & voting period must not have ended.
    /// @param proposal Number of proposal in `proposals` mapping to cast vote on.
    /// @param approved If 'true', member will cast `yesVotes` onto proposal - if 'false', `noVotes` will be counted.
    function submitVote(uint proposal, bool approved) external nonReentrant {
        Proposal storage prop = proposals[proposal]; /*alias proposal storage pointers*/
        
        uint96 balance = getPriorVotes(msg.sender, prop.votingStarts); /*fetch & gas-optimize voting weight at proposal creation time*/
        
        require(prop.votingEnds >= block.timestamp,'ended'); /*check voting period has not ended*/
        
        unchecked {
            if (approved) { /*if `approved`, cast delegated balance `yesVotes` to proposal*/
                prop.yesVotes += balance; 
                members[msg.sender].highestIndexYesVote = proposal;
            } else { /*otherwise, cast delegated balance `noVotes` to proposal*/
                prop.noVotes += balance;
            }
        }

        emit SubmitVote(msg.sender, balance, proposal, approved); /*emit event reflecting vote*/
    }
    
    /// @notice Submit vote with EIP-712 signature - proposal must exist & voting period must not have ended.
    /// @param proposal Number of proposal in `proposals` mapping to cast vote on.
    /// @param approved If 'true', member will cast `yesVotes` onto proposal - if 'false', `noVotes` will be counted.
    /// @param v The recovery byte of the signature.
    /// @param r Half of the ECDSA signature pair.
    /// @param s Half of the ECDSA signature pair.
    function submitVoteWithSig(
        uint proposal, 
        bool approved, 
        uint8 v, 
        bytes32 r, 
        bytes32 s
    ) external nonReentrant {
        Proposal storage prop = proposals[proposal]; /*alias proposal storage pointers*/
        
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), block.chainid, address(this))); /*calculate EIP-712 domain hash*/
        bytes32 structHash = keccak256(abi.encode(VOTE_TYPEHASH, proposal, approved)); /*calculate EIP-712 struct hash*/
        bytes32 digest = keccak256(abi.encodePacked('\x19\x01', domainSeparator, structHash)); /*calculate EIP-712 digest for signature*/
        address signatory = ecrecover(digest, v, r, s); /*recover signer from hash data*/
        
        require(signatory != address(0),'!signatory'); /*check signer is not null*/
        
        uint96 balance = getPriorVotes(signatory, prop.votingStarts); /*fetch & gas-optimize voting weight at proposal creation time*/
        
        require(prop.votingEnds >= block.timestamp,'ended'); /*check voting period has not ended*/
        
        unchecked {
            if (approved) { /*if `approved`, cast delegated balance `yesVotes` to proposal*/
                prop.yesVotes += balance; members[signatory].highestIndexYesVote = proposal;
            } else { /*otherwise, cast delegated balance `noVotes` to proposal*/
                prop.noVotes += balance;
            }
        }
        
        emit SubmitVote(signatory, balance, proposal, approved); /*emit event reflecting vote*/
    }
        
    // ********************
    // PROCESSING FUNCTIONS
    // ********************
    /// @notice Process `proposal` & execute internal functions based on `flag`[#].
    /// @param proposal Number of proposal in `proposals` mapping to process for execution.
    function processProposal(uint proposal) external nonReentrant {
        Proposal storage prop = proposals[proposal]; /*alias `proposal` storage pointers*/
        
        _processingReady(proposal, prop); /*validate `proposal` processing requirements*/
        
        if (prop.yesVotes > prop.noVotes) /*check if `proposal` approved by simple majority of members*/
            proposalsPassed[proposal] = true; /*flag that proposal passed - allows minion-like extensions*/
            if (prop.flags[0]) processActionProposal(prop); /*check `flag`, execute 'action'*/
            else if (prop.flags[1]) processMemberProposal(prop); /*check `flag`, execute 'member'*/
            else if (prop.flags[2]) processPeriodProposal(prop); /*check `flag`, execute 'period'*/
            else processWhitelistProposal(prop); /*otherwise, execute 'whitelist'*/
            
        delete proposals[proposal]; /*delete given proposal struct details for gas refund & the commons*/
        
        emit ProcessProposal(proposal); /*emit event reflecting that given proposal processed*/
    }
    
    /// @notice Internal function to process 'action'[0] proposal.
    function processActionProposal(Proposal memory prop) private {
        unchecked {
            for (uint i; i < prop.to.length; i++) 
                prop.to[i].call{value:prop.value[i]} /*pass ETH value(s), if any*/
                (prop.data[i]); /*execute low-level call(s)*/
        }
    }
    
    /// @notice Internal function to process 'member'[1] proposal.
    function processMemberProposal(Proposal memory prop) private {
        unchecked {
            for (uint i; i < prop.to.length; i++) {
                if (prop.data[i].length == 0) {
                    _mintShares(prop.to[i], prop.value[i]); /*grant `to` `value` `shares`*/
                } else {
                    uint96 removedBalance = uint96(balanceOf[prop.to[i]]); /*gas-optimize variable*/
                    _burnShares(prop.to[i], removedBalance); /*burn all of `to` `shares` & convert into `loot`*/
                    _mintLoot(prop.to[i], removedBalance); /*mint equivalent `loot`*/
                }
            }
        }
    }
    
    /// @notice Internal function to process 'period'[2] proposal - state updates are broken up for security.
    function processPeriodProposal(Proposal memory prop) private {
        uint length = prop.value.length;
        
        if (length == 1) {
            if (prop.value[0] != 0) minVotingPeriod = uint32(prop.value[0]); /*if positive, reset min. voting period to first `value`*/ 
        } else if (length == 2) {
            if (prop.value[1] != 0) maxVotingPeriod = uint32(prop.value[1]); /*if positive, reset max. voting period to second `value`*/
        } else if (length == 3) {
            if (prop.value[2] != 0) gracePeriod = uint32(prop.value[2]); /*if positive, reset grace period to third `value`*/
        } else if (length == 4) {
            prop.value[3] == 0 ? lootPaused = false : lootPaused = true; /*if positive, pause `loot` transfers on fourth `value`*/
        } else if (length == 5) {
            prop.value[4] == 0 ? sharesPaused = false : sharesPaused = true; /*if positive, pause `shares` transfers on fifth `value`*/
        }
    }  
        
    /// @notice Internal function to process 'whitelist'[3] proposal - toggles included for security.
    function processWhitelistProposal(Proposal memory prop) private {
        unchecked {
            for (uint i; i < prop.to.length; i++) {
                if (prop.value[i] == 0 && prop.data[i].length == 0) { /*if `value` & `data` are null, approve `shamans`*/
                    shamans[prop.to[i]] = true; /*add account(s) to `shamans` extensions*/
                } else if (prop.value[i] == 0 && prop.data[i].length != 0) { /*if `value` is null & `data` is populated, remove `shamans`*/
                    shamans[prop.to[i]] = false; /*remove account(s) from `shamans` extensions*/
                } else if (prop.value[i] != 0 && prop.data[i].length == 0) { /*if `value` is positive & `data` is null, add `guildTokens`*/
                    if (guildTokens.length != MAX_GUILD_TOKEN_COUNT) guildTokens.push(prop.to[i]); /*push account to `guildTokens` array if within 'MAX'*/
                }
            }
        }
    }
    
    /*******************
    GUILD MGMT FUNCTIONS
    *******************/
    /// @notice Approve `to` to transfer up to `amount`.
    /// @return success Whether or not the approval succeeded.
    function approve(address to, uint amount) external returns (bool success) {
        allowance[msg.sender][to] = amount; /*adjust `allowance`*/
        
        emit Approval(msg.sender, to, amount); /*emit event reflecting approval*/
        
        success = true; /*confirm approval with ERC-20 accounting*/
    }
    
    /// @notice Delegate votes from user to `delegatee`.
    /// @param delegatee The address to delegate votes to.
    function delegate(address delegatee) external {
        _delegate(msg.sender, delegatee);
    }
    
    /// @notice Delegates votes from `signatory` to `delegatee` with EIP-712 signature.
    /// @param delegatee The address to delegate 'votes' to.
    /// @param nonce The contract state required to match the signature.
    /// @param deadline The time at which to expire the signature.
    /// @param v The recovery byte of the signature.
    /// @param r Half of the ECDSA signature pair.
    /// @param s Half of the ECDSA signature pair.
    function delegateBySig(
        address delegatee, 
        uint nonce, 
        uint deadline, 
        uint8 v, 
        bytes32 r, 
        bytes32 s
    ) external {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), block.chainid, address(this))); /*calculate EIP-712 domain hash*/
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, deadline)); /*calculate EIP-712 struct hash*/
        bytes32 digest = keccak256(abi.encodePacked('\x19\x01', domainSeparator, structHash)); /*calculate EIP-712 digest for signature*/
        address signatory = ecrecover(digest, v, r, s); /*recover signer from hash data*/
            
        require(signatory != address(0),'!signatory'); /*check signer is not null*/
        unchecked {
            require(nonce == nonces[signatory]++,'!nonce'); /*check given `nonce` is next in `nonces`*/
        }
        require(block.timestamp <= deadline,'expired'); /*check signature is not expired*/
            
        _delegate(signatory, delegatee); /*execute delegation*/
    }

    /// @notice Triggers an approval from `owner` to `spender` with EIP-712 signature.
    /// @param owner The address to approve from.
    /// @param spender The address to be approved.
    /// @param amount The number of `shares` tokens that are approved (2^256-1 means infinite).
    /// @param deadline The time at which to expire the signature.
    /// @param v The recovery byte of the signature.
    /// @param r Half of the ECDSA signature pair.
    /// @param s Half of the ECDSA signature pair.
    function permit(
        address owner, 
        address spender, 
        uint96 amount, 
        uint deadline, 
        uint8 v, 
        bytes32 r, 
        bytes32 s
    ) external {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), block.chainid, address(this))); /*calculate EIP-712 domain hash*/
        
        unchecked {
            bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline)); /*calculate EIP-712 struct hash*/
            bytes32 digest = keccak256(abi.encodePacked('\x19\x01', domainSeparator, structHash)); /*calculate EIP-712 digest for signature*/
            address signatory = ecrecover(digest, v, r, s); /*recover signer from hash data*/
            require(signatory != address(0),'!signatory'); /*check signer is not null*/
            require(signatory == owner,'!authorized'); /*check signer is `owner`*/
        }
        
        require(block.timestamp <= deadline,'expired'); /*check signature is not expired*/
        
        allowance[owner][spender] = amount; /*adjust `allowance`*/
        
        emit Approval(owner, spender, amount); /*emit event reflecting approval*/
    }
    
    /// @notice Transfer `amount` tokens from user to `to`.
    /// @param to The address of destination account.
    /// @param amount The number of `shares` tokens to transfer.
    /// @return success Whether or not the transfer succeeded.
    function transfer(address to, uint96 amount) external returns (bool success) {
        require(!sharesPaused,'!transferable');
        
        balanceOf[msg.sender] -= amount;
        
        unchecked {
            balanceOf[to] += amount;
        }
        
        _moveDelegates(delegates[msg.sender], delegates[to], amount);
        
        emit Transfer(msg.sender, to, amount);
        
        success = true;
    }
        
    /// @notice Transfer `amount` tokens from `from` to `to`.
    /// @param from The address of the source account.
    /// @param to The address of the destination account.
    /// @param amount The number of `shares` tokens to transfer.
    /// @return success Whether or not the transfer succeeded.
    function transferFrom(address from, address to, uint96 amount) external returns (bool success) {
        require(!sharesPaused,'!transferable');
        
        if (allowance[from][msg.sender] != type(uint).max) {
            allowance[from][msg.sender] -= amount;
        }
        
        balanceOf[from] -= amount;
        
        unchecked {
            balanceOf[to] += amount;
        }
        
        _moveDelegates(delegates[from], delegates[to], amount);
        
        emit Transfer(from, to, amount);
        
        success = true;
    }
    
    /// @notice Transfer `amount` `loot` from user to `to`.
    /// @param to The address of destination account.
    /// @param amount The sum of loot to transfer.
    function transferLoot(address to, uint96 amount) external {
        require(!lootPaused,'!transferable');
        
        members[msg.sender].loot -= amount;
        
        unchecked {
            members[to].loot += amount;
        }
        
        emit TransferLoot(msg.sender, to, amount);
    }

    /// @notice Process member burn of `shares` and/or `loot` to claim 'fair share' of `guildTokens`.
    /// @param to Account that receives 'fair share'.
    /// @param lootToBurn Baal pure economic weight to burn.
    /// @param sharesToBurn Baal voting weight to burn.
    function ragequit(address to, uint96 lootToBurn, uint96 sharesToBurn) external nonReentrant {
        require(proposals[members[msg.sender].highestIndexYesVote].votingEnds == 0,'processed'); /*check highest index proposal member approved has processed*/
        
        for (uint i; i < guildTokens.length; i++) {
            (,bytes memory balanceData) = guildTokens[i].staticcall(abi.encodeWithSelector(0x70a08231, address(this))); /*get Baal token balances - 'balanceOf(address)'*/
            uint balance = abi.decode(balanceData, (uint)); /*decode Baal token balances for calculation*/
            
            uint amountToRagequit = ((lootToBurn + sharesToBurn) * balance) / (totalSupply + totalLoot); /*calculate 'fair shair' claims*/
            
            if (amountToRagequit != 0) { /*gas optimization to allow higher maximum token limit*/
                _safeTransfer(guildTokens[i], to, amountToRagequit); /*execute 'safe' token transfer*/
            }
        }
        
        if (lootToBurn != 0) { /*gas optimization*/ 
            _burnLoot(msg.sender, lootToBurn); /*subtract `loot` from user account & Baal totals*/
        }
        
        if (sharesToBurn != 0) { /*gas optimization*/ 
            _burnShares(msg.sender, sharesToBurn);  /*subtract `shares` from user account & Baal totals with erc20 accounting*/
        }
        
        emit Ragequit(msg.sender, to, lootToBurn, sharesToBurn); /*event reflects claims made against Baal*/
    }

    /***************
    GETTER FUNCTIONS
    ***************/
    /// @notice Returns the current delegated `vote` balance for `account`.
    /// @param account The user to check delegated `votes` for.
    /// @return votes Current `votes` delegated to `account`.
    function getCurrentVotes(address account) external view returns (uint96 votes) {
        uint nCheckpoints = numCheckpoints[account];
        unchecked { votes = nCheckpoints != 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; }
    }
    
    /// @notice Returns the prior number of `votes` for `account` as of `timeStamp`.
    /// @param account The user to check `votes` for.
    /// @param timeStamp The unix time to check `votes` for.
    /// @return votes Prior `votes` delegated to `account`.
    function getPriorVotes(address account, uint timeStamp) public view returns (uint96 votes) {
        require(timeStamp < block.timestamp,'!determined');
        
        uint nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) return 0;
        
        unchecked {
            if (checkpoints[account][nCheckpoints - 1].fromTimeStamp <= timeStamp)
                return checkpoints[account][nCheckpoints - 1].votes; 
            if (checkpoints[account][0].fromTimeStamp > timeStamp) return 0;
            uint lower = 0; 
            uint upper = nCheckpoints - 1;
            while (upper > lower) {
                uint center = upper - (upper - lower) / 2;
                Checkpoint memory cp = checkpoints[account][center];
                if (cp.fromTimeStamp == timeStamp) return cp.votes; 
                else if (cp.fromTimeStamp < timeStamp) lower = center; 
                else upper = center - 1;
            }
            votes = checkpoints[account][lower].votes;
        }
    }
    
    /// @notice Returns array list of approved `guildTokens` in Baal for {ragequit}.
    /// @return tokens ERC-20s approved for {ragequit}.
    function getGuildTokens() external view returns (address[] memory tokens) {
        tokens = guildTokens;
    }

    /// @notice Returns `flags` for given Baal `proposal` describing type ('action'[0], 'member'[1], 'period'[2], 'whitelist'[3]).
    /// @param proposal The index to check `flags` for.
    /// @return flags The boolean flags describing `proposal` type.
    function getProposalFlags(uint proposal) external view returns (bool[4] memory flags) {
        flags = proposals[proposal].flags;
    }

    /***************
    HELPER FUNCTIONS
    ***************/
    /// @notice Allows batched calls to Baal.
    /// @param data An array of payloads for each call.
    function multicall(bytes[] calldata data) external returns (bytes[] memory results) {
        results = new bytes[](data.length);
        unchecked {
            for (uint256 i = 0; i < data.length; i++) {
                (bool success, bytes memory result) = address(this).delegatecall(data[i]);
                if (!success) {
                    if (result.length < 68) revert();
                    assembly { result := add(result, 0x04) }
                    revert(abi.decode(result, (string)));
                }
                results[i] = result;
            }
        }
    }

    /// @notice Returns confirmation for 'safe' ERC-721 (NFT) transfers to Baal.
    function onERC721Received(address, address, uint, bytes calldata) external pure returns (bytes4 sig) {
        sig = 0x150b7a02; /*'onERC721Received(address,address,uint,bytes)'*/
    }
    
    /// @notice Returns confirmation for 'safe' ERC-1155 transfers to Baal.
    function onERC1155Received(address, address, uint, uint, bytes calldata) external pure returns (bytes4 sig) {
        sig = 0xf23a6e61; /*'onERC1155Received(address,address,uint,uint,bytes)'*/
    }
    
    /// @notice Returns confirmation for 'safe' batch ERC-1155 transfers to Baal.
    function onERC1155BatchReceived(address, address, uint[] calldata, uint[] calldata, bytes calldata) external pure returns (bytes4 sig) {
        sig = 0xbc197c81; /*'onERC1155BatchReceived(address,address,uint[],uint[],bytes)'*/
    }
    
    /// @notice Deposits ETH sent to Baal.
    receive() external payable {}

    /// @notice Delegates Baal voting weight.
    function _delegate(address delegator, address delegatee) private {
        address currentDelegate = delegates[delegator];
        
        delegates[delegator] = delegatee;
        
        _moveDelegates(currentDelegate, delegatee, uint96(balanceOf[delegator]));
        
        emit DelegateChanged(delegator, currentDelegate, delegatee);
    }
    
    /// @notice Elaborates delegate update - cf., 'Compound Governance'.
    function _moveDelegates(address srcRep, address dstRep, uint96 amount) private {
        unchecked {
            if (srcRep != dstRep && amount != 0) {
                if (srcRep != address(0)) {
                    uint srcRepNum = numCheckpoints[srcRep];
                    uint96 srcRepOld = srcRepNum != 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                    uint96 srcRepNew = srcRepOld - amount;
                    _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
                }
            
                if (dstRep != address(0)) {
                    uint dstRepNum = numCheckpoints[dstRep];
                    uint96 dstRepOld = dstRepNum != 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                    uint96 dstRepNew = dstRepOld + amount;
                    _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
                }
            }
        }
    }
    
    /// @notice Elaborates delegate update - cf., 'Compound Governance'.
    function _writeCheckpoint(address delegatee, uint nCheckpoints, uint96 oldVotes, uint96 newVotes) private {
        uint32 timeStamp = uint32(block.timestamp);
        
        unchecked {
            if (nCheckpoints != 0 && checkpoints[delegatee][nCheckpoints - 1].fromTimeStamp == timeStamp) {
                checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
            } else {
                checkpoints[delegatee][nCheckpoints] = Checkpoint(timeStamp, newVotes);
                numCheckpoints[delegatee] = nCheckpoints + 1;
            }
        }
        
        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }
    
    /// @notice Burn function for Baal `loot`.
    function _burnLoot(address from, uint96 loot) private {
        members[from].loot -= loot; /*subtract `loot` for `from` account*/
        
        unchecked {
            totalLoot -= loot; /*subtract from total Baal `loot`*/
        }
        
        emit TransferLoot(from, address(0), loot); /*emit event reflecting burn of `loot`*/
    }
    
    /// @notice Burn function for Baal `shares`.
    function _burnShares(address from, uint96 shares) private {
        balanceOf[from] -= shares; /*subtract `shares` for `from` account*/
        
        unchecked {
            totalSupply -= shares; /*subtract from total Baal `shares`*/
        }
        
        _moveDelegates(delegates[from], address(0), shares); /*update delegation*/
        
        emit Transfer(from, address(0), shares); /*emit event reflecting burn of `shares` with erc20 accounting*/
    }
    
    /// @notice Minting function for Baal `loot`.
    function _mintLoot(address to, uint96 loot) private {
        unchecked {
            if (totalSupply + loot <= type(uint96).max / 2) {
                members[to].loot += loot; /*add `loot` for `to` account*/
        
                totalLoot += loot; /*add to total Baal `loot`*/
            
                emit TransferLoot(address(0), to, loot); /*emit event reflecting mint of `loot`*/
            }
        }
    }
    
    /// @notice Minting function for Baal `shares`.
    function _mintShares(address to, uint96 shares) private {
        unchecked {
            if (totalSupply + shares <= type(uint96).max / 2) {
                balanceOf[to] += shares; /*add `shares` for `to` account*/
        
                totalSupply += shares; /*add to total Baal `shares`*/
            
                _moveDelegates(address(0), delegates[to], shares); /*update delegation*/
        
                emit Transfer(address(0), to, shares); /*emit event reflecting mint of `shares` with erc20 accounting*/
            }
        }
    }
 
    /// @notice Check to validate proposal processing requirements. 
    function _processingReady(uint proposal, Proposal memory prop) private view returns (bool ready) {
        unchecked {
            require(proposal <= proposalCount,'!exist'); /*check proposal exists*/
            require(proposals[proposal - 1].votingEnds == 0,'prev!processed'); /*check previous proposal has processed by deletion*/
            require(proposals[proposal].votingEnds != 0,'processed'); /*check given proposal has been sponsored & not yet processed by deletion*/
            if (singleSummoner) return true; /*if single member, process early*/
            if (prop.yesVotes > totalSupply / 2) return true; /*process early if majority member support*/
            require(prop.votingEnds + gracePeriod <= block.timestamp,'!ended'); /*check voting period has ended*/
            ready = true; /*otherwise, process if voting period done*/
        }
    }
    
    /// @notice Provides 'safe' {transfer} for tokens that do not consistently return 'true/false'.
    function _safeTransfer(address token, address to, uint amount) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, amount)); /*'transfer(address,uint)'*/
        require(success && (data.length == 0 || abi.decode(data, (bool))),'transfer failed'); /*checks success & allows non-conforming transfers*/
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bool","name":"_sharesPaused","type":"bool"},{"internalType":"uint32","name":"_gracePeriod","type":"uint32"},{"internalType":"uint32","name":"_minVotingPeriod","type":"uint32"},{"internalType":"uint32","name":"_maxVotingPeriod","type":"uint32"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address[]","name":"_guildTokens","type":"address[]"},{"internalType":"address[]","name":"_shamans","type":"address[]"},{"internalType":"address[]","name":"_summoners","type":"address[]"},{"internalType":"uint96[]","name":"_loot","type":"uint96[]"},{"internalType":"uint96[]","name":"_shares","type":"uint96[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposal","type":"uint256"}],"name":"ProcessProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint96","name":"lootToBurn","type":"uint96"},{"indexed":true,"internalType":"uint96","name":"sharesToBurn","type":"uint96"}],"name":"Ragequit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":true,"internalType":"uint256","name":"proposal","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"votingStarts","type":"uint256"}],"name":"SponsorProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"flag","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"proposal","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"to","type":"address[]"},{"indexed":false,"internalType":"uint96[]","name":"value","type":"uint96[]"},{"indexed":false,"internalType":"bytes[]","name":"data","type":"bytes[]"},{"indexed":false,"internalType":"string","name":"details","type":"string"}],"name":"SubmitProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposal","type":"uint256"},{"indexed":true,"internalType":"bool","name":"approved","type":"bool"}],"name":"SubmitVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"lootPaused","type":"bool"},{"indexed":false,"internalType":"bool","name":"sharesPaused","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gracePeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"address[]","name":"guildTokens","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"shamans","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"summoners","type":"address[]"},{"indexed":false,"internalType":"uint96[]","name":"loot","type":"uint96[]"},{"indexed":false,"internalType":"uint96[]","name":"shares","type":"uint96[]"}],"name":"SummonComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint96","name":"amount","type":"uint96"}],"name":"TransferLoot","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromTimeStamp","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGuildTokens","outputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposal","type":"uint256"}],"name":"getProposalFlags","outputs":[{"internalType":"bool[4]","name":"flags","type":"bool[4]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gracePeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lootPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxVotingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shaman","type":"address"},{"internalType":"uint96","name":"loot","type":"uint96"},{"internalType":"uint96","name":"shares","type":"uint96"},{"internalType":"bool","name":"mint","type":"bool"}],"name":"memberAction","outputs":[{"internalType":"uint96","name":"lootOut","type":"uint96"},{"internalType":"uint96","name":"sharesOut","type":"uint96"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"members","outputs":[{"internalType":"uint96","name":"loot","type":"uint96"},{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minVotingPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"sig","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"sig","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"sig","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposal","type":"uint256"}],"name":"processProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint32","name":"votingPeriod","type":"uint32"},{"internalType":"uint32","name":"votingStarts","type":"uint32"},{"internalType":"uint32","name":"votingEnds","type":"uint32"},{"internalType":"uint96","name":"yesVotes","type":"uint96"},{"internalType":"uint96","name":"noVotes","type":"uint96"},{"internalType":"string","name":"details","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalsPassed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint96","name":"lootToBurn","type":"uint96"},{"internalType":"uint96","name":"sharesToBurn","type":"uint96"}],"name":"ragequit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shamans","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sharesPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposal","type":"uint256"}],"name":"sponsorProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"flag","type":"uint8"},{"internalType":"uint32","name":"votingPeriod","type":"uint32"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint96[]","name":"value","type":"uint96[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"string","name":"details","type":"string"}],"name":"submitProposal","outputs":[{"internalType":"uint256","name":"proposal","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposal","type":"uint256"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"submitVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposal","type":"uint256"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"submitVoteWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLoot","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"transferLoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162006d7438038062006d74833981016040819052620000349162000bb9565b63ffffffff8916620000755760405162461bcd60e51b8152602060048201526005602482015264182fb6b4b760d91b60448201526064015b60405180910390fd5b8763ffffffff168963ffffffff161115620000bd5760405162461bcd60e51b81526020600482015260076024820152660dad2dc7cdac2f60cb1b60448201526064016200006c565b8451620000f85760405162461bcd60e51b8152602060048201526008602482015267305f746f6b656e7360c01b60448201526064016200006c565b8251620001365760405162461bcd60e51b815260206004820152600b60248201526a305f73756d6d6f6e65727360a81b60448201526064016200006c565b8151835114801562000149575080518251145b620001975760405162461bcd60e51b815260206004820152601460248201527f216d656d6265722061727261792070617269747900000000000000000000000060448201526064016200006c565b60005b8451811015620001fa57600160106000878481518110620001bf57620001bf62000fc2565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016200019a565b5060005b8551811015620002655760068682815181106200021f576200021f62000fc2565b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501620001fe565b5060005b83518110156200037757620002bd8482815181106200028c576200028c62000fc2565b6020026020010151848381518110620002a957620002a962000fc2565b60200260200101516200048560201b60201c565b62000307848281518110620002d657620002d662000fc2565b6020026020010151838381518110620002f357620002f362000fc2565b60200260200101516200054460201b60201c565b6200035184828151811062000320576200032062000fc2565b60200260200101518583815181106200033d576200033d62000fc2565b60200260200101516200061b60201b60201c565b8351600114156200036e576000805462ff00001916620100001790555b60010162000269565b506000805463ffffffff808d16600160d81b0263ffffffff60d81b1990921691909117909155600180548a8316640100000000026001600160401b0319909116928c16929092179190911790558a15620003d9576000805460ff191660011790555b6000805461ff0019166101008d1515021790558651620004019060049060208a019062000966565b5085516200041790600590602089019062000966565b5060016003556000546040517fed32625fa3563c019d2077aa04c53d5d9f796acee06e13a8bd74be8e9226348e916200046c9160ff909116908e908e908e908e908e908e908e908e908e908e908e9062000e15565b60405180910390a1505050505050505050505062000fee565b60005460016001605f1b03600160781b9091046001600160601b039081168301161162000540576001600160a01b0382166000818152600d6020908152604080832080546001600160601b031981166001600160601b03918216880182161790915583546301000000600160781b03198116630100000091829004831688018316909102178455905190851681527f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b85878791015b60405180910390a35b5050565b60005460016001605f1b03600160781b9091046001600160601b039081168301161162000540576001600160a01b03828116600090815260086020908152604080832080546001600160601b038781169091019091558354600160781b600160d81b03198116600160781b918290048316880190921602178355600b909152812054620005d3921683620006b5565b6040516001600160601b03821681526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200162000537565b6001600160a01b038083166000908152600b6020908152604080832080548686166001600160a01b0319821617909155600890925290912054911690620006669082908490620006b5565b816001600160a01b0316816001600160a01b0316846001600160a01b03167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4505050565b816001600160a01b0316836001600160a01b031614158015620006e057506001600160601b03811615155b15620007f8576001600160a01b038316156200076f576001600160a01b0383166000908152600a602052604081205490816200071e57600062000758565b6001600160a01b03851660009081526009602090815260408083206000198601845290915290205464010000000090046001600160601b03165b90508281036200076b86848484620007fd565b5050505b6001600160a01b03821615620007f8576001600160a01b0382166000908152600a60205260408120549081620007a7576000620007e1565b6001600160a01b03841660009081526009602090815260408083206000198601845290915290205464010000000090046001600160601b03165b9050828101620007f485848484620007fd565b5050505b505050565b4283158015906200083d57506001600160a01b03851660009081526009602090815260408083206000198801845290915290205463ffffffff8281169116145b1562000893576001600160a01b03851660009081526009602090815260408083206000198801845290915290208054600160201b600160801b0319166401000000006001600160601b0385160217905562000911565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600983528781208c82528352878120965187549451909516640100000000026001600160801b03199094169490951693909317919091179093558152600a909152206001850190555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b828054620009749062000f85565b90600052602060002090601f016020900481019282620009985760008555620009e3565b82601f10620009b357805160ff1916838001178555620009e3565b82800160010185558215620009e3579182015b82811115620009e3578251825591602001919060010190620009c6565b50620009f1929150620009f5565b5090565b5b80821115620009f15760008155600101620009f6565b600082601f83011262000a1e57600080fd5b8151602062000a3762000a318362000f2c565b62000ef9565b80838252828201915082860187848660051b890101111562000a5857600080fd5b6000805b8681101562000a8f5782516001600160a01b038116811462000a7c578283fd5b8552938501939185019160010162000a5c565b509198975050505050505050565b600082601f83011262000aaf57600080fd5b8151602062000ac262000a318362000f2c565b80838252828201915082860187848660051b890101111562000ae357600080fd5b6000805b8681101562000a8f5782516001600160601b038116811462000b07578283fd5b8552938501939185019160010162000ae7565b8051801515811462000b2b57600080fd5b919050565b600082601f83011262000b4257600080fd5b81516001600160401b0381111562000b5e5762000b5e62000fd8565b62000b73601f8201601f191660200162000ef9565b81815284602083860101111562000b8957600080fd5b62000b9c82602083016020870162000f52565b949350505050565b805163ffffffff8116811462000b2b57600080fd5b60008060008060008060008060008060006101608c8e03121562000bdc57600080fd5b62000be78c62000b1a565b9a5062000bf760208d0162000ba4565b995062000c0760408d0162000ba4565b985062000c1760608d0162000ba4565b60808d01519098506001600160401b0381111562000c3457600080fd5b62000c428e828f0162000b30565b60a08e015190985090506001600160401b0381111562000c6157600080fd5b62000c6f8e828f0162000b30565b60c08e015190975090506001600160401b0381111562000c8e57600080fd5b62000c9c8e828f0162000a0c565b60e08e015190965090506001600160401b0381111562000cbb57600080fd5b62000cc98e828f0162000a0c565b6101008e015190955090506001600160401b0381111562000ce957600080fd5b62000cf78e828f0162000a0c565b6101208e015190945090506001600160401b0381111562000d1757600080fd5b62000d258e828f0162000a9d565b6101408e015190935090506001600160401b0381111562000d4557600080fd5b62000d538e828f0162000a9d565b9150509295989b509295989b9093969950565b600081518084526020808501945080840160005b8381101562000da15781516001600160a01b03168752958201959082019060010162000d7a565b509495945050505050565b600081518084526020808501945080840160005b8381101562000da15781516001600160601b03168752958201959082019060010162000dc0565b6000815180845262000e0181602086016020860162000f52565b601f01601f19169290920160200192915050565b8c151581528b1515602082015263ffffffff8b16604082015263ffffffff8a16606082015263ffffffff8916608082015261018060a0820152600062000e6061018083018a62000de7565b82810360c084015262000e74818a62000de7565b905082810360e084015262000e8a818962000d66565b905082810361010084015262000ea1818862000d66565b905082810361012084015262000eb8818762000d66565b905082810361014084015262000ecf818662000dac565b905082810361016084015262000ee6818562000dac565b9f9e505050505050505050505050505050565b604051601f8201601f191681016001600160401b038111828210171562000f245762000f2462000fd8565b604052919050565b60006001600160401b0382111562000f485762000f4862000fd8565b5060051b60200190565b60005b8381101562000f6f57818101518382015260200162000f55565b8381111562000f7f576000848401525b50505050565b600181811c9082168062000f9a57607f821691505b6020821081141562000fbc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b615d768062000ffe6000396000f3fe6080604052600436106102e05760003560e01c806373110d1311610184578063ac041b5b116100d6578063c3cda5201161008a578063dd62ed3e11610064578063dd62ed3e146109d9578063e63bc62d14610a11578063f23a6e6114610a3157600080fd5b8063c3cda52014610983578063c64c209b146109a3578063da35c664146109c357600080fd5b8063b2643aab116100bb578063b2643aab14610907578063b4b5ea5714610934578063bc197c811461095457600080fd5b8063ac041b5b146108ba578063ac9650d8146108da57600080fd5b806394a4babe116101385780639a23b2b4116101125780639a23b2b414610856578063a001793814610876578063a06db7dc1461089657600080fd5b806394a4babe1461080157806395d89b41146108215780639746d9401461083657600080fd5b80637e1514dc116101695780637e1514dc146107975780637ecebe00146107b75780638635447a146107e457600080fd5b806373110d1314610757578063782d6fe11461077757600080fd5b8063313ce5671161023d5780635c19a95c116101f1578063635e99aa116101cb578063635e99aa146106c85780636fcfff45146106ef57806370a082311461072a57600080fd5b80635c19a95c146106565780635fe6955914610678578063612c56fa146106a857600080fd5b80633232444c116102225780633232444c146105a557806353c924e4146105d5578063587cde1e1461060857600080fd5b8063313ce5671461055c578063317b2c4c1461058357600080fd5b80630cdfebfa11610294578063150b7a0211610279578063150b7a02146104a157806318160ddd146104fe5780631c97cf3f1461053d57600080fd5b80630cdfebfa146103f25780630e31f6c21461046757600080fd5b806308ae4b0c116102c557806308ae4b0c14610349578063095ea7b3146103a85780630ac419b2146103d857600080fd5b8063013cf08b146102ec57806306fdde031461032757600080fd5b366102e757005b600080fd5b3480156102f857600080fd5b5061030c6103073660046154b0565b610a5e565b60405161031e969594939291906159f0565b60405180910390f35b34801561033357600080fd5b5061033c610b3d565b60405161031e91906159dd565b34801561035557600080fd5b50610389610364366004614fea565b600d60205260009081526040902080546001909101546001600160601b039091169082565b604080516001600160601b03909316835260208301919091520161031e565b3480156103b457600080fd5b506103c86103c3366004615294565b610bcb565b604051901515815260200161031e565b3480156103e457600080fd5b506000546103c89060ff1681565b3480156103fe57600080fd5b5061044361040d366004615294565b600960209081526000928352604080842090915290825290205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b0390911660208301520161031e565b34801561047357600080fd5b5060015461048c90640100000000900463ffffffff1681565b60405163ffffffff909116815260200161031e565b3480156104ad57600080fd5b506104cd6104bc3660046150f3565b50630a85bd0160e11b949350505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161031e565b34801561050a57600080fd5b5060005461052590600160781b90046001600160601b031681565b6040516001600160601b03909116815260200161031e565b34801561054957600080fd5b506000546103c890610100900460ff1681565b34801561056857600080fd5b50610571601281565b60405160ff909116815260200161031e565b34801561058f57600080fd5b50610598610c37565b60405161031e91906158fb565b3480156105b157600080fd5b506103c86105c0366004614fea565b60106020526000908152604090205460ff1681565b6105e86105e336600461537b565b610c99565b604080516001600160601b0393841681529290911660208301520161031e565b34801561061457600080fd5b5061063e610623366004614fea565b600b602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161031e565b34801561066257600080fd5b50610676610671366004614fea565b610e7a565b005b34801561068457600080fd5b506103c86106933660046154b0565b600f6020526000908152604090205460ff1681565b3480156106b457600080fd5b506106766106c33660046154e2565b610e87565b3480156106d457600080fd5b5060005461052590630100000090046001600160601b031681565b3480156106fb57600080fd5b5061071c61070a366004614fea565b600a6020526000908152604090205481565b60405190815260200161031e565b34801561073657600080fd5b5061071c610745366004614fea565b60086020526000908152604090205481565b34801561076357600080fd5b50610676610772366004615221565b611009565b34801561078357600080fd5b50610525610792366004615294565b6112f9565b3480156107a357600080fd5b506106766107b2366004615507565b611507565b3480156107c357600080fd5b5061071c6107d2366004614fea565b600c6020526000908152604090205481565b3480156107f057600080fd5b5060015461048c9063ffffffff1681565b34801561080d57600080fd5b5061067661081c366004615316565b611847565b34801561082d57600080fd5b5061033c611946565b34801561084257600080fd5b506106766108513660046154b0565b611953565b34801561086257600080fd5b506103c86108713660046151da565b611b1c565b34801561088257600080fd5b506103c8610891366004615316565b611cad565b3480156108a257600080fd5b5060005461048c90600160d81b900463ffffffff1681565b3480156108c657600080fd5b5061071c6108d5366004615557565b611db5565b3480156108e657600080fd5b506108fa6108f53660046153d5565b6123c5565b60405161031e919061597b565b34801561091357600080fd5b506109276109223660046154b0565b612512565b60405161031e9190615948565b34801561094057600080fd5b5061052561094f366004614fea565b61257c565b34801561096057600080fd5b506104cd61096f366004615038565b5063bc197c8160e01b979650505050505050565b34801561098f57600080fd5b5061067661099e3660046152be565b6125e2565b3480156109af57600080fd5b506106766109be36600461534d565b612850565b3480156109cf57600080fd5b5061071c60025481565b3480156109e557600080fd5b5061071c6109f4366004615005565b600760209081526000928352604080842090915290825290205481565b348015610a1d57600080fd5b50610676610a2c3660046154b0565b612b1c565b348015610a3d57600080fd5b506104cd610a4c366004615162565b5063f23a6e6160e01b95945050505050565b600e6020526000908152604090208054600182015460068301805463ffffffff808516956401000000008604821695600160401b8104909216946001600160601b03600160601b909304831694921692909190610aba90615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae690615c85565b8015610b335780601f10610b0857610100808354040283529160200191610b33565b820191906000526020600020905b815481529060010190602001808311610b1657829003601f168201915b5050505050905086565b60048054610b4a90615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7690615c85565b8015610bc35780601f10610b9857610100808354040283529160200191610bc3565b820191906000526020600020905b815481529060010190602001808311610ba657829003601f168201915b505050505081565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c269086815260200190565b60405180910390a350600192915050565b60606006805480602002602001604051908101604052809291908181526020018280548015610c8f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c71575b5050505050905090565b600080600354600114610cdf5760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b60448201526064015b60405180910390fd5b60026003556001600160a01b03861660009081526010602052604090205460ff16610d4c5760405162461bcd60e51b815260206004820152600760248201527f217368616d616e000000000000000000000000000000000000000000000000006044820152606401610cd6565b6040517fff4c98840000000000000000000000000000000000000000000000000000000081523360048201526001600160601b038087166024830152851660448201526001600160a01b0387169063ff4c988490349060640160408051808303818588803b158015610dbd57600080fd5b505af1158015610dd1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610df6919061565c565b90925090508215610e38576001600160601b03821615610e1a57610e1a3383613bf6565b6001600160601b03811615610e3357610e333382613cbe565b610e6a565b6001600160601b03821615610e5157610e513383613dab565b6001600160601b03811615610e6a57610e6a3382613e68565b6001600355909590945092505050565b610e843382613f4d565b50565b600354600114610ec55760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b60026003556000828152600e602052604081208054909190610ef6903390640100000000900463ffffffff166112f9565b825490915042600160401b90910463ffffffff161015610f405760405162461bcd60e51b8152602060048201526005602482015264195b99195960da1b6044820152606401610cd6565b8215610f915781546001600160601b03600160601b80830482168401909116026bffffffffffffffffffffffff60601b19909116178255336000908152600d60205260409020600101849055610fba565b6001820180546001600160601b038082168401166bffffffffffffffffffffffff199091161790555b6040516001600160601b038216815283151590859033907f786755545a7e27c12c90cc7f0934514d03fdacfe3684a340b8c4100531e7ecd59060200160405180910390a4505060016003555050565b60007f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f35600460405161103b919061579d565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401206001600160a01b038c81166000818152600c87528481208054600181019091557f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e960c088015260e0870192909252918d166101008601526001600160601b038c166101208601526101408501526101608085018b90528351808603909101815261018085019093528251929094019190912061190160f01b6101a08401526101a283018290526101c2830181905290935091906101e20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa15801561119a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166111ea5760405162461bcd60e51b815260206004820152600a602482015269217369676e61746f727960b01b6044820152606401610cd6565b8a6001600160a01b0316816001600160a01b03161461124b5760405162461bcd60e51b815260206004820152600b60248201527f21617574686f72697a65640000000000000000000000000000000000000000006044820152606401610cd6565b505050844211156112885760405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b6044820152606401610cd6565b6001600160a01b038881166000818152600760209081526040808320948c16808452948252918290206001600160601b038b169081905591519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35050505050505050565b600042821061134a5760405162461bcd60e51b815260206004820152600b60248201527f2164657465726d696e65640000000000000000000000000000000000000000006044820152606401610cd6565b6001600160a01b0383166000908152600a602052604090205480611372576000915050611501565b6001600160a01b03841660009081526009602090815260408083206000198501845290915290205463ffffffff1683106113e7576001600160a01b0384166000908152600960209081526040808320600019909401835292905220546001600160601b03640100000000909104169050611501565b6001600160a01b038416600090815260096020908152604080832083805290915290205463ffffffff16831015611422576000915050611501565b600060001982015b818111156114c8576001600160a01b038616600090815260096020908152604080832060028686030485038085529083529281902081518083019092525463ffffffff81168083526401000000009091046001600160601b031692820192909252908714156114a3576020015194506115019350505050565b805163ffffffff168711156114ba578193506114c1565b6001820392505b505061142a565b506001600160a01b0385166000908152600960209081526040808320938352929052205464010000000090046001600160601b03169150505b92915050565b6003546001146115455760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b60026003556000858152600e602052604080822090519091907f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f359061158c9060049061579d565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401207f9743d4a93cddcc4a4dde282c87f883f02700a64c026c1f456f3e4ee79abab60f60c084015260e083018b9052891515610100808501919091528251808503909101815261012084019092528151919093012061190160f01b610140830152610142820183905261016282018190529192506000906101820160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156116ad573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166116fd5760405162461bcd60e51b815260206004820152600a602482015269217369676e61746f727960b01b6044820152606401610cd6565b845460009061171b908390640100000000900463ffffffff166112f9565b865490915042600160401b90910463ffffffff1610156117655760405162461bcd60e51b8152602060048201526005602482015264195b99195960da1b6044820152606401610cd6565b89156117bf5785546001600160601b03600160601b80830482168401909116026bffffffffffffffffffffffff60601b199091161786556001600160a01b0382166000908152600d602052604090206001018b90556117e8565b6001860180546001600160601b038082168401166bffffffffffffffffffffffff199091161790555b6040516001600160601b03821681528a1515908c906001600160a01b038516907f786755545a7e27c12c90cc7f0934514d03fdacfe3684a340b8c4100531e7ecd59060200160405180910390a450506001600355505050505050505050565b60005460ff161561188a5760405162461bcd60e51b815260206004820152600d60248201526c217472616e7366657261626c6560981b6044820152606401610cd6565b336000908152600d6020526040812080548392906118b29084906001600160601b0316615b67565b82546101009290920a6001600160601b038181021990931691831602179091556001600160a01b0384166000818152600d602090815260409182902080546bffffffffffffffffffffffff198116908616880186161790559051928516835290925033917f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b85878791015b60405180910390a35050565b60058054610b4a90615c85565b6003546001146119915760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b60026003556000818152600e602090815260408083203384526008909252909120546119ff5760405162461bcd60e51b815260206004820152600760248201527f216d656d626572000000000000000000000000000000000000000000000000006044820152606401610cd6565b805463ffffffff16611a3c5760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610cd6565b8054640100000000900463ffffffff1615611a995760405162461bcd60e51b815260206004820152600960248201527f73706f6e736f72656400000000000000000000000000000000000000000000006044820152606401610cd6565b805463ffffffff4281811664010000000002808316838516178201909216600160401b026bffffffff0000000000000000199092166bffffffffffffffff000000001990931692909217178255604051839033907fd45ad122361f16d6f50d7c4a73638f20ee48eff6186af15224e2a4a1f6d5017190600090a450506001600355565b60008054610100900460ff1615611b655760405162461bcd60e51b815260206004820152600d60248201526c217472616e7366657261626c6560981b6044820152606401610cd6565b6001600160a01b038416600090815260076020908152604080832033845290915290205460001914611bd3576001600160a01b0384166000908152600760209081526040808320338452909152812080546001600160601b0385169290611bcd908490615b50565b90915550505b6001600160a01b038416600090815260086020526040812080546001600160601b0385169290611c04908490615b50565b90915550506001600160a01b03808416600081815260086020908152604080832080546001600160601b0389160190558885168352600b90915280822054928252902054611c5792918216911684613ff2565b6040516001600160601b03831681526001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060019392505050565b60008054610100900460ff1615611cf65760405162461bcd60e51b815260206004820152600d60248201526c217472616e7366657261626c6560981b6044820152606401610cd6565b33600090815260086020526040812080546001600160601b0385169290611d1e908490615b50565b90915550506001600160a01b03808416600081815260086020908152604080832080546001600160601b038916019055338352600b90915280822054928252902054611d6f92918216911684613ff2565b6040516001600160601b03831681526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c26565b6000600354600114611df55760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b600260035560015463ffffffff808c16911611801590611e29575060015463ffffffff6401000000009091048116908b1611155b611e755760405162461bcd60e51b815260206004820152600d60248201527f21766f74696e67506572696f64000000000000000000000000000000000000006044820152606401610cd6565b600a881115611ec65760405162461bcd60e51b815260206004820152600960248201527f6172726179206d617800000000000000000000000000000000000000000000006044820152606401610cd6565b60038b60ff161115611f025760405162461bcd60e51b815260206004820152600560248201526421666c616760d81b6044820152606401610cd6565b611f0a614bcd565b6001818d60ff1660048110611f2157611f21615cf1565b9115156020909202015260ff8c1660021415612066576001871415611fd357600154640100000000900463ffffffff168888600081611f6257611f62615cf1565b9050602002016020810190611f77919061563f565b6001600160601b03161115611fce5760405162461bcd60e51b815260206004820152600860248201527f6f766572206d61780000000000000000000000000000000000000000000000006044820152606401610cd6565b6120c0565b6002871415611fce576001805463ffffffff169089908990818110611ffa57611ffa615cf1565b905060200201602081019061200f919061563f565b6001600160601b03161015611fce5760405162461bcd60e51b815260206004820152600960248201527f756e646572206d696e00000000000000000000000000000000000000000000006044820152606401610cd6565b888714801561207457508685145b6120c05760405162461bcd60e51b815260206004820152600d60248201527f21617272617920706172697479000000000000000000000000000000000000006044820152606401610cd6565b33600090815260086020526040812054156120d9575060015b60028054600101905560408051610140810190915263ffffffff8d1681526020810182612107576000612109565b425b63ffffffff16815260200182612120576000612124565b8d42015b63ffffffff16815260200160006001600160601b0316815260200160006001600160601b031681526020018381526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506020016121d0888a615b8f565b815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050600280548252600e6020908152604092839020855181549287015194870151606088015163ffffffff92831667ffffffffffffffff199095169490941764010000000096831696909602959095177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff16600160401b91909516026bffffffffffffffffffffffff60601b191693909317600160601b6001600160601b039283160217835560808501516001840180546bffffffffffffffffffffffff19169190921617905560a08401519192506122e991908301906004614beb565b5060c08201518051612305916003840191602090910190614c7d565b5060e08201518051612321916004840191602090910190614cdf565b50610100820151805161233e916005840191602090910190614d85565b50610120820151805161235b916006840191602090910190614dde565b509050508b63ffffffff16838e60ff167f50816127f50bc7b89be229f8063a0f3995c58cebdac89a56cb6bda32fa688cf98e8e8e8e8e8e8e8e6040516123a8989796959493929190615839565b60405180910390a4505060016003559a9950505050505050505050565b60608167ffffffffffffffff8111156123e0576123e0615d07565b60405190808252806020026020018201604052801561241357816020015b60608152602001906001900390816123fe5790505b50905060005b8281101561250b576000803086868581811061243757612437615cf1565b90506020028101906124499190615a44565b604051612457929190615771565b600060405180830381855af49150503d8060008114612492576040519150601f19603f3d011682016040523d82523d6000602084013e612497565b606091505b5091509150816124e3576044815110156124b057600080fd5b600481019050808060200190518101906124ca9190615434565b60405162461bcd60e51b8152600401610cd691906159dd565b808484815181106124f6576124f6615cf1565b60209081029190910101525050600101612419565b5092915050565b61251a614bcd565b6000828152600e602052604080822081516080810192839052926002909101916004918390855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612541575094979650505050505050565b6001600160a01b0381166000908152600a6020526040812054806125a15760006125db565b6001600160a01b03831660009081526009602090815260408083206000198501845290915290205464010000000090046001600160601b03165b9392505050565b60007f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f356004604051612614919061579d565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401207f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015612741573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127915760405162461bcd60e51b815260206004820152600a602482015269217369676e61746f727960b01b6044820152606401610cd6565b6001600160a01b0381166000908152600c6020526040902080546001810190915589146128005760405162461bcd60e51b815260206004820152600660248201527f216e6f6e636500000000000000000000000000000000000000000000000000006044820152606401610cd6565b8742111561283a5760405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b6044820152606401610cd6565b612844818b613f4d565b50505050505050505050565b60035460011461288e5760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b6002600355336000908152600d60209081526040808320600101548352600e909152902054600160401b900463ffffffff16156128f95760405162461bcd60e51b81526020600482015260096024820152681c1c9bd8d95cdcd95960ba1b6044820152606401610cd6565b60005b600654811015612a915760006006828154811061291b5761291b615cf1565b600091825260209182902001546040805130602480830191909152825180830390910181526044909101825292830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166370a0823160e01b179052516001600160a01b039091169161298b91615781565b600060405180830381855afa9150503d80600081146129c6576040519150601f19603f3d011682016040523d82523d6000602084013e6129cb565b606091505b509150506000818060200190518101906129e591906154c9565b6000805491925090612a10906001600160601b0363010000008204811691600160781b900416615ae4565b6001600160601b031682612a248789615ae4565b6001600160601b0316612a379190615b31565b612a419190615b0f565b90508015612a7b57612a7b60068581548110612a5f57612a5f615cf1565b6000918252602090912001546001600160a01b0316888361412e565b5050508080612a8990615cc0565b9150506128fc565b506001600160601b03821615612aab57612aab3383613dab565b6001600160601b03811615612ac457612ac43382613e68565b6040516001600160a01b03841681526001600160601b03808316919084169033907fa6fdd1129b11eeeca9629fe02070648e56711f159a52c65449cf86a19ceb0d2d9060200160405180910390a45050600160035550565b600354600114612b5a5760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b600260038190556000828152600e60209081526040808320815161014081018352815463ffffffff80821683526401000000008204811695830195909552600160401b810490941681840152600160601b9093046001600160601b0390811660608501526001820154166080808501919091528251908101928390529094612e8894879493879360a08601939092908501916004918390855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612bf35790505050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015612c8557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612c67575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015612d0f57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b01049283019260010382029150808411612ccc5790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b82821015612de9578382906000526020600020018054612d5c90615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054612d8890615c85565b8015612dd55780601f10612daa57610100808354040283529160200191612dd5565b820191906000526020600020905b815481529060010190602001808311612db857829003601f168201915b505050505081526020019060010190612d3d565b505050508152602001600682018054612e0190615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054612e2d90615c85565b8015612e7a5780601f10612e4f57610100808354040283529160200191612e7a565b820191906000526020600020905b815481529060010190602001808311612e5d57829003601f168201915b50505050508152505061425e565b50600181015481546001600160601b03918216600160601b9091049091161115612ec6576000828152600f60205260409020805460ff191660011790555b600281015460ff16156131e6576040805161014081018252825463ffffffff8082168352640100000000820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526131e192849160a08401916002840190600490826000855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612f4c5790505050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015612fde57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612fc0575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561306857602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116130255790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156131425783829060005260206000200180546130b590615c85565b80601f01602080910402602001604051908101604052809291908181526020018280546130e190615c85565b801561312e5780601f106131035761010080835404028352916020019161312e565b820191906000526020600020905b81548152906001019060200180831161311157829003601f168201915b505050505081526020019060010190613096565b50505050815260200160068201805461315a90615c85565b80601f016020809104026020016040519081016040528092919081815260200182805461318690615c85565b80156131d35780601f106131a8576101008083540402835291602001916131d3565b820191906000526020600020905b8154815290600101906020018083116131b657829003601f168201915b505050505081525050614429565b613b35565b6002810154610100900460ff1615613506576040805161014081018252825463ffffffff8082168352640100000000820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526131e192849160a08401916002840190600490826000855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411613271579050505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561330357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116132e5575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561338d57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b0104928301926001038202915080841161334a5790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156134675783829060005260206000200180546133da90615c85565b80601f016020809104026020016040519081016040528092919081815260200182805461340690615c85565b80156134535780601f1061342857610100808354040283529160200191613453565b820191906000526020600020905b81548152906001019060200180831161343657829003601f168201915b5050505050815260200190600101906133bb565b50505050815260200160068201805461347f90615c85565b80601f01602080910402602001604051908101604052809291908181526020018280546134ab90615c85565b80156134f85780601f106134cd576101008083540402835291602001916134f8565b820191906000526020600020905b8154815290600101906020018083116134db57829003601f168201915b505050505081525050614500565b600281015462010000900460ff1615613827576040805161014081018252825463ffffffff8082168352640100000000820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526131e192849160a08401916002840190600490826000855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411613592579050505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561362457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613606575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156136ae57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b0104928301926001038202915080841161366b5790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156137885783829060005260206000200180546136fb90615c85565b80601f016020809104026020016040519081016040528092919081815260200182805461372790615c85565b80156137745780601f1061374957610100808354040283529160200191613774565b820191906000526020600020905b81548152906001019060200180831161375757829003601f168201915b5050505050815260200190600101906136dc565b5050505081526020016006820180546137a090615c85565b80601f01602080910402602001604051908101604052809291908181526020018280546137cc90615c85565b80156138195780601f106137ee57610100808354040283529160200191613819565b820191906000526020600020905b8154815290600101906020018083116137fc57829003601f168201915b505050505081525050614620565b6040805161014081018252825463ffffffff8082168352640100000000820481166020840152600160401b82041682840152600160601b90046001600160601b039081166060830152600184015416608080830191909152825190810192839052613b3592849160a08401916002840190600490826000855b825461010083900a900460ff1615158152602060019283018181049485019490930390920291018084116138a0579050505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561393257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613914575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156139bc57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116139795790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b82821015613a96578382906000526020600020018054613a0990615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054613a3590615c85565b8015613a825780601f10613a5757610100808354040283529160200191613a82565b820191906000526020600020905b815481529060010190602001808311613a6557829003601f168201915b5050505050815260200190600101906139ea565b505050508152602001600682018054613aae90615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054613ada90615c85565b8015613b275780601f10613afc57610100808354040283529160200191613b27565b820191906000526020600020905b815481529060010190602001808311613b0a57829003601f168201915b505050505081525050614848565b6000828152600e6020526040812080547fffffffffffffffff0000000000000000000000000000000000000000000000001681556001810180546bffffffffffffffffffffffff191690556002810182905590613b96600383016000614e52565b613ba4600483016000614e70565b613bb2600583016000614e95565b613bc0600683016000614eb3565b505060405182907f753d5d5633f467e3835cd605f6bcb9584fdab3e90e34d0ac888e2677e61c2ad990600090a250506001600355565b6000546b7fffffffffffffffffffffff600160781b9091046001600160601b0390811683011611613cba576001600160a01b0382166000818152600d6020908152604080832080546bffffffffffffffffffffffff1981166001600160601b03918216880182161790915583546effffffffffffffffffffffff000000198116630100000091829004831688018316909102178455905190851681527f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b858787910161193a565b5050565b6000546b7fffffffffffffffffffffff600160781b9091046001600160601b0390811683011611613cba576001600160a01b03828116600090815260086020908152604080832080546001600160601b0387811690910190915583547fffffffffff000000000000000000000000ffffffffffffffffffffffffffffff8116600160781b918290048316880190921602178355600b909152812054613d64921683613ff2565b6040516001600160601b03821681526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161193a565b6001600160a01b0382166000908152600d602052604081208054839290613ddc9084906001600160601b0316615b67565b82546101009290920a6001600160601b03818102199093169183160217909155600080546effffffffffffffffffffffff00000019811663010000009182900484168690038416909102178155604051918416825291506001600160a01b038416907f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b8587879060200161193a565b6001600160a01b038216600090815260086020526040812080546001600160601b0384169290613e99908490615b50565b9091555050600080546001600160601b03600160781b8083048216859003909116027fffffffffff000000000000000000000000ffffffffffffffffffffffffffffff9091161781556001600160a01b038084168252600b6020526040822054613f069291169083613ff2565b6040516001600160601b03821681526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161193a565b6001600160a01b038083166000908152600b60209081526040808320805486861673ffffffffffffffffffffffffffffffffffffffff19821617909155600890925290912054911690613fa39082908490613ff2565b816001600160a01b0316816001600160a01b0316846001600160a01b03167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4505050565b816001600160a01b0316836001600160a01b03161415801561401c57506001600160601b03811615155b15614129576001600160a01b038316156140a5576001600160a01b0383166000908152600a60205260408120549081614056576000614090565b6001600160a01b03851660009081526009602090815260408083206000198601845290915290205464010000000090046001600160601b03165b90508281036140a186848484614a58565b5050505b6001600160a01b03821615614129576001600160a01b0382166000908152600a602052604081205490816140da576000614114565b6001600160a01b03841660009081526009602090815260408083206000198601845290915290205464010000000090046001600160601b03165b905082810161412585848484614a58565b5050505b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052915160009283929087169161419f9190615781565b6000604051808303816000865af19150503d80600081146141dc576040519150601f19603f3d011682016040523d82523d6000602084013e6141e1565b606091505b509150915081801561420b57508051158061420b57508080602001905181019061420b9190615417565b6142575760405162461bcd60e51b815260206004820152600f60248201527f7472616e73666572206661696c656400000000000000000000000000000000006044820152606401610cd6565b5050505050565b600060025483111561429b5760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610cd6565b60001983016000908152600e6020526040902054600160401b900463ffffffff16156143095760405162461bcd60e51b815260206004820152600e60248201527f707265762170726f6365737365640000000000000000000000000000000000006044820152606401610cd6565b6000838152600e6020526040902054600160401b900463ffffffff1661435d5760405162461bcd60e51b81526020600482015260096024820152681c1c9bd8d95cdcd95960ba1b6044820152606401610cd6565b60005462010000900460ff161561437657506001611501565b600054600290600160781b90046001600160601b0316046001600160601b031682606001516001600160601b031611156143b257506001611501565b426000601b9054906101000a900463ffffffff1683604001510163ffffffff1611156144205760405162461bcd60e51b815260206004820152600660248201527f21656e64656400000000000000000000000000000000000000000000000000006044820152606401610cd6565b50600192915050565b60005b8160c0015151811015613cba578160c00151818151811061444f5761444f615cf1565b60200260200101516001600160a01b03168260e00151828151811061447657614476615cf1565b60200260200101516001600160601b0316836101000151838151811061449e5761449e615cf1565b60200260200101516040516144b39190615781565b60006040518083038185875af1925050503d80600081146144f0576040519150601f19603f3d011682016040523d82523d6000602084013e6144f5565b606091505b50505060010161442c565b60005b8160c0015151811015613cba57816101000151818151811061452757614527615cf1565b602002602001015151600014156145815761457c8260c00151828151811061455157614551615cf1565b60200260200101518360e00151838151811061456f5761456f615cf1565b6020026020010151613cbe565b614618565b6000600860008460c00151848151811061459d5761459d615cf1565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205490506145ef8360c0015183815181106145e1576145e1615cf1565b602002602001015182613e68565b6146168360c00151838151811061460857614608615cf1565b602002602001015182613bf6565b505b600101614503565b60e08101515160018114156146a1578160e0015160008151811061464657614646615cf1565b60200260200101516001600160601b0316600014613cba578160e0015160008151811061467557614675615cf1565b6020026020010151600160006101000a81548163ffffffff021916908363ffffffff1602179055505050565b806002141561471c578160e001516001815181106146c1576146c1615cf1565b60200260200101516001600160601b0316600014613cba578160e001516001815181106146f0576146f0615cf1565b6020026020010151600160046101000a81548163ffffffff021916908363ffffffff1602179055505050565b8060031415614797578160e0015160028151811061473c5761473c615cf1565b60200260200101516001600160601b0316600014613cba578160e0015160028151811061476b5761476b615cf1565b60200260200101516000601b6101000a81548163ffffffff021916908363ffffffff1602179055505050565b80600414156147ee578160e001516003815181106147b7576147b7615cf1565b60200260200101516001600160601b03166000146147e05750506000805460ff19166001179055565b50506000805460ff19169055565b8060051415613cba578160e0015160048151811061480e5761480e615cf1565b60200260200101516001600160601b0316600014614839576000805461ff0019166101001790555050565b50506000805461ff0019169055565b60005b8160c0015151811015613cba578160e00151818151811061486e5761486e615cf1565b60200260200101516001600160601b031660001480156148ad575081610100015181815181106148a0576148a0615cf1565b6020026020010151516000145b15614912576001601060008460c0015184815181106148ce576148ce615cf1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550614a50565b8160e00151818151811061492857614928615cf1565b60200260200101516001600160601b031660001480156149685750816101000151818151811061495a5761495a615cf1565b602002602001015151600014155b15614989576000601060008460c0015184815181106148ce576148ce615cf1565b8160e00151818151811061499f5761499f615cf1565b60200260200101516001600160601b03166000141580156149df575081610100015181815181106149d2576149d2615cf1565b6020026020010151516000145b15614a505760065461019014614a505760068260c001518281518110614a0757614a07615cf1565b602090810291909101810151825460018101845560009384529190922001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b60010161484b565b428315801590614a9757506001600160a01b03851660009081526009602090815260408083206000198801845290915290205463ffffffff8281169116145b15614af1576001600160a01b038516600090815260096020908152604080832060001988018452909152902080546fffffffffffffffffffffffff0000000019166401000000006001600160601b03851602179055614b78565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600983528781208c82528352878120965187549451909516640100000000026fffffffffffffffffffffffffffffffff199094169490951693909317919091179093558152600a909152206001850190555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b60405180608001604052806004906020820280368337509192915050565b600183019183908215614c6d5791602002820160005b83821115614c3e57835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302614c01565b8015614c6b5782816101000a81549060ff0219169055600101602081600001049283019260010302614c3e565b505b50614c79929150614ee9565b5090565b828054828255906000526020600020908101928215614c6d579160200282015b82811115614c6d578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190614c9d565b82805482825590600052602060002090600101600290048101928215614c6d5791602002820160005b83821115614d5257835183826101000a8154816001600160601b0302191690836001600160601b031602179055509260200192600c01602081600b01049283019260010302614d08565b8015614c6b5782816101000a8154906001600160601b030219169055600c01602081600b01049283019260010302614d52565b828054828255906000526020600020908101928215614dd2579160200282015b82811115614dd25782518051614dc2918491602090910190614dde565b5091602001919060010190614da5565b50614c79929150614efe565b828054614dea90615c85565b90600052602060002090601f016020900481019282614e0c5760008555614c6d565b82601f10614e2557805160ff1916838001178555614c6d565b82800160010185558215614c6d579182015b82811115614c6d578251825591602001919060010190614e37565b5080546000825590600052602060002090810190610e849190614ee9565b508054600082556001016002900490600052602060002090810190610e849190614ee9565b5080546000825590600052602060002090810190610e849190614efe565b508054614ebf90615c85565b6000825580601f10614ecf575050565b601f016020900490600052602060002090810190610e8491905b5b80821115614c795760008155600101614eea565b80821115614c79576000614f128282614eb3565b50600101614efe565b80356001600160a01b0381168114614f3257600080fd5b919050565b60008083601f840112614f4957600080fd5b50813567ffffffffffffffff811115614f6157600080fd5b6020830191508360208260051b8501011115614f7c57600080fd5b9250929050565b60008083601f840112614f9557600080fd5b50813567ffffffffffffffff811115614fad57600080fd5b602083019150836020828501011115614f7c57600080fd5b803563ffffffff81168114614f3257600080fd5b803560ff81168114614f3257600080fd5b600060208284031215614ffc57600080fd5b6125db82614f1b565b6000806040838503121561501857600080fd5b61502183614f1b565b915061502f60208401614f1b565b90509250929050565b60008060008060008060008060a0898b03121561505457600080fd5b61505d89614f1b565b975061506b60208a01614f1b565b9650604089013567ffffffffffffffff8082111561508857600080fd5b6150948c838d01614f37565b909850965060608b01359150808211156150ad57600080fd5b6150b98c838d01614f37565b909650945060808b01359150808211156150d257600080fd5b506150df8b828c01614f83565b999c989b5096995094979396929594505050565b60008060008060006080868803121561510b57600080fd5b61511486614f1b565b945061512260208701614f1b565b935060408601359250606086013567ffffffffffffffff81111561514557600080fd5b61515188828901614f83565b969995985093965092949392505050565b60008060008060008060a0878903121561517b57600080fd5b61518487614f1b565b955061519260208801614f1b565b94506040870135935060608701359250608087013567ffffffffffffffff8111156151bc57600080fd5b6151c889828a01614f83565b979a9699509497509295939492505050565b6000806000606084860312156151ef57600080fd5b6151f884614f1b565b925061520660208501614f1b565b9150604084013561521681615d2b565b809150509250925092565b600080600080600080600060e0888a03121561523c57600080fd5b61524588614f1b565b965061525360208901614f1b565b9550604088013561526381615d2b565b94506060880135935061527860808901614fd9565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156152a757600080fd5b6152b083614f1b565b946020939093013593505050565b60008060008060008060c087890312156152d757600080fd5b6152e087614f1b565b955060208701359450604087013593506152fc60608801614fd9565b92506080870135915060a087013590509295509295509295565b6000806040838503121561532957600080fd5b61533283614f1b565b9150602083013561534281615d2b565b809150509250929050565b60008060006060848603121561536257600080fd5b61536b84614f1b565b9250602084013561520681615d2b565b6000806000806080858703121561539157600080fd5b61539a85614f1b565b935060208501356153aa81615d2b565b925060408501356153ba81615d2b565b915060608501356153ca81615d1d565b939692955090935050565b600080602083850312156153e857600080fd5b823567ffffffffffffffff8111156153ff57600080fd5b61540b85828601614f37565b90969095509350505050565b60006020828403121561542957600080fd5b81516125db81615d1d565b60006020828403121561544657600080fd5b815167ffffffffffffffff81111561545d57600080fd5b8201601f8101841361546e57600080fd5b805161548161547c82615abc565b615a8b565b81815285602083850101111561549657600080fd5b6154a7826020830160208601615c55565b95945050505050565b6000602082840312156154c257600080fd5b5035919050565b6000602082840312156154db57600080fd5b5051919050565b600080604083850312156154f557600080fd5b82359150602083013561534281615d1d565b600080600080600060a0868803121561551f57600080fd5b85359450602086013561553181615d1d565b935061553f60408701614fd9565b94979396509394606081013594506080013592915050565b60008060008060008060008060008060c08b8d03121561557657600080fd5b61557f8b614fd9565b995061558d60208c01614fc5565b985060408b013567ffffffffffffffff808211156155aa57600080fd5b6155b68e838f01614f37565b909a50985060608d01359150808211156155cf57600080fd5b6155db8e838f01614f37565b909850965060808d01359150808211156155f457600080fd5b6156008e838f01614f37565b909650945060a08d013591508082111561561957600080fd5b506156268d828e01614f83565b915080935050809150509295989b9194979a5092959850565b60006020828403121561565157600080fd5b81356125db81615d2b565b6000806040838503121561566f57600080fd5b825161567a81615d2b565b602084015190925061534281615d2b565b81835260006020808501808196508560051b810191508460005b8781101561570f5782840389528135601e198836030181126156c657600080fd5b8701803567ffffffffffffffff8111156156df57600080fd5b8036038913156156ee57600080fd5b6156fb868289850161571c565b9a87019a95505050908401906001016156a5565b5091979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000815180845261575d816020860160208601615c55565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b60008251615793818460208701615c55565b9190910192915050565b600080835481600182811c9150808316806157b957607f831692505b60208084108214156157d957634e487b7160e01b86526022600452602486fd5b8180156157ed57600181146157fe5761582b565b60ff1986168952848901965061582b565b60008a81526020902060005b868110156158235781548b82015290850190830161580a565b505084890196505b509498975050505050505050565b6080808252810188905260008960a08301825b8b81101561587a576001600160a01b0361586584614f1b565b1682526020928301929091019060010161584c565b5083810360208581019190915289825291508990820160005b8a8110156158c15782356158a681615d2b565b6001600160601b031682529183019190830190600101615893565b5084810360408601526158d581898b61568b565b9250505082810360608401526158ec81858761571c565b9b9a5050505050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561593c5783516001600160a01b031683529284019291840191600101615917565b50909695505050505050565b60808101818360005b60048110156159725781511515835260209283019290910190600101615951565b50505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156159d057603f198886030184526159be858351615745565b945092850192908501906001016159a2565b5092979650505050505050565b6020815260006125db6020830184615745565b63ffffffff87811682528681166020830152851660408201526001600160601b0384811660608301528316608082015260c060a08201819052600090615a3890830184615745565b98975050505050505050565b6000808335601e19843603018112615a5b57600080fd5b83018035915067ffffffffffffffff821115615a7657600080fd5b602001915036819003821315614f7c57600080fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615ab457615ab4615d07565b604052919050565b600067ffffffffffffffff821115615ad657615ad6615d07565b50601f01601f191660200190565b60006001600160601b03808316818516808303821115615b0657615b06615cdb565b01949350505050565b600082615b2c57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615b4b57615b4b615cdb565b500290565b600082821015615b6257615b62615cdb565b500390565b60006001600160601b0383811690831681811015615b8757615b87615cdb565b039392505050565b600067ffffffffffffffff80841115615baa57615baa615d07565b8360051b6020615bbb818301615a8b565b8681528181019086368582011115615bd257600080fd5b600094505b88851015615c4957803586811115615bee57600080fd5b880136601f820112615bff57600080fd5b8035615c0d61547c82615abc565b8181523687838501011115615c2157600080fd5b8187840188830137600091810187019190915284525060019490940193918301918301615bd7565b50979650505050505050565b60005b83811015615c70578181015183820152602001615c58565b83811115615c7f576000848401525b50505050565b600181811c90821680615c9957607f821691505b60208210811415615cba57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615cd457615cd4615cdb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610e8457600080fd5b6001600160601b0381168114610e8457600080fdfea2646970667358221220074b5122b0dba43d33caac375506445943e32c725d22269ee6fc49478f47089b64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000094261616c204c616273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044241414c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000003ab458634910aad20ef5f1c8ee96f1d6ac549190000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a2000000000000000000000000015c6ac4cf1b5e49c44332fb0a1043ccab19db80a0000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca000000000000000000000000ced608aa29bb92185d9b6340adcbfa263dae075b000000000000000000000000d26a3f686d43f2a62ba9eae2ff77e9f516d945b900000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d63100000

Deployed Bytecode

0x6080604052600436106102e05760003560e01c806373110d1311610184578063ac041b5b116100d6578063c3cda5201161008a578063dd62ed3e11610064578063dd62ed3e146109d9578063e63bc62d14610a11578063f23a6e6114610a3157600080fd5b8063c3cda52014610983578063c64c209b146109a3578063da35c664146109c357600080fd5b8063b2643aab116100bb578063b2643aab14610907578063b4b5ea5714610934578063bc197c811461095457600080fd5b8063ac041b5b146108ba578063ac9650d8146108da57600080fd5b806394a4babe116101385780639a23b2b4116101125780639a23b2b414610856578063a001793814610876578063a06db7dc1461089657600080fd5b806394a4babe1461080157806395d89b41146108215780639746d9401461083657600080fd5b80637e1514dc116101695780637e1514dc146107975780637ecebe00146107b75780638635447a146107e457600080fd5b806373110d1314610757578063782d6fe11461077757600080fd5b8063313ce5671161023d5780635c19a95c116101f1578063635e99aa116101cb578063635e99aa146106c85780636fcfff45146106ef57806370a082311461072a57600080fd5b80635c19a95c146106565780635fe6955914610678578063612c56fa146106a857600080fd5b80633232444c116102225780633232444c146105a557806353c924e4146105d5578063587cde1e1461060857600080fd5b8063313ce5671461055c578063317b2c4c1461058357600080fd5b80630cdfebfa11610294578063150b7a0211610279578063150b7a02146104a157806318160ddd146104fe5780631c97cf3f1461053d57600080fd5b80630cdfebfa146103f25780630e31f6c21461046757600080fd5b806308ae4b0c116102c557806308ae4b0c14610349578063095ea7b3146103a85780630ac419b2146103d857600080fd5b8063013cf08b146102ec57806306fdde031461032757600080fd5b366102e757005b600080fd5b3480156102f857600080fd5b5061030c6103073660046154b0565b610a5e565b60405161031e969594939291906159f0565b60405180910390f35b34801561033357600080fd5b5061033c610b3d565b60405161031e91906159dd565b34801561035557600080fd5b50610389610364366004614fea565b600d60205260009081526040902080546001909101546001600160601b039091169082565b604080516001600160601b03909316835260208301919091520161031e565b3480156103b457600080fd5b506103c86103c3366004615294565b610bcb565b604051901515815260200161031e565b3480156103e457600080fd5b506000546103c89060ff1681565b3480156103fe57600080fd5b5061044361040d366004615294565b600960209081526000928352604080842090915290825290205463ffffffff81169064010000000090046001600160601b031682565b6040805163ffffffff90931683526001600160601b0390911660208301520161031e565b34801561047357600080fd5b5060015461048c90640100000000900463ffffffff1681565b60405163ffffffff909116815260200161031e565b3480156104ad57600080fd5b506104cd6104bc3660046150f3565b50630a85bd0160e11b949350505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161031e565b34801561050a57600080fd5b5060005461052590600160781b90046001600160601b031681565b6040516001600160601b03909116815260200161031e565b34801561054957600080fd5b506000546103c890610100900460ff1681565b34801561056857600080fd5b50610571601281565b60405160ff909116815260200161031e565b34801561058f57600080fd5b50610598610c37565b60405161031e91906158fb565b3480156105b157600080fd5b506103c86105c0366004614fea565b60106020526000908152604090205460ff1681565b6105e86105e336600461537b565b610c99565b604080516001600160601b0393841681529290911660208301520161031e565b34801561061457600080fd5b5061063e610623366004614fea565b600b602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161031e565b34801561066257600080fd5b50610676610671366004614fea565b610e7a565b005b34801561068457600080fd5b506103c86106933660046154b0565b600f6020526000908152604090205460ff1681565b3480156106b457600080fd5b506106766106c33660046154e2565b610e87565b3480156106d457600080fd5b5060005461052590630100000090046001600160601b031681565b3480156106fb57600080fd5b5061071c61070a366004614fea565b600a6020526000908152604090205481565b60405190815260200161031e565b34801561073657600080fd5b5061071c610745366004614fea565b60086020526000908152604090205481565b34801561076357600080fd5b50610676610772366004615221565b611009565b34801561078357600080fd5b50610525610792366004615294565b6112f9565b3480156107a357600080fd5b506106766107b2366004615507565b611507565b3480156107c357600080fd5b5061071c6107d2366004614fea565b600c6020526000908152604090205481565b3480156107f057600080fd5b5060015461048c9063ffffffff1681565b34801561080d57600080fd5b5061067661081c366004615316565b611847565b34801561082d57600080fd5b5061033c611946565b34801561084257600080fd5b506106766108513660046154b0565b611953565b34801561086257600080fd5b506103c86108713660046151da565b611b1c565b34801561088257600080fd5b506103c8610891366004615316565b611cad565b3480156108a257600080fd5b5060005461048c90600160d81b900463ffffffff1681565b3480156108c657600080fd5b5061071c6108d5366004615557565b611db5565b3480156108e657600080fd5b506108fa6108f53660046153d5565b6123c5565b60405161031e919061597b565b34801561091357600080fd5b506109276109223660046154b0565b612512565b60405161031e9190615948565b34801561094057600080fd5b5061052561094f366004614fea565b61257c565b34801561096057600080fd5b506104cd61096f366004615038565b5063bc197c8160e01b979650505050505050565b34801561098f57600080fd5b5061067661099e3660046152be565b6125e2565b3480156109af57600080fd5b506106766109be36600461534d565b612850565b3480156109cf57600080fd5b5061071c60025481565b3480156109e557600080fd5b5061071c6109f4366004615005565b600760209081526000928352604080842090915290825290205481565b348015610a1d57600080fd5b50610676610a2c3660046154b0565b612b1c565b348015610a3d57600080fd5b506104cd610a4c366004615162565b5063f23a6e6160e01b95945050505050565b600e6020526000908152604090208054600182015460068301805463ffffffff808516956401000000008604821695600160401b8104909216946001600160601b03600160601b909304831694921692909190610aba90615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae690615c85565b8015610b335780601f10610b0857610100808354040283529160200191610b33565b820191906000526020600020905b815481529060010190602001808311610b1657829003601f168201915b5050505050905086565b60048054610b4a90615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7690615c85565b8015610bc35780601f10610b9857610100808354040283529160200191610bc3565b820191906000526020600020905b815481529060010190602001808311610ba657829003601f168201915b505050505081565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c269086815260200190565b60405180910390a350600192915050565b60606006805480602002602001604051908101604052809291908181526020018280548015610c8f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c71575b5050505050905090565b600080600354600114610cdf5760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b60448201526064015b60405180910390fd5b60026003556001600160a01b03861660009081526010602052604090205460ff16610d4c5760405162461bcd60e51b815260206004820152600760248201527f217368616d616e000000000000000000000000000000000000000000000000006044820152606401610cd6565b6040517fff4c98840000000000000000000000000000000000000000000000000000000081523360048201526001600160601b038087166024830152851660448201526001600160a01b0387169063ff4c988490349060640160408051808303818588803b158015610dbd57600080fd5b505af1158015610dd1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610df6919061565c565b90925090508215610e38576001600160601b03821615610e1a57610e1a3383613bf6565b6001600160601b03811615610e3357610e333382613cbe565b610e6a565b6001600160601b03821615610e5157610e513383613dab565b6001600160601b03811615610e6a57610e6a3382613e68565b6001600355909590945092505050565b610e843382613f4d565b50565b600354600114610ec55760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b60026003556000828152600e602052604081208054909190610ef6903390640100000000900463ffffffff166112f9565b825490915042600160401b90910463ffffffff161015610f405760405162461bcd60e51b8152602060048201526005602482015264195b99195960da1b6044820152606401610cd6565b8215610f915781546001600160601b03600160601b80830482168401909116026bffffffffffffffffffffffff60601b19909116178255336000908152600d60205260409020600101849055610fba565b6001820180546001600160601b038082168401166bffffffffffffffffffffffff199091161790555b6040516001600160601b038216815283151590859033907f786755545a7e27c12c90cc7f0934514d03fdacfe3684a340b8c4100531e7ecd59060200160405180910390a4505060016003555050565b60007f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f35600460405161103b919061579d565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401206001600160a01b038c81166000818152600c87528481208054600181019091557f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e960c088015260e0870192909252918d166101008601526001600160601b038c166101208601526101408501526101608085018b90528351808603909101815261018085019093528251929094019190912061190160f01b6101a08401526101a283018290526101c2830181905290935091906101e20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa15801561119a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166111ea5760405162461bcd60e51b815260206004820152600a602482015269217369676e61746f727960b01b6044820152606401610cd6565b8a6001600160a01b0316816001600160a01b03161461124b5760405162461bcd60e51b815260206004820152600b60248201527f21617574686f72697a65640000000000000000000000000000000000000000006044820152606401610cd6565b505050844211156112885760405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b6044820152606401610cd6565b6001600160a01b038881166000818152600760209081526040808320948c16808452948252918290206001600160601b038b169081905591519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35050505050505050565b600042821061134a5760405162461bcd60e51b815260206004820152600b60248201527f2164657465726d696e65640000000000000000000000000000000000000000006044820152606401610cd6565b6001600160a01b0383166000908152600a602052604090205480611372576000915050611501565b6001600160a01b03841660009081526009602090815260408083206000198501845290915290205463ffffffff1683106113e7576001600160a01b0384166000908152600960209081526040808320600019909401835292905220546001600160601b03640100000000909104169050611501565b6001600160a01b038416600090815260096020908152604080832083805290915290205463ffffffff16831015611422576000915050611501565b600060001982015b818111156114c8576001600160a01b038616600090815260096020908152604080832060028686030485038085529083529281902081518083019092525463ffffffff81168083526401000000009091046001600160601b031692820192909252908714156114a3576020015194506115019350505050565b805163ffffffff168711156114ba578193506114c1565b6001820392505b505061142a565b506001600160a01b0385166000908152600960209081526040808320938352929052205464010000000090046001600160601b03169150505b92915050565b6003546001146115455760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b60026003556000858152600e602052604080822090519091907f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f359061158c9060049061579d565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401207f9743d4a93cddcc4a4dde282c87f883f02700a64c026c1f456f3e4ee79abab60f60c084015260e083018b9052891515610100808501919091528251808503909101815261012084019092528151919093012061190160f01b610140830152610142820183905261016282018190529192506000906101820160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156116ad573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166116fd5760405162461bcd60e51b815260206004820152600a602482015269217369676e61746f727960b01b6044820152606401610cd6565b845460009061171b908390640100000000900463ffffffff166112f9565b865490915042600160401b90910463ffffffff1610156117655760405162461bcd60e51b8152602060048201526005602482015264195b99195960da1b6044820152606401610cd6565b89156117bf5785546001600160601b03600160601b80830482168401909116026bffffffffffffffffffffffff60601b199091161786556001600160a01b0382166000908152600d602052604090206001018b90556117e8565b6001860180546001600160601b038082168401166bffffffffffffffffffffffff199091161790555b6040516001600160601b03821681528a1515908c906001600160a01b038516907f786755545a7e27c12c90cc7f0934514d03fdacfe3684a340b8c4100531e7ecd59060200160405180910390a450506001600355505050505050505050565b60005460ff161561188a5760405162461bcd60e51b815260206004820152600d60248201526c217472616e7366657261626c6560981b6044820152606401610cd6565b336000908152600d6020526040812080548392906118b29084906001600160601b0316615b67565b82546101009290920a6001600160601b038181021990931691831602179091556001600160a01b0384166000818152600d602090815260409182902080546bffffffffffffffffffffffff198116908616880186161790559051928516835290925033917f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b85878791015b60405180910390a35050565b60058054610b4a90615c85565b6003546001146119915760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b60026003556000818152600e602090815260408083203384526008909252909120546119ff5760405162461bcd60e51b815260206004820152600760248201527f216d656d626572000000000000000000000000000000000000000000000000006044820152606401610cd6565b805463ffffffff16611a3c5760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610cd6565b8054640100000000900463ffffffff1615611a995760405162461bcd60e51b815260206004820152600960248201527f73706f6e736f72656400000000000000000000000000000000000000000000006044820152606401610cd6565b805463ffffffff4281811664010000000002808316838516178201909216600160401b026bffffffff0000000000000000199092166bffffffffffffffff000000001990931692909217178255604051839033907fd45ad122361f16d6f50d7c4a73638f20ee48eff6186af15224e2a4a1f6d5017190600090a450506001600355565b60008054610100900460ff1615611b655760405162461bcd60e51b815260206004820152600d60248201526c217472616e7366657261626c6560981b6044820152606401610cd6565b6001600160a01b038416600090815260076020908152604080832033845290915290205460001914611bd3576001600160a01b0384166000908152600760209081526040808320338452909152812080546001600160601b0385169290611bcd908490615b50565b90915550505b6001600160a01b038416600090815260086020526040812080546001600160601b0385169290611c04908490615b50565b90915550506001600160a01b03808416600081815260086020908152604080832080546001600160601b0389160190558885168352600b90915280822054928252902054611c5792918216911684613ff2565b6040516001600160601b03831681526001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060019392505050565b60008054610100900460ff1615611cf65760405162461bcd60e51b815260206004820152600d60248201526c217472616e7366657261626c6560981b6044820152606401610cd6565b33600090815260086020526040812080546001600160601b0385169290611d1e908490615b50565b90915550506001600160a01b03808416600081815260086020908152604080832080546001600160601b038916019055338352600b90915280822054928252902054611d6f92918216911684613ff2565b6040516001600160601b03831681526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c26565b6000600354600114611df55760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b600260035560015463ffffffff808c16911611801590611e29575060015463ffffffff6401000000009091048116908b1611155b611e755760405162461bcd60e51b815260206004820152600d60248201527f21766f74696e67506572696f64000000000000000000000000000000000000006044820152606401610cd6565b600a881115611ec65760405162461bcd60e51b815260206004820152600960248201527f6172726179206d617800000000000000000000000000000000000000000000006044820152606401610cd6565b60038b60ff161115611f025760405162461bcd60e51b815260206004820152600560248201526421666c616760d81b6044820152606401610cd6565b611f0a614bcd565b6001818d60ff1660048110611f2157611f21615cf1565b9115156020909202015260ff8c1660021415612066576001871415611fd357600154640100000000900463ffffffff168888600081611f6257611f62615cf1565b9050602002016020810190611f77919061563f565b6001600160601b03161115611fce5760405162461bcd60e51b815260206004820152600860248201527f6f766572206d61780000000000000000000000000000000000000000000000006044820152606401610cd6565b6120c0565b6002871415611fce576001805463ffffffff169089908990818110611ffa57611ffa615cf1565b905060200201602081019061200f919061563f565b6001600160601b03161015611fce5760405162461bcd60e51b815260206004820152600960248201527f756e646572206d696e00000000000000000000000000000000000000000000006044820152606401610cd6565b888714801561207457508685145b6120c05760405162461bcd60e51b815260206004820152600d60248201527f21617272617920706172697479000000000000000000000000000000000000006044820152606401610cd6565b33600090815260086020526040812054156120d9575060015b60028054600101905560408051610140810190915263ffffffff8d1681526020810182612107576000612109565b425b63ffffffff16815260200182612120576000612124565b8d42015b63ffffffff16815260200160006001600160601b0316815260200160006001600160601b031681526020018381526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506020016121d0888a615b8f565b815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050600280548252600e6020908152604092839020855181549287015194870151606088015163ffffffff92831667ffffffffffffffff199095169490941764010000000096831696909602959095177fffffffffffffffff00000000000000000000000000000000ffffffffffffffff16600160401b91909516026bffffffffffffffffffffffff60601b191693909317600160601b6001600160601b039283160217835560808501516001840180546bffffffffffffffffffffffff19169190921617905560a08401519192506122e991908301906004614beb565b5060c08201518051612305916003840191602090910190614c7d565b5060e08201518051612321916004840191602090910190614cdf565b50610100820151805161233e916005840191602090910190614d85565b50610120820151805161235b916006840191602090910190614dde565b509050508b63ffffffff16838e60ff167f50816127f50bc7b89be229f8063a0f3995c58cebdac89a56cb6bda32fa688cf98e8e8e8e8e8e8e8e6040516123a8989796959493929190615839565b60405180910390a4505060016003559a9950505050505050505050565b60608167ffffffffffffffff8111156123e0576123e0615d07565b60405190808252806020026020018201604052801561241357816020015b60608152602001906001900390816123fe5790505b50905060005b8281101561250b576000803086868581811061243757612437615cf1565b90506020028101906124499190615a44565b604051612457929190615771565b600060405180830381855af49150503d8060008114612492576040519150601f19603f3d011682016040523d82523d6000602084013e612497565b606091505b5091509150816124e3576044815110156124b057600080fd5b600481019050808060200190518101906124ca9190615434565b60405162461bcd60e51b8152600401610cd691906159dd565b808484815181106124f6576124f6615cf1565b60209081029190910101525050600101612419565b5092915050565b61251a614bcd565b6000828152600e602052604080822081516080810192839052926002909101916004918390855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612541575094979650505050505050565b6001600160a01b0381166000908152600a6020526040812054806125a15760006125db565b6001600160a01b03831660009081526009602090815260408083206000198501845290915290205464010000000090046001600160601b03165b9392505050565b60007f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f356004604051612614919061579d565b6040805191829003822060208084019490945282820152466060830152306080808401919091528151808403909101815260a0830182528051908401207f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015612741573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127915760405162461bcd60e51b815260206004820152600a602482015269217369676e61746f727960b01b6044820152606401610cd6565b6001600160a01b0381166000908152600c6020526040902080546001810190915589146128005760405162461bcd60e51b815260206004820152600660248201527f216e6f6e636500000000000000000000000000000000000000000000000000006044820152606401610cd6565b8742111561283a5760405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b6044820152606401610cd6565b612844818b613f4d565b50505050505050505050565b60035460011461288e5760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b6002600355336000908152600d60209081526040808320600101548352600e909152902054600160401b900463ffffffff16156128f95760405162461bcd60e51b81526020600482015260096024820152681c1c9bd8d95cdcd95960ba1b6044820152606401610cd6565b60005b600654811015612a915760006006828154811061291b5761291b615cf1565b600091825260209182902001546040805130602480830191909152825180830390910181526044909101825292830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166370a0823160e01b179052516001600160a01b039091169161298b91615781565b600060405180830381855afa9150503d80600081146129c6576040519150601f19603f3d011682016040523d82523d6000602084013e6129cb565b606091505b509150506000818060200190518101906129e591906154c9565b6000805491925090612a10906001600160601b0363010000008204811691600160781b900416615ae4565b6001600160601b031682612a248789615ae4565b6001600160601b0316612a379190615b31565b612a419190615b0f565b90508015612a7b57612a7b60068581548110612a5f57612a5f615cf1565b6000918252602090912001546001600160a01b0316888361412e565b5050508080612a8990615cc0565b9150506128fc565b506001600160601b03821615612aab57612aab3383613dab565b6001600160601b03811615612ac457612ac43382613e68565b6040516001600160a01b03841681526001600160601b03808316919084169033907fa6fdd1129b11eeeca9629fe02070648e56711f159a52c65449cf86a19ceb0d2d9060200160405180910390a45050600160035550565b600354600114612b5a5760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610cd6565b600260038190556000828152600e60209081526040808320815161014081018352815463ffffffff80821683526401000000008204811695830195909552600160401b810490941681840152600160601b9093046001600160601b0390811660608501526001820154166080808501919091528251908101928390529094612e8894879493879360a08601939092908501916004918390855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612bf35790505050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015612c8557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612c67575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015612d0f57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b01049283019260010382029150808411612ccc5790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b82821015612de9578382906000526020600020018054612d5c90615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054612d8890615c85565b8015612dd55780601f10612daa57610100808354040283529160200191612dd5565b820191906000526020600020905b815481529060010190602001808311612db857829003601f168201915b505050505081526020019060010190612d3d565b505050508152602001600682018054612e0190615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054612e2d90615c85565b8015612e7a5780601f10612e4f57610100808354040283529160200191612e7a565b820191906000526020600020905b815481529060010190602001808311612e5d57829003601f168201915b50505050508152505061425e565b50600181015481546001600160601b03918216600160601b9091049091161115612ec6576000828152600f60205260409020805460ff191660011790555b600281015460ff16156131e6576040805161014081018252825463ffffffff8082168352640100000000820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526131e192849160a08401916002840190600490826000855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411612f4c5790505050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015612fde57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612fc0575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561306857602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116130255790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156131425783829060005260206000200180546130b590615c85565b80601f01602080910402602001604051908101604052809291908181526020018280546130e190615c85565b801561312e5780601f106131035761010080835404028352916020019161312e565b820191906000526020600020905b81548152906001019060200180831161311157829003601f168201915b505050505081526020019060010190613096565b50505050815260200160068201805461315a90615c85565b80601f016020809104026020016040519081016040528092919081815260200182805461318690615c85565b80156131d35780601f106131a8576101008083540402835291602001916131d3565b820191906000526020600020905b8154815290600101906020018083116131b657829003601f168201915b505050505081525050614429565b613b35565b6002810154610100900460ff1615613506576040805161014081018252825463ffffffff8082168352640100000000820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526131e192849160a08401916002840190600490826000855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411613271579050505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561330357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116132e5575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561338d57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b0104928301926001038202915080841161334a5790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156134675783829060005260206000200180546133da90615c85565b80601f016020809104026020016040519081016040528092919081815260200182805461340690615c85565b80156134535780601f1061342857610100808354040283529160200191613453565b820191906000526020600020905b81548152906001019060200180831161343657829003601f168201915b5050505050815260200190600101906133bb565b50505050815260200160068201805461347f90615c85565b80601f01602080910402602001604051908101604052809291908181526020018280546134ab90615c85565b80156134f85780601f106134cd576101008083540402835291602001916134f8565b820191906000526020600020905b8154815290600101906020018083116134db57829003601f168201915b505050505081525050614500565b600281015462010000900460ff1615613827576040805161014081018252825463ffffffff8082168352640100000000820481166020840152600160401b82041682840152600160601b90046001600160601b0390811660608301526001840154166080808301919091528251908101928390526131e192849160a08401916002840190600490826000855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411613592579050505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561362457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613606575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156136ae57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b0104928301926001038202915080841161366b5790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156137885783829060005260206000200180546136fb90615c85565b80601f016020809104026020016040519081016040528092919081815260200182805461372790615c85565b80156137745780601f1061374957610100808354040283529160200191613774565b820191906000526020600020905b81548152906001019060200180831161375757829003601f168201915b5050505050815260200190600101906136dc565b5050505081526020016006820180546137a090615c85565b80601f01602080910402602001604051908101604052809291908181526020018280546137cc90615c85565b80156138195780601f106137ee57610100808354040283529160200191613819565b820191906000526020600020905b8154815290600101906020018083116137fc57829003601f168201915b505050505081525050614620565b6040805161014081018252825463ffffffff8082168352640100000000820481166020840152600160401b82041682840152600160601b90046001600160601b039081166060830152600184015416608080830191909152825190810192839052613b3592849160a08401916002840190600490826000855b825461010083900a900460ff1615158152602060019283018181049485019490930390920291018084116138a0579050505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561393257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613914575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156139bc57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116139795790505b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b82821015613a96578382906000526020600020018054613a0990615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054613a3590615c85565b8015613a825780601f10613a5757610100808354040283529160200191613a82565b820191906000526020600020905b815481529060010190602001808311613a6557829003601f168201915b5050505050815260200190600101906139ea565b505050508152602001600682018054613aae90615c85565b80601f0160208091040260200160405190810160405280929190818152602001828054613ada90615c85565b8015613b275780601f10613afc57610100808354040283529160200191613b27565b820191906000526020600020905b815481529060010190602001808311613b0a57829003601f168201915b505050505081525050614848565b6000828152600e6020526040812080547fffffffffffffffff0000000000000000000000000000000000000000000000001681556001810180546bffffffffffffffffffffffff191690556002810182905590613b96600383016000614e52565b613ba4600483016000614e70565b613bb2600583016000614e95565b613bc0600683016000614eb3565b505060405182907f753d5d5633f467e3835cd605f6bcb9584fdab3e90e34d0ac888e2677e61c2ad990600090a250506001600355565b6000546b7fffffffffffffffffffffff600160781b9091046001600160601b0390811683011611613cba576001600160a01b0382166000818152600d6020908152604080832080546bffffffffffffffffffffffff1981166001600160601b03918216880182161790915583546effffffffffffffffffffffff000000198116630100000091829004831688018316909102178455905190851681527f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b858787910161193a565b5050565b6000546b7fffffffffffffffffffffff600160781b9091046001600160601b0390811683011611613cba576001600160a01b03828116600090815260086020908152604080832080546001600160601b0387811690910190915583547fffffffffff000000000000000000000000ffffffffffffffffffffffffffffff8116600160781b918290048316880190921602178355600b909152812054613d64921683613ff2565b6040516001600160601b03821681526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161193a565b6001600160a01b0382166000908152600d602052604081208054839290613ddc9084906001600160601b0316615b67565b82546101009290920a6001600160601b03818102199093169183160217909155600080546effffffffffffffffffffffff00000019811663010000009182900484168690038416909102178155604051918416825291506001600160a01b038416907f1ac4783734d053229b1faa1018a7423bb180eb1605ed3caeb2892e8f8b8587879060200161193a565b6001600160a01b038216600090815260086020526040812080546001600160601b0384169290613e99908490615b50565b9091555050600080546001600160601b03600160781b8083048216859003909116027fffffffffff000000000000000000000000ffffffffffffffffffffffffffffff9091161781556001600160a01b038084168252600b6020526040822054613f069291169083613ff2565b6040516001600160601b03821681526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161193a565b6001600160a01b038083166000908152600b60209081526040808320805486861673ffffffffffffffffffffffffffffffffffffffff19821617909155600890925290912054911690613fa39082908490613ff2565b816001600160a01b0316816001600160a01b0316846001600160a01b03167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4505050565b816001600160a01b0316836001600160a01b03161415801561401c57506001600160601b03811615155b15614129576001600160a01b038316156140a5576001600160a01b0383166000908152600a60205260408120549081614056576000614090565b6001600160a01b03851660009081526009602090815260408083206000198601845290915290205464010000000090046001600160601b03165b90508281036140a186848484614a58565b5050505b6001600160a01b03821615614129576001600160a01b0382166000908152600a602052604081205490816140da576000614114565b6001600160a01b03841660009081526009602090815260408083206000198601845290915290205464010000000090046001600160601b03165b905082810161412585848484614a58565b5050505b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052915160009283929087169161419f9190615781565b6000604051808303816000865af19150503d80600081146141dc576040519150601f19603f3d011682016040523d82523d6000602084013e6141e1565b606091505b509150915081801561420b57508051158061420b57508080602001905181019061420b9190615417565b6142575760405162461bcd60e51b815260206004820152600f60248201527f7472616e73666572206661696c656400000000000000000000000000000000006044820152606401610cd6565b5050505050565b600060025483111561429b5760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610cd6565b60001983016000908152600e6020526040902054600160401b900463ffffffff16156143095760405162461bcd60e51b815260206004820152600e60248201527f707265762170726f6365737365640000000000000000000000000000000000006044820152606401610cd6565b6000838152600e6020526040902054600160401b900463ffffffff1661435d5760405162461bcd60e51b81526020600482015260096024820152681c1c9bd8d95cdcd95960ba1b6044820152606401610cd6565b60005462010000900460ff161561437657506001611501565b600054600290600160781b90046001600160601b0316046001600160601b031682606001516001600160601b031611156143b257506001611501565b426000601b9054906101000a900463ffffffff1683604001510163ffffffff1611156144205760405162461bcd60e51b815260206004820152600660248201527f21656e64656400000000000000000000000000000000000000000000000000006044820152606401610cd6565b50600192915050565b60005b8160c0015151811015613cba578160c00151818151811061444f5761444f615cf1565b60200260200101516001600160a01b03168260e00151828151811061447657614476615cf1565b60200260200101516001600160601b0316836101000151838151811061449e5761449e615cf1565b60200260200101516040516144b39190615781565b60006040518083038185875af1925050503d80600081146144f0576040519150601f19603f3d011682016040523d82523d6000602084013e6144f5565b606091505b50505060010161442c565b60005b8160c0015151811015613cba57816101000151818151811061452757614527615cf1565b602002602001015151600014156145815761457c8260c00151828151811061455157614551615cf1565b60200260200101518360e00151838151811061456f5761456f615cf1565b6020026020010151613cbe565b614618565b6000600860008460c00151848151811061459d5761459d615cf1565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205490506145ef8360c0015183815181106145e1576145e1615cf1565b602002602001015182613e68565b6146168360c00151838151811061460857614608615cf1565b602002602001015182613bf6565b505b600101614503565b60e08101515160018114156146a1578160e0015160008151811061464657614646615cf1565b60200260200101516001600160601b0316600014613cba578160e0015160008151811061467557614675615cf1565b6020026020010151600160006101000a81548163ffffffff021916908363ffffffff1602179055505050565b806002141561471c578160e001516001815181106146c1576146c1615cf1565b60200260200101516001600160601b0316600014613cba578160e001516001815181106146f0576146f0615cf1565b6020026020010151600160046101000a81548163ffffffff021916908363ffffffff1602179055505050565b8060031415614797578160e0015160028151811061473c5761473c615cf1565b60200260200101516001600160601b0316600014613cba578160e0015160028151811061476b5761476b615cf1565b60200260200101516000601b6101000a81548163ffffffff021916908363ffffffff1602179055505050565b80600414156147ee578160e001516003815181106147b7576147b7615cf1565b60200260200101516001600160601b03166000146147e05750506000805460ff19166001179055565b50506000805460ff19169055565b8060051415613cba578160e0015160048151811061480e5761480e615cf1565b60200260200101516001600160601b0316600014614839576000805461ff0019166101001790555050565b50506000805461ff0019169055565b60005b8160c0015151811015613cba578160e00151818151811061486e5761486e615cf1565b60200260200101516001600160601b031660001480156148ad575081610100015181815181106148a0576148a0615cf1565b6020026020010151516000145b15614912576001601060008460c0015184815181106148ce576148ce615cf1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550614a50565b8160e00151818151811061492857614928615cf1565b60200260200101516001600160601b031660001480156149685750816101000151818151811061495a5761495a615cf1565b602002602001015151600014155b15614989576000601060008460c0015184815181106148ce576148ce615cf1565b8160e00151818151811061499f5761499f615cf1565b60200260200101516001600160601b03166000141580156149df575081610100015181815181106149d2576149d2615cf1565b6020026020010151516000145b15614a505760065461019014614a505760068260c001518281518110614a0757614a07615cf1565b602090810291909101810151825460018101845560009384529190922001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b60010161484b565b428315801590614a9757506001600160a01b03851660009081526009602090815260408083206000198801845290915290205463ffffffff8281169116145b15614af1576001600160a01b038516600090815260096020908152604080832060001988018452909152902080546fffffffffffffffffffffffff0000000019166401000000006001600160601b03851602179055614b78565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600983528781208c82528352878120965187549451909516640100000000026fffffffffffffffffffffffffffffffff199094169490951693909317919091179093558152600a909152206001850190555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b60405180608001604052806004906020820280368337509192915050565b600183019183908215614c6d5791602002820160005b83821115614c3e57835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302614c01565b8015614c6b5782816101000a81549060ff0219169055600101602081600001049283019260010302614c3e565b505b50614c79929150614ee9565b5090565b828054828255906000526020600020908101928215614c6d579160200282015b82811115614c6d578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190614c9d565b82805482825590600052602060002090600101600290048101928215614c6d5791602002820160005b83821115614d5257835183826101000a8154816001600160601b0302191690836001600160601b031602179055509260200192600c01602081600b01049283019260010302614d08565b8015614c6b5782816101000a8154906001600160601b030219169055600c01602081600b01049283019260010302614d52565b828054828255906000526020600020908101928215614dd2579160200282015b82811115614dd25782518051614dc2918491602090910190614dde565b5091602001919060010190614da5565b50614c79929150614efe565b828054614dea90615c85565b90600052602060002090601f016020900481019282614e0c5760008555614c6d565b82601f10614e2557805160ff1916838001178555614c6d565b82800160010185558215614c6d579182015b82811115614c6d578251825591602001919060010190614e37565b5080546000825590600052602060002090810190610e849190614ee9565b508054600082556001016002900490600052602060002090810190610e849190614ee9565b5080546000825590600052602060002090810190610e849190614efe565b508054614ebf90615c85565b6000825580601f10614ecf575050565b601f016020900490600052602060002090810190610e8491905b5b80821115614c795760008155600101614eea565b80821115614c79576000614f128282614eb3565b50600101614efe565b80356001600160a01b0381168114614f3257600080fd5b919050565b60008083601f840112614f4957600080fd5b50813567ffffffffffffffff811115614f6157600080fd5b6020830191508360208260051b8501011115614f7c57600080fd5b9250929050565b60008083601f840112614f9557600080fd5b50813567ffffffffffffffff811115614fad57600080fd5b602083019150836020828501011115614f7c57600080fd5b803563ffffffff81168114614f3257600080fd5b803560ff81168114614f3257600080fd5b600060208284031215614ffc57600080fd5b6125db82614f1b565b6000806040838503121561501857600080fd5b61502183614f1b565b915061502f60208401614f1b565b90509250929050565b60008060008060008060008060a0898b03121561505457600080fd5b61505d89614f1b565b975061506b60208a01614f1b565b9650604089013567ffffffffffffffff8082111561508857600080fd5b6150948c838d01614f37565b909850965060608b01359150808211156150ad57600080fd5b6150b98c838d01614f37565b909650945060808b01359150808211156150d257600080fd5b506150df8b828c01614f83565b999c989b5096995094979396929594505050565b60008060008060006080868803121561510b57600080fd5b61511486614f1b565b945061512260208701614f1b565b935060408601359250606086013567ffffffffffffffff81111561514557600080fd5b61515188828901614f83565b969995985093965092949392505050565b60008060008060008060a0878903121561517b57600080fd5b61518487614f1b565b955061519260208801614f1b565b94506040870135935060608701359250608087013567ffffffffffffffff8111156151bc57600080fd5b6151c889828a01614f83565b979a9699509497509295939492505050565b6000806000606084860312156151ef57600080fd5b6151f884614f1b565b925061520660208501614f1b565b9150604084013561521681615d2b565b809150509250925092565b600080600080600080600060e0888a03121561523c57600080fd5b61524588614f1b565b965061525360208901614f1b565b9550604088013561526381615d2b565b94506060880135935061527860808901614fd9565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156152a757600080fd5b6152b083614f1b565b946020939093013593505050565b60008060008060008060c087890312156152d757600080fd5b6152e087614f1b565b955060208701359450604087013593506152fc60608801614fd9565b92506080870135915060a087013590509295509295509295565b6000806040838503121561532957600080fd5b61533283614f1b565b9150602083013561534281615d2b565b809150509250929050565b60008060006060848603121561536257600080fd5b61536b84614f1b565b9250602084013561520681615d2b565b6000806000806080858703121561539157600080fd5b61539a85614f1b565b935060208501356153aa81615d2b565b925060408501356153ba81615d2b565b915060608501356153ca81615d1d565b939692955090935050565b600080602083850312156153e857600080fd5b823567ffffffffffffffff8111156153ff57600080fd5b61540b85828601614f37565b90969095509350505050565b60006020828403121561542957600080fd5b81516125db81615d1d565b60006020828403121561544657600080fd5b815167ffffffffffffffff81111561545d57600080fd5b8201601f8101841361546e57600080fd5b805161548161547c82615abc565b615a8b565b81815285602083850101111561549657600080fd5b6154a7826020830160208601615c55565b95945050505050565b6000602082840312156154c257600080fd5b5035919050565b6000602082840312156154db57600080fd5b5051919050565b600080604083850312156154f557600080fd5b82359150602083013561534281615d1d565b600080600080600060a0868803121561551f57600080fd5b85359450602086013561553181615d1d565b935061553f60408701614fd9565b94979396509394606081013594506080013592915050565b60008060008060008060008060008060c08b8d03121561557657600080fd5b61557f8b614fd9565b995061558d60208c01614fc5565b985060408b013567ffffffffffffffff808211156155aa57600080fd5b6155b68e838f01614f37565b909a50985060608d01359150808211156155cf57600080fd5b6155db8e838f01614f37565b909850965060808d01359150808211156155f457600080fd5b6156008e838f01614f37565b909650945060a08d013591508082111561561957600080fd5b506156268d828e01614f83565b915080935050809150509295989b9194979a5092959850565b60006020828403121561565157600080fd5b81356125db81615d2b565b6000806040838503121561566f57600080fd5b825161567a81615d2b565b602084015190925061534281615d2b565b81835260006020808501808196508560051b810191508460005b8781101561570f5782840389528135601e198836030181126156c657600080fd5b8701803567ffffffffffffffff8111156156df57600080fd5b8036038913156156ee57600080fd5b6156fb868289850161571c565b9a87019a95505050908401906001016156a5565b5091979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000815180845261575d816020860160208601615c55565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b60008251615793818460208701615c55565b9190910192915050565b600080835481600182811c9150808316806157b957607f831692505b60208084108214156157d957634e487b7160e01b86526022600452602486fd5b8180156157ed57600181146157fe5761582b565b60ff1986168952848901965061582b565b60008a81526020902060005b868110156158235781548b82015290850190830161580a565b505084890196505b509498975050505050505050565b6080808252810188905260008960a08301825b8b81101561587a576001600160a01b0361586584614f1b565b1682526020928301929091019060010161584c565b5083810360208581019190915289825291508990820160005b8a8110156158c15782356158a681615d2b565b6001600160601b031682529183019190830190600101615893565b5084810360408601526158d581898b61568b565b9250505082810360608401526158ec81858761571c565b9b9a5050505050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561593c5783516001600160a01b031683529284019291840191600101615917565b50909695505050505050565b60808101818360005b60048110156159725781511515835260209283019290910190600101615951565b50505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156159d057603f198886030184526159be858351615745565b945092850192908501906001016159a2565b5092979650505050505050565b6020815260006125db6020830184615745565b63ffffffff87811682528681166020830152851660408201526001600160601b0384811660608301528316608082015260c060a08201819052600090615a3890830184615745565b98975050505050505050565b6000808335601e19843603018112615a5b57600080fd5b83018035915067ffffffffffffffff821115615a7657600080fd5b602001915036819003821315614f7c57600080fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615ab457615ab4615d07565b604052919050565b600067ffffffffffffffff821115615ad657615ad6615d07565b50601f01601f191660200190565b60006001600160601b03808316818516808303821115615b0657615b06615cdb565b01949350505050565b600082615b2c57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615b4b57615b4b615cdb565b500290565b600082821015615b6257615b62615cdb565b500390565b60006001600160601b0383811690831681811015615b8757615b87615cdb565b039392505050565b600067ffffffffffffffff80841115615baa57615baa615d07565b8360051b6020615bbb818301615a8b565b8681528181019086368582011115615bd257600080fd5b600094505b88851015615c4957803586811115615bee57600080fd5b880136601f820112615bff57600080fd5b8035615c0d61547c82615abc565b8181523687838501011115615c2157600080fd5b8187840188830137600091810187019190915284525060019490940193918301918301615bd7565b50979650505050505050565b60005b83811015615c70578181015183820152602001615c58565b83811115615c7f576000848401525b50505050565b600181811c90821680615c9957607f821691505b60208210811415615cba57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615cd457615cd4615cdb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610e8457600080fd5b6001600160601b0381168114610e8457600080fdfea2646970667358221220074b5122b0dba43d33caac375506445943e32c725d22269ee6fc49478f47089b64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000094261616c204c616273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044241414c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000003ab458634910aad20ef5f1c8ee96f1d6ac549190000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a2000000000000000000000000015c6ac4cf1b5e49c44332fb0a1043ccab19db80a0000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca000000000000000000000000ced608aa29bb92185d9b6340adcbfa263dae075b000000000000000000000000d26a3f686d43f2a62ba9eae2ff77e9f516d945b900000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d63100000

-----Decoded View---------------
Arg [0] : _sharesPaused (bool): True
Arg [1] : _gracePeriod (uint32): 500
Arg [2] : _minVotingPeriod (uint32): 300
Arg [3] : _maxVotingPeriod (uint32): 500
Arg [4] : _name (string): Baal Labs
Arg [5] : _symbol (string): BAAL
Arg [6] : _guildTokens (address[]): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919
Arg [7] : _shamans (address[]): 0x0000000000000000000000000000000000000000
Arg [8] : _summoners (address[]): 0x1C0Aa8cCD568d90d61659F060D1bFb1e6f855A20,0x15C6AC4Cf1b5E49c44332Fb0a1043Ccab19db80a,0x7136fbDdD4DFfa2369A9283B6E90A040318011Ca,0xCED608Aa29bB92185D9b6340Adcbfa263DAe075b,0xd26a3F686D43f2A62BA9eaE2ff77e9f516d945B9
Arg [9] : _loot (uint96[]): 0,0,0,0,0
Arg [10] : _shares (uint96[]): 100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000

-----Encoded View---------------
38 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [2] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [5] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [6] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000340
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000400
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [12] : 4261616c204c6162730000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [14] : 4241414c00000000000000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [16] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [17] : 00000000000000000000000003ab458634910aad20ef5f1c8ee96f1d6ac54919
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [21] : 0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20
Arg [22] : 00000000000000000000000015c6ac4cf1b5e49c44332fb0a1043ccab19db80a
Arg [23] : 0000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca
Arg [24] : 000000000000000000000000ced608aa29bb92185d9b6340adcbfa263dae075b
Arg [25] : 000000000000000000000000d26a3f686d43f2a62ba9eae2ff77e9f516d945b9
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [27] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [28] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [30] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [33] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [34] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [35] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [36] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [37] : 0000000000000000000000000000000000000000000000056bc75e2d63100000


Deployed Bytecode Sourcemap

668:41912:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3732:43;;;;;;;;;;-1:-1:-1;3732:43:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;1954:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3638:41::-;;;;;;;;;;-1:-1:-1;3638:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3638:41:0;;;;;;;;;;-1:-1:-1;;;;;33049:39:1;;;33031:58;;33120:2;33105:18;;33098:34;;;;33004:18;3638:41:0;32859:279:1;24838:322:0;;;;;;;;;;-1:-1:-1;24838:322:0;;;;;:::i;:::-;;:::i;:::-;;;20712:14:1;;20705:22;20687:41;;20675:2;20660:18;24838:322:0;20547:187:1;689:22:0;;;;;;;;;;-1:-1:-1;689:22:0;;;;;;;;3116:66;;;;;;;;;;-1:-1:-1;3116:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3116:66:0;;;;;;;32144:10:1;32132:23;;;32114:42;;-1:-1:-1;;;;;32192:39:1;;;32187:2;32172:18;;32165:67;32087:18;3116:66:0;31944:294:1;1691:29:0;;;;;;;;;;-1:-1:-1;1691:29:0;;;;;;;;;;;;;;31229:10:1;31217:23;;;31199:42;;31187:2;31172:18;1691:29:0;31055:192:1;35992:187:0;;;;;;;;;;-1:-1:-1;35992:187:0;;;;;:::i;:::-;-1:-1:-1;;;;36104:16:0;35992:187;-1:-1:-1;;;;35992:187:0;;;;23190:20:1;23178:33;;;23160:52;;23148:2;23133:18;35992:187:0;23016:202:1;1374:25:0;;;;;;;;;;-1:-1:-1;1374:25:0;;;;-1:-1:-1;;;1374:25:0;;-1:-1:-1;;;;;1374:25:0;;;;;;-1:-1:-1;;;;;32595:39:1;;;32577:58;;32565:2;32550:18;1374:25:0;32432:209:1;812:24:0;;;;;;;;;;-1:-1:-1;812:24:0;;;;;;;;;;;1015:36;;;;;;;;;;;;1049:2;1015:36;;;;;32415:4:1;32403:17;;;32385:36;;32373:2;32358:18;1015:36:0;32243:184:1;34608:113:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4015:41::-;;;;;;;;;;-1:-1:-1;4015:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12192:1055;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;33378:15:1;;;33360:34;;33430:15;;;;33425:2;33410:18;;33403:43;33288:18;12192:1055:0;33143:309:1;3379:64:0;;;;;;;;;;-1:-1:-1;3379:64:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3379:64:0;;;;;;-1:-1:-1;;;;;16043:55:1;;;16025:74;;16013:2;15998:18;3379:64:0;15879:226:1;25290:97:0;;;;;;;;;;-1:-1:-1;25290:97:0;;;;;:::i;:::-;;:::i;:::-;;3825:49;;;;;;;;;;-1:-1:-1;3825:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16954:915;;;;;;;;;;-1:-1:-1;16954:915:0;;;;;:::i;:::-;;:::i;1279:23::-;;;;;;;;;;-1:-1:-1;1279:23:0;;;;;;;-1:-1:-1;;;;;1279:23:0;;;3253:69;;;;;;;;;;-1:-1:-1;3253:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;31019:25:1;;;31007:2;30992:18;3253:69:0;30873:177:1;2983:64:0;;;;;;;;;;-1:-1:-1;2983:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;27491:1250;;;;;;;;;;-1:-1:-1;27491:1250:0;;;;;:::i;:::-;;:::i;33415:1038::-;;;;;;;;;;-1:-1:-1;33415:1038:0;;;;;:::i;:::-;;:::i;18353:1616::-;;;;;;;;;;-1:-1:-1;18353:1616:0;;;;;:::i;:::-;;:::i;3502:61::-;;;;;;;;;;-1:-1:-1;3502:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;1573:29;;;;;;;;;;-1:-1:-1;1573:29:0;;;;;;;;30518:313;;;;;;;;;;-1:-1:-1;30518:313:0;;;;;:::i;:::-;;:::i;2020:20::-;;;;;;;;;;;;;:::i;15946:709::-;;;;;;;;;;-1:-1:-1;15946:709:0;;;;;:::i;:::-;;:::i;29763:575::-;;;;;;;;;;-1:-1:-1;29763:575:0;;;;;:::i;:::-;;:::i;28999:440::-;;;;;;;;;;-1:-1:-1;28999:440:0;;;;;:::i;:::-;;:::i;1482:25::-;;;;;;;;;;-1:-1:-1;1482:25:0;;;;-1:-1:-1;;;1482:25:0;;;;;;13799:1969;;;;;;;;;;-1:-1:-1;13799:1969:0;;;;;:::i;:::-;;:::i;35303:599::-;;;;;;;;;;-1:-1:-1;35303:599:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34987:138::-;;;;;;;;;;-1:-1:-1;34987:138:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;32897:242::-;;;;;;;;;;-1:-1:-1;32897:242:0;;;;;:::i;:::-;;:::i;36563:236::-;;;;;;;;;;-1:-1:-1;36563:236:0;;;;;:::i;:::-;-1:-1:-1;;;;36709:16:0;36563:236;-1:-1:-1;;;;;;;36563:236:0;25850:1119;;;;;;;;;;-1:-1:-1;25850:1119:0;;;;;:::i;:::-;;:::i;31116:1502::-;;;;;;;;;;-1:-1:-1;31116:1502:0;;;;;:::i;:::-;;:::i;1809:25::-;;;;;;;;;;;;;;;;2854:64;;;;;;;;;;-1:-1:-1;2854:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;20250:1099;;;;;;;;;;-1:-1:-1;20250:1099:0;;;;;:::i;:::-;;:::i;36268:200::-;;;;;;;;;;-1:-1:-1;36268:200:0;;;;;:::i;:::-;-1:-1:-1;;;;36387:16:0;36268:200;-1:-1:-1;;;;;36268:200:0;3732:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3732:43:0;;;;;;-1:-1:-1;;;;;;;;3732:43:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1954:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24838:322::-;24933:10;24898:12;24923:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;24923:25:0;;;;;;;;;;:34;;;25006:32;24898:12;;24923:25;;25006:32;;;;24951:6;31019:25:1;;31007:2;30992:18;;30873:177;25006:32:0;;;;;;;;-1:-1:-1;25104:4:0;;24838:322;-1:-1:-1;;24838:322:0:o;34608:113::-;34657:23;34702:11;34693:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34693:20:0;;;;;;;;;;;;;;;;;;;;;;;34608:113;:::o;12192:1055::-;12354:14;12370:16;6088:6;;6098:1;6088:11;6080:32;;;;-1:-1:-1;;;6080:32:0;;27363:2:1;6080:32:0;;;27345:21:1;27402:1;27382:18;;;27375:29;-1:-1:-1;;;27420:18:1;;;27413:39;27469:18;;6080:32:0;;;;;;;;;6133:1;6124:6;:10;-1:-1:-1;;;;;12407:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;12399:34;;;::::0;-1:-1:-1;;;12399:34:0;;25672:2:1;12399:34:0::1;::::0;::::1;25654:21:1::0;25711:1;25691:18;;;25684:29;25749:9;25729:18;;;25722:37;25776:18;;12399:34:0::1;25470:330:1::0;12399:34:0::1;12508:72;::::0;;;;12555:10:::1;12508:72;::::0;::::1;16610:74:1::0;-1:-1:-1;;;;;16765:15:1;;;16745:18;;;16738:43;16817:15;;16797:18;;;16790:43;-1:-1:-1;;;;;12508:28:0;::::1;::::0;::::1;::::0;12544:9:::1;::::0;16583:18:1;;12508:72:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12485:95:::0;;-1:-1:-1;12485:95:0;-1:-1:-1;12633:607:0;::::1;;;-1:-1:-1::0;;;;;12689:12:0;::::1;::::0;12685:48:::1;;12703:30;12713:10;12725:7;12703:9;:30::i;:::-;-1:-1:-1::0;;;;;12796:14:0;::::1;::::0;12792:54:::1;;12812:34;12824:10;12836:9;12812:11;:34::i;:::-;12633:607;;;-1:-1:-1::0;;;;;12989:12:0;::::1;::::0;12985:48:::1;;13003:30;13013:10;13025:7;13003:9;:30::i;:::-;-1:-1:-1::0;;;;;13103:14:0;::::1;::::0;13099:54:::1;;13119:34;13131:10;13143:9;13119:11;:34::i;:::-;6167:1:::0;6158:6;:10;12192:1055;;;;-1:-1:-1;12192:1055:0;-1:-1:-1;;;12192:1055:0:o;25290:97::-;25347:32;25357:10;25369:9;25347;:32::i;:::-;25290:97;:::o;16954:915::-;6088:6;;6098:1;6088:11;6080:32;;;;-1:-1:-1;;;6080:32:0;;27363:2:1;6080:32:0;;;27345:21:1;27402:1;27382:18;;;27375:29;-1:-1:-1;;;27420:18:1;;;27413:39;27469:18;;6080:32:0;27161:332:1;6080:32:0;6133:1;6124:6;:10;17037:21:::1;17061:19:::0;;;:9:::1;:19;::::0;;;;17180:17;;17061:19;;17037:21;17154:44:::1;::::0;17168:10:::1;::::0;17180:17;;::::1;;;17154:13;:44::i;:::-;17292:15:::0;;17137:61;;-1:-1:-1;17311:15:0::1;-1:-1:-1::0;;;17292:15:0;;::::1;;;:34;;17284:51;;;::::0;-1:-1:-1;;;17284:51:0;;30406:2:1;17284:51:0::1;::::0;::::1;30388:21:1::0;30445:1;30425:18;;;30418:29;-1:-1:-1;;;30463:18:1;;;30456:35;30508:18;;17284:51:0::1;30204:328:1::0;17284:51:0::1;17423:8;17419:332;;;17517:24:::0;;-1:-1:-1;;;;;;;;17517:24:0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;;-1:-1:-1::0;;;;17517:24:0;;::::1;;::::0;;17569:10:::1;17517:13;17561:19:::0;;;:7:::1;:19;::::0;;;;-1:-1:-1;17561:39:0::1;:50:::0;;;17419:332:::1;;;17712:12;::::0;::::1;:23:::0;;-1:-1:-1;;;;;17712:23:0;;::::1;::::0;::::1;;-1:-1:-1::0;;17712:23:0;;::::1;;::::0;;17419:332:::1;17779:51;::::0;-1:-1:-1;;;;;32595:39:1;;32577:58;;17779:51:0;::::1;;::::0;17811:8;;17790:10:::1;::::0;17779:51:::1;::::0;32565:2:1;32550:18;17779:51:0::1;;;;;;;-1:-1:-1::0;;6167:1:0;6158:6;:10;-1:-1:-1;;16954:915:0:o;27491:1250::-;27696:23;2131:77;27776:4;27760:22;;;;;;:::i;:::-;;;;;;;;;;27732:81;;;;22065:25:1;;;;22106:18;;;22099:34;27784:13:0;22149:18:1;;;22142:34;27807:4:0;22192:18:1;;;;22185:83;;;;27732:81:0;;;;;;;;;;22037:19:1;;;27732:81:0;;27722:92;;;;;;-1:-1:-1;;;;;27977:13:0;;;-1:-1:-1;27977:13:0;;;:6;:13;;;;;:15;;;;;;;;2439:86;27925:78;;;21024:25:1;21126:18;;;21119:43;;;;21198:15;;;21178:18;;;21171:43;-1:-1:-1;;;;;21250:39:1;;21230:18;;;21223:67;21306:19;;;21299:35;21350:19;;;;21343:35;;;27925:78:0;;;;;;;;;;20996:19:1;;;27925:78:0;;;27915:89;;;;;;;;;;-1:-1:-1;;;28080:57:0;;;15740:27:1;15783:11;;;15776:27;;;15819:12;;;15812:28;;;27722:92:0;;-1:-1:-1;27915:89:0;-1:-1:-1;15856:12:1;;28080:57:0;;;-1:-1:-1;;28080:57:0;;;;;;;;;28070:68;;28080:57;28070:68;;;;28196:17;28216:26;;;;;;;;;22840:25:1;;;22913:4;22901:17;;22881:18;;;22874:45;;;;22935:18;;;22928:34;;;22978:18;;;22971:34;;;28070:68:0;;-1:-1:-1;28196:17:0;28216:26;;22812:19:1;;28216:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28216:26:0;;-1:-1:-1;;28216:26:0;;;-1:-1:-1;;;;;;;28299:23:0;;28291:45;;;;-1:-1:-1;;;28291:45:0;;28375:2:1;28291:45:0;;;28357:21:1;28414:2;28394:18;;;28387:30;-1:-1:-1;;;28433:18:1;;;28426:40;28483:18;;28291:45:0;28173:334:1;28291:45:0;28401:5;-1:-1:-1;;;;;28388:18:0;:9;-1:-1:-1;;;;;28388:18:0;;28380:41;;;;-1:-1:-1;;;28380:41:0;;28714:2:1;28380:41:0;;;28696:21:1;28753:2;28733:18;;;28726:30;28792:13;28772:18;;;28765:41;28823:18;;28380:41:0;28512:335:1;28380:41:0;27869:592;;;28508:8;28489:15;:27;;28481:46;;;;-1:-1:-1;;;28481:46:0;;27028:2:1;28481:46:0;;;27010:21:1;27067:1;27047:18;;;27040:29;-1:-1:-1;;;27085:18:1;;;27078:37;27132:18;;28481:46:0;26826:330:1;28481:46:0;-1:-1:-1;;;;;28583:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;-1:-1:-1;;;;;28583:34:0;;;;;;28666:32;;32577:58:1;;;28666:32:0;;32550:18:1;28666:32:0;;;;;;;27685:1056;27491:1250;;;;;;;:::o;33415:1038::-;33492:12;33537:15;33525:9;:27;33517:50;;;;-1:-1:-1;;;33517:50:0;;28035:2:1;33517:50:0;;;28017:21:1;28074:2;28054:18;;;28047:30;28113:13;28093:18;;;28086:41;28144:18;;33517:50:0;27833:335:1;33517:50:0;-1:-1:-1;;;;;33608:23:0;;33588:17;33608:23;;;:14;:23;;;;;;33646:17;33642:31;;33672:1;33665:8;;;;;33642:31;-1:-1:-1;;;;;33723:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;33744:16:0;;33723:38;;;;;;;:52;;;:65;-1:-1:-1;33719:139:0;;-1:-1:-1;;;;;33814:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;33835:16:0;;;33814:38;;;;;;:44;-1:-1:-1;;;;;33814:44:0;;;;;;-1:-1:-1;33807:51:0;;33719:139;-1:-1:-1;;;;;33878:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:37;;;:49;-1:-1:-1;33874:63:0;;;33936:1;33929:8;;;;;33874:63;33952:10;-1:-1:-1;;33995:16:0;;34026:353;34041:5;34033;:13;34026:353;;;-1:-1:-1;;;;;34150:20:0;;34067:11;34150:20;;;:11;:20;;;;;;;;34107:1;34090:13;;;34089:19;34081:27;;34150:28;;;;;;;;;;34127:51;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34127:51:0;;;;;;;;;34201:29;;34197:166;;;34239:8;;;;-1:-1:-1;34232:15:0;;-1:-1:-1;;;;34232:15:0;34197:166;34276:16;;:28;;;-1:-1:-1;34272:91:0;;;34314:6;34306:14;;34272:91;;;34362:1;34353:6;:10;34345:18;;34272:91;34048:331;;34026:353;;;-1:-1:-1;;;;;;34401:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;:33;;;;-1:-1:-1;;;;;34401:33:0;;-1:-1:-1;;33415:1038:0;;;;;:::o;18353:1616::-;6088:6;;6098:1;6088:11;6080:32;;;;-1:-1:-1;;;6080:32:0;;27363:2:1;6080:32:0;;;27345:21:1;27402:1;27382:18;;;27375:29;-1:-1:-1;;;27420:18:1;;;27413:39;27469:18;;6080:32:0;27161:332:1;6080:32:0;6133:1;6124:6;:10;18530:21:::1;18554:19:::0;;;:9:::1;:19;::::0;;;;;18694:22;;18554:19;;18530:21;2131:77:::1;::::0;18694:22:::1;::::0;18710:4:::1;::::0;18694:22:::1;:::i;:::-;;::::0;;;;;::::1;::::0;;18666:81:::1;::::0;;::::1;22065:25:1::0;;;;22106:18;;;22099:34;18718:13:0::1;22149:18:1::0;;;22142:34;18741:4:0::1;22192:18:1::0;;;;22185:83;;;;18666:81:0;;;;;;;;;;22037:19:1;;;18666:81:0;;18656:92;;;;::::1;::::0;2608:47:::1;18824:45:::0;;;22475:25:1;22516:18;;;22509:34;;;22586:14;;22579:22;22559:18;;;;22552:50;;;;18824:45:0;;;;;;;;;;22448:18:1;;;18824:45:0;;;18814:56;;;;;::::1;::::0;-1:-1:-1;;;18942:57:0;;;15740:27:1;15783:11;;;15776:27;;;15819:12;;;15812:28;;;18656:92:0;;-1:-1:-1;;;15856:12:1;;18942:57:0::1;::::0;;-1:-1:-1;;18942:57:0;;::::1;::::0;;;;;;18932:68;;18942:57:::1;18932:68:::0;;::::1;::::0;19054:17:::1;19074:26:::0;;;;;::::1;::::0;;;22840:25:1;;;22913:4;22901:17;;22881:18;;;22874:45;;;;22935:18;;;22928:34;;;22978:18;;;22971:34;;;18932:68:0;;-1:-1:-1;19054:17:0;19074:26:::1;::::0;22812:19:1;;19074:26:0::1;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19074:26:0::1;::::0;-1:-1:-1;;19074:26:0;;;-1:-1:-1;;;;;;;19163:23:0;::::1;19155:45;;;::::0;-1:-1:-1;;;19155:45:0;;28375:2:1;19155:45:0::1;::::0;::::1;28357:21:1::0;28414:2;28394:18;;;28387:30;-1:-1:-1;;;28433:18:1;;;28426:40;28483:18;;19155:45:0::1;28173:334:1::0;19155:45:0::1;19292:17:::0;;19250:14:::1;::::0;19267:43:::1;::::0;19281:9;;19292:17;;::::1;;;19267:13;:43::i;:::-;19404:15:::0;;19250:60;;-1:-1:-1;19423:15:0::1;-1:-1:-1::0;;;19404:15:0;;::::1;;;:34;;19396:51;;;::::0;-1:-1:-1;;;19396:51:0;;30406:2:1;19396:51:0::1;::::0;::::1;30388:21:1::0;30445:1;30425:18;;;30418:29;-1:-1:-1;;;30463:18:1;;;30456:35;30508:18;;19396:51:0::1;30204:328:1::0;19396:51:0::1;19535:8;19531:313;;;19629:24:::0;;-1:-1:-1;;;;;;;;19629:24:0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;;-1:-1:-1::0;;;;19629:24:0;;::::1;;::::0;;-1:-1:-1;;;;;19655:18:0;::::1;19629:13;19655:18:::0;;;:7:::1;:18;::::0;;;;-1:-1:-1;19655:38:0::1;:49:::0;;;19531:313:::1;;;19805:12;::::0;::::1;:23:::0;;-1:-1:-1;;;;;19805:23:0;;::::1;::::0;::::1;;-1:-1:-1::0;;19805:23:0;;::::1;;::::0;;19531:313:::1;19880:50;::::0;-1:-1:-1;;;;;32595:39:1;;32577:58;;19880:50:0;::::1;;::::0;19911:8;;-1:-1:-1;;;;;19880:50:0;::::1;::::0;::::1;::::0;32565:2:1;32550:18;19880:50:0::1;;;;;;;-1:-1:-1::0;;6167:1:0;6158:6;:10;-1:-1:-1;;;;;;;;;18353:1616:0:o;30518:313::-;30596:10;;;;30595:11;30587:36;;;;-1:-1:-1;;;30587:36:0;;26686:2:1;30587:36:0;;;26668:21:1;26725:2;26705:18;;;26698:30;-1:-1:-1;;;26744:18:1;;;26737:43;26797:18;;30587:36:0;26484:337:1;30587:36:0;30652:10;30644:19;;;;:7;:19;;;;;:34;;30672:6;;30644:19;:34;;30672:6;;-1:-1:-1;;;;;30644:34:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;30644:34:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30724:11:0;;-1:-1:-1;30724:11:0;;;:7;:11;;;;;;;;;:26;;-1:-1:-1;;30724:26:0;;;;;;;;;;;;30787:36;;32595:39:1;;;32577:58;;30724:11:0;;-1:-1:-1;30800:10:0;;30787:36;;32550:18:1;30787:36:0;;;;;;;;30518:313;;:::o;2020:20::-;;;;;;;:::i;15946:709::-;6088:6;;6098:1;6088:11;6080:32;;;;-1:-1:-1;;;6080:32:0;;27363:2:1;6080:32:0;;;27345:21:1;27402:1;27382:18;;;27375:29;-1:-1:-1;;;27420:18:1;;;27413:39;27469:18;;6080:32:0;27161:332:1;6080:32:0;6133:1;6124:6;:10;16019:21:::1;16043:19:::0;;;:9:::1;:19;::::0;;;;;;;16137:10:::1;16127:21:::0;;:9:::1;:21:::0;;;;;;;16119:45:::1;;;::::0;-1:-1:-1;;;16119:45:0;;27700:2:1;16119:45:0::1;::::0;::::1;27682:21:1::0;27739:1;27719:18;;;27712:29;27777:9;27757:18;;;27750:37;27804:18;;16119:45:0::1;27498:330:1::0;16119:45:0::1;16237:17:::0;;::::1;;16229:40;;;::::0;-1:-1:-1;;;16229:40:0;;24325:2:1;16229:40:0::1;::::0;::::1;24307:21:1::0;24364:1;24344:18;;;24337:29;-1:-1:-1;;;24382:18:1;;;24375:36;24428:18;;16229:40:0::1;24123:329:1::0;16229:40:0::1;16317:17:::0;;;;::::1;;;:22:::0;16309:43:::1;;;::::0;-1:-1:-1;;;16309:43:0;;29391:2:1;16309:43:0::1;::::0;::::1;29373:21:1::0;29430:1;29410:18;;;29403:29;29468:11;29448:18;;;29441:39;29497:18;;16309:43:0::1;29189:332:1::0;16309:43:0::1;16414::::0;;::::1;16441:15;16414:43:::0;;::::1;::::0;::::1;16547:17:::0;;;;;;;16521:43;::::1;16503:61:::0;;::::1;-1:-1:-1::0;;;16503:61:0::1;-1:-1:-1::0;;16503:61:0;;;-1:-1:-1;;16503:61:0;;;;;;;::::1;::::0;;16593:54:::1;::::0;16621:8;;16609:10:::1;::::0;16593:54:::1;::::0;16414:17:::1;::::0;16593:54:::1;-1:-1:-1::0;;6167:1:0;6158:6;:10;15946:709::o;29763:575::-;29844:12;29878;;;;;;;29877:13;29869:38;;;;-1:-1:-1;;;29869:38:0;;26686:2:1;29869:38:0;;;26668:21:1;26725:2;26705:18;;;26698:30;-1:-1:-1;;;26744:18:1;;;26737:43;26797:18;;29869:38:0;26484:337:1;29869:38:0;-1:-1:-1;;;;;29932:15:0;;;;;;:9;:15;;;;;;;;29948:10;29932:27;;;;;;;;-1:-1:-1;;29932:45:0;29928:115;;-1:-1:-1;;;;;29994:15:0;;;;;;:9;:15;;;;;;;;30010:10;29994:27;;;;;;;:37;;-1:-1:-1;;;;;29994:37:0;;;:15;:37;;;;;:::i;:::-;;;;-1:-1:-1;;29928:115:0;-1:-1:-1;;;;;30063:15:0;;;;;;:9;:15;;;;;:25;;-1:-1:-1;;;;;30063:25:0;;;:15;:25;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;30134:13:0;;;;;;;:9;:13;;;;;;;;:23;;-1:-1:-1;;;;;30134:23:0;;;;;30204:15;;;;;:9;:15;;;;;;;30221:13;;;;;;30189:54;;30204:15;;;;30221:13;30151:6;30189:14;:54::i;:::-;30269:26;;-1:-1:-1;;;;;32595:39:1;;32577:58;;-1:-1:-1;;;;;30269:26:0;;;;;;;;;;32565:2:1;32550:18;30269:26:0;;;;;;;-1:-1:-1;30326:4:0;;29763:575;-1:-1:-1;;;29763:575:0:o;28999:440::-;29062:12;29096;;;;;;;29095:13;29087:38;;;;-1:-1:-1;;;29087:38:0;;26686:2:1;29087:38:0;;;26668:21:1;26725:2;26705:18;;;26698:30;-1:-1:-1;;;26744:18:1;;;26737:43;26797:18;;29087:38:0;26484:337:1;29087:38:0;29156:10;29146:21;;;;:9;:21;;;;;:31;;-1:-1:-1;;;;;29146:31:0;;;:21;:31;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;29223:13:0;;;;;;;:9;:13;;;;;;;;:23;;-1:-1:-1;;;;;29223:23:0;;;;;29303:10;29293:21;;:9;:21;;;;;;;29316:13;;;;;;29278:60;;29293:21;;;;29316:13;29240:6;29278:14;:60::i;:::-;29364:32;;-1:-1:-1;;;;;32595:39:1;;32577:58;;-1:-1:-1;;;;;29364:32:0;;;29373:10;;29364:32;;32565:2:1;32550:18;29364:32:0;32432:209:1;13799:1969:0;14049:13;6088:6;;6098:1;6088:11;6080:32;;;;-1:-1:-1;;;6080:32:0;;27363:2:1;6080:32:0;;;27345:21:1;27402:1;27382:18;;;27375:29;-1:-1:-1;;;27420:18:1;;;27413:39;27469:18;;6080:32:0;27161:332:1;6080:32:0;6133:1;6124:6;:10;14083:15:::1;::::0;:31:::1;::::0;;::::1;:15:::0;::::1;:31;::::0;::::1;::::0;:66:::1;;-1:-1:-1::0;14134:15:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;14118:31:::0;;::::1;;;14083:66;14075:91;;;::::0;-1:-1:-1;;;14075:91:0;;23983:2:1;14075:91:0::1;::::0;::::1;23965:21:1::0;24022:2;24002:18;;;23995:30;24061:15;24041:18;;;24034:43;24094:18;;14075:91:0::1;23781:337:1::0;14075:91:0::1;14244:2;14231:15:::0;::::1;;14223:36;;;::::0;-1:-1:-1;;;14223:36:0;;29054:2:1;14223:36:0::1;::::0;::::1;29036:21:1::0;29093:1;29073:18;;;29066:29;29131:11;29111:18;;;29104:39;29160:18;;14223:36:0::1;28852:332:1::0;14223:36:0::1;14366:1;14358:4;:9;;;;14350:26;;;::::0;-1:-1:-1;;;14350:26:0;;25339:2:1;14350:26:0::1;::::0;::::1;25321:21:1::0;25378:1;25358:18;;;25351:29;-1:-1:-1;;;25396:18:1;;;25389:35;25441:18;;14350:26:0::1;25137:328:1::0;14350:26:0::1;14427:20;;:::i;:::-;14528:4;14514:5;14520:4;14514:11;;;;;;;;;:::i;:::-;:18:::0;::::1;;:11;::::0;;::::1;;:18:::0;14600:9:::1;::::0;::::1;14608:1;14600:9;14596:402;;;14646:1;14630:17:::0;::::1;14626:217;;;14688:15;::::0;;;::::1;;;14676:5:::0;;14682:1:::1;14676:5:::0;:8:::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14676:27:0::1;;;14668:47;;;::::0;-1:-1:-1;;;14668:47:0;;30739:2:1;14668:47:0::1;::::0;::::1;30721:21:1::0;30778:1;30758:18;;;30751:29;30816:10;30796:18;;;30789:38;30844:18;;14668:47:0::1;30537:331:1::0;14668:47:0::1;14596:402;;14626:217;14757:1;14741:17:::0;::::1;14737:106;;;14799:15;::::0;;::::1;;::::0;14787:5;;;;:8;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14787:27:0::1;;;14779:48;;;::::0;-1:-1:-1;;;14779:48:0;;26007:2:1;14779:48:0::1;::::0;::::1;25989:21:1::0;26046:1;26026:18;;;26019:29;26084:11;26064:18;;;26057:39;26113:18;;14779:48:0::1;25805:332:1::0;14596:402:0::1;14883:25:::0;;::::1;:56:::0;::::1;;;-1:-1:-1::0;14912:27:0;;::::1;14883:56;14875:81;;;::::0;-1:-1:-1;;;14875:81:0;;26344:2:1;14875:81:0::1;::::0;::::1;26326:21:1::0;26383:2;26363:18;;;26356:30;26422:15;26402:18;;;26395:43;26455:18;;14875:81:0::1;26142:337:1::0;14875:81:0::1;15082:10;15018:16;15072:21:::0;;;:9:::1;:21;::::0;;;;;:26;15068:50:::1;;-1:-1:-1::0;15114:4:0::1;15068:50;15186:13;:15:::0;;::::1;;::::0;;15274:333:::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;15418:11:::0;:41:::1;;15458:1;15418:41;;;15439:15;15418:41;15274:333;;;;;;15479:11;:56;;15534:1;15479:56;;;15519:12;15500:15;15493:38;15479:56;15274:333;;;;;;15555:1;-1:-1:-1::0;;;;;15274:333:0::1;;;;;15558:1;-1:-1:-1::0;;;;;15274:333:0::1;;;;;15561:5;15274:333;;;;15568:2;;15274:333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;15274:333:0;;;-1:-1:-1;15274:333:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;::::1;::::0;;;15572:5;;;;;;15274:333;::::1;::::0;15572:5;;15274:333;15572:5;15274:333;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;15274:333:0;;;-1:-1:-1;15274:333:0::1;;;15579:4:::0;;15274:333:::1;:::i;:::-;;;;;15585:7;;15274:333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;15274:333:0;;;;-1:-1:-1;;15257:13:0::1;::::0;;15247:24;;:9:::1;:24;::::0;;;;;;;;:360;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;15247:360:0;;;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;15247:360:0;;;::::1;;-1:-1:-1::0;;;;15247:360:0;;;;;-1:-1:-1;;;;;;;;15247:360:0;;::::1;;;::::0;;::::1;::::0;::::1;::::0;-1:-1:-1;15247:360:0;::::1;::::0;;-1:-1:-1;;15247:360:0::1;::::0;;;::::1;;::::0;;::::1;::::0;::::1;::::0;:24;;-1:-1:-1;15247:360:0::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;15247:360:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;15247:360:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;15247:360:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;15247:360:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;;;15675:12;15644:70;;15665:8;15659:4;15644:70;;;15689:2;;15693:5;;15700:4;;15706:7;;15644:70;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;6167:1:0;6158:6;:10;13799:1969;;-1:-1:-1;;;;;;;;;;13799:1969:0:o;35303:599::-;35363:22;35420:4;35408:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35398:34;;35473:9;35468:416;35488:15;;;35468:416;;;35530:12;;35575:4;35594;;35599:1;35594:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;35567:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35529:73;;;;35626:7;35621:210;;35678:2;35662:6;:13;:18;35658:32;;;35682:8;;;35658:32;35746:4;35738:6;35734:17;35724:27;;35793:6;35782:28;;;;;;;;;;;;:::i;:::-;35775:36;;-1:-1:-1;;;35775:36:0;;;;;;;;:::i;35621:210::-;35862:6;35849:7;35857:1;35849:10;;;;;;;;:::i;:::-;;;;;;;;;;:19;-1:-1:-1;;35505:3:0;;35468:416;;;;35303:599;;;;:::o;34987:138::-;35051:20;;:::i;:::-;35092:19;;;;:9;:19;;;;;;35084:33;;;;;;;;;;35092:25;;;;;35084:33;;35092:25;;35084:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35084:33:0;;34987:138;-1:-1:-1;;;;;;;34987:138:0:o;32897:242::-;-1:-1:-1;;;;;33007:23:0;;32962:12;33007:23;;;:14;:23;;;;;;33061:17;:68;;33128:1;33061:68;;;-1:-1:-1;;;;;33081:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;33102:16:0;;33081:38;;;;;;;:44;;;;-1:-1:-1;;;;;33081:44:0;33061:68;33053:76;32897:242;-1:-1:-1;;;32897:242:0:o;25850:1119::-;26036:23;2131:77;26116:4;26100:22;;;;;;:::i;:::-;;;;;;;;;;26072:81;;;;22065:25:1;;;;22106:18;;;22099:34;26124:13:0;22149:18:1;;;22142:34;26147:4:0;22192:18:1;;;;22185:83;;;;26072:81:0;;;;;;;;;;22037:19:1;;;26072:81:0;;26062:92;;;;;;2291:65;26230:59;;;21620:25:1;-1:-1:-1;;;;;21681:55:1;;21661:18;;;21654:83;21753:18;;;21746:34;;;21796:18;;;;21789:34;;;26230:59:0;;;;;;;;;;21592:19:1;;;26230:59:0;;;26220:70;;;;;;;-1:-1:-1;;;26362:57:0;;;15740:27:1;15783:11;;;15776:27;;;15819:12;;;15812:28;;;26062:92:0;;-1:-1:-1;;;15856:12:1;;26362:57:0;;;-1:-1:-1;;26362:57:0;;;;;;;;;26352:68;;26362:57;26352:68;;;;26474:17;26494:26;;;;;;;;;22840:25:1;;;22913:4;22901:17;;22881:18;;;22874:45;;;;22935:18;;;22928:34;;;22978:18;;;22971:34;;;26352:68:0;;-1:-1:-1;26474:17:0;26494:26;;22812:19:1;;26494:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26494:26:0;;-1:-1:-1;;26494:26:0;;;-1:-1:-1;;;;;;;26587:23:0;;26579:45;;;;-1:-1:-1;;;26579:45:0;;28375:2:1;26579:45:0;;;28357:21:1;28414:2;28394:18;;;28387:30;-1:-1:-1;;;28433:18:1;;;28426:40;28483:18;;26579:45:0;28173:334:1;26579:45:0;-1:-1:-1;;;;;26706:17:0;;;;;;:6;:17;;;;;:19;;;;;;;;26697:28;;26689:46;;;;-1:-1:-1;;;26689:46:0;;23649:2:1;26689:46:0;;;23631:21:1;23688:1;23668:18;;;23661:29;23726:8;23706:18;;;23699:36;23752:18;;26689:46:0;23447:329:1;26689:46:0;26828:8;26809:15;:27;;26801:46;;;;-1:-1:-1;;;26801:46:0;;27028:2:1;26801:46:0;;;27010:21:1;27067:1;27047:18;;;27040:29;-1:-1:-1;;;27085:18:1;;;27078:37;27132:18;;26801:46:0;26826:330:1;26801:46:0;26907:31;26917:9;26928;26907;:31::i;:::-;26025:944;;;;25850:1119;;;;;;:::o;31116:1502::-;6088:6;;6098:1;6088:11;6080:32;;;;-1:-1:-1;;;6080:32:0;;27363:2:1;6080:32:0;;;27345:21:1;27402:1;27382:18;;;27375:29;-1:-1:-1;;;27420:18:1;;;27413:39;27469:18;;6080:32:0;27161:332:1;6080:32:0;6133:1;6124:6;:10;31245::::1;31227:50;31237:19:::0;;;:7:::1;:19;::::0;;;;;;;:39:::1;;::::0;31227:50;;:9:::1;:50:::0;;;;;:61;-1:-1:-1;;;31227:61:0;::::1;;;:66:::0;31219:87:::1;;;::::0;-1:-1:-1;;;31219:87:0;;25002:2:1;31219:87:0::1;::::0;::::1;24984:21:1::0;25041:1;25021:18;;;25014:29;-1:-1:-1;;;25059:18:1;;;25052:39;25108:18;;31219:87:0::1;24800:332:1::0;31219:87:0::1;31395:6;31390:720;31407:11;:18:::0;31403:22;::::1;31390:720;;;31449:24;31477:11;31489:1;31477:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;31503:49:::1;::::0;;31546:4:::1;31503:49;::::0;;::::1;16025:74:1::0;;;;31503:49:0;;;;;;;;;;15998:18:1;;;;31503:49:0;;;;::::1;::::0;;::::1;;-1:-1:-1::0;;;31503:49:0::1;::::0;;31477:76;-1:-1:-1;;;;;31477:14:0;;::::1;::::0;:76:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31447:106;;;31619:12;31645:11;31634:31;;;;;;;;;;;;:::i;:::-;31741:21;31822:9:::0;;31619:46;;-1:-1:-1;31741:21:0;31808:23:::1;::::0;-1:-1:-1;;;;;31822:9:0;;::::1;::::0;::::1;::::0;-1:-1:-1;;;31808:11:0;::::1;;:23;:::i;:::-;-1:-1:-1::0;;;;;31765:67:0::1;31796:7:::0;31767:25:::1;31780:12:::0;31767:10;:25:::1;:::i;:::-;-1:-1:-1::0;;;;;31766:37:0::1;;;;;:::i;:::-;31765:67;;;;:::i;:::-;31741:91:::0;-1:-1:-1;31899:21:0;;31895:204:::1;;31998:51;32012:11;32024:1;32012:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32012:14:0::1;32028:2:::0;32032:16;31998:13:::1;:51::i;:::-;31432:678;;;31427:3;;;;;:::i;:::-;;;;31390:720;;;-1:-1:-1::0;;;;;;32134:15:0;::::1;::::0;32130:155:::1;;32188:33;32198:10;32210;32188:9;:33::i;:::-;-1:-1:-1::0;;;;;32309:17:0;::::1;::::0;32305:186:::1;;32365:37;32377:10;32389:12;32365:11;:37::i;:::-;32516:50;::::0;-1:-1:-1;;;;;16043:55:1;;16025:74;;-1:-1:-1;;;;;32516:50:0;;::::1;::::0;;;::::1;::::0;32525:10:::1;::::0;32516:50:::1;::::0;16013:2:1;15998:18;32516:50:0::1;;;;;;;-1:-1:-1::0;;6167:1:0;6158:6;:10;-1:-1:-1;31116:1502:0:o;20250:1099::-;6088:6;;6098:1;6088:11;6080:32;;;;-1:-1:-1;;;6080:32:0;;27363:2:1;6080:32:0;;;27345:21:1;27402:1;27382:18;;;27375:29;-1:-1:-1;;;27420:18:1;;;27413:39;27469:18;;6080:32:0;27161:332:1;6080:32:0;6133:1;6124:6;:10;;;20323:21:::1;20347:19:::0;;;:9:::1;:19;::::0;;;;;;;20425:32;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;20425:32:0;::::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;20425:32:0;;::::1;-1:-1:-1::0;;;;;20425:32:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;20347:19;;20425:32:::1;::::0;20347:19;;20425:32;20347:19;;20425:32;;;;;;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;20425:32:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;20425:32:0::1;-1:-1:-1::0;;;;;20425:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:16;:32::i;:::-;-1:-1:-1::0;20546:12:0::1;::::0;::::1;::::0;20530:13;;-1:-1:-1;;;;;20546:12:0;;::::1;-1:-1:-1::0;;;20530:13:0;;::::1;::::0;;::::1;:28;20526:142;;;20636:25;::::0;;;:15:::1;:25;::::0;;;;:32;;-1:-1:-1;;20636:32:0::1;20664:4;20636:32;::::0;;20526:142:::1;20749:10;::::0;::::1;:13:::0;::::1;;20745:333;;;20764:27;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;20764:27:0;::::1;;::::0;;;;-1:-1:-1;;;20764:27:0;::::1;-1:-1:-1::0;;;;;20764:27:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;20764:27:0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;20764:27:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;20764:27:0::1;-1:-1:-1::0;;;;;20764:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:21;:27::i;:::-;20745:333;;;20850:10;::::0;::::1;:13:::0;::::1;::::0;::::1;;;20846:232;;;20865:27;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;20865:27:0;::::1;;::::0;;;;-1:-1:-1;;;20865:27:0;::::1;-1:-1:-1::0;;;;;20865:27:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;20865:27:0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;20865:27:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;20865:27:0::1;-1:-1:-1::0;;;;;20865:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:21;:27::i;20846:232::-;20951:10;::::0;::::1;:13:::0;;;::::1;;;20947:131;;;20966:27;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;20966:27:0;::::1;;::::0;;;;-1:-1:-1;;;20966:27:0;::::1;-1:-1:-1::0;;;;;20966:27:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;20966:27:0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;20966:27:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;20966:27:0::1;-1:-1:-1::0;;;;;20966:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:21;:27::i;20947:131::-;21048:30;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;21048:30:0;::::1;;::::0;;;;-1:-1:-1;;;21048:30:0;::::1;-1:-1:-1::0;;;;;21048:30:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;21048:30:0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21048:30:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;21048:30:0::1;-1:-1:-1::0;;;;;21048:30:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:24;:30::i;:::-;21145:19;::::0;;;:9:::1;:19;::::0;;;;21138:26;;;;;;;;::::1;::::0;;-1:-1:-1;;21138:26:0::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;;21145:19:0;21138:26:::1;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;-1:-1:-1::0;;21260:25:0::1;::::0;21276:8;;21260:25:::1;::::0;;;::::1;-1:-1:-1::0;;6167:1:0;6158:6;:10;20250:1099::o;40079:433::-;40171:11;;40193:20;-1:-1:-1;;;40171:11:0;;;-1:-1:-1;;;;;40171:11:0;;;:18;;:42;;40167:327;;-1:-1:-1;;;;;40234:11:0;;;;;;:7;:11;;;;;;;;:24;;-1:-1:-1;;40234:24:0;;-1:-1:-1;;;;;40234:24:0;;;;;;;;;;;40319:17;;-1:-1:-1;;40319:17:0;;;;;;;;;;;;;;;;;;;40403:34;;32595:39:1;;;32577:58;;40403:34:0;;32550:18:1;40403:34:0;32432:209:1;40167:327:0;40079:433;;:::o;40577:568::-;40673:11;;40697:20;-1:-1:-1;;;40673:11:0;;;-1:-1:-1;;;;;40673:11:0;;;:20;;:44;;40669:458;;-1:-1:-1;;;;;40738:13:0;;;;;;;:9;:13;;;;;;;;:23;;-1:-1:-1;;;;;40738:23:0;;;;;;;;;40824:21;;;;;-1:-1:-1;;;40824:21:0;;;;;;;;;;;;;;;40936:9;:13;;;;;;40909:49;;40936:13;40738:23;40909:14;:49::i;:::-;41014:32;;-1:-1:-1;;;;;32595:39:1;;32577:58;;-1:-1:-1;;;;;41014:32:0;;;41031:1;;41014:32;;32565:2:1;32550:18;41014:32:0;32432:209:1;39125:351:0;-1:-1:-1;;;;;39190:13:0;;;;;;:7;:13;;;;;:26;;39212:4;;39190:13;:26;;39212:4;;-1:-1:-1;;;;;39190:26:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;39190:26:0;;;;;;;;;;;;;;;-1:-1:-1;39301:17:0;;-1:-1:-1;;39301:17:0;;;;;;;;;;;;;;;;;;;;39391:36;;32595:39:1;;;32577:58;;-1:-1:-1;;;;;;;39391:36:0;;;;;32565:2:1;32550:18;39391:36:0;32432:209:1;39538:478:0;-1:-1:-1;;;;;39607:15:0;;;;;;:9;:15;;;;;:25;;-1:-1:-1;;;;;39607:25:0;;;:15;:25;;;;;:::i;:::-;;;;-1:-1:-1;;39719:11:0;:21;;-1:-1:-1;;;;;;;;39719:21:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39825:15:0;;;;;:9;:15;;;;;;39810:51;;39825:15;;;39734:6;39810:14;:51::i;:::-;39909:34;;-1:-1:-1;;;;;32595:39:1;;32577:58;;39932:1:0;;-1:-1:-1;;;;;39909:34:0;;;;;32565:2:1;32550:18;39909:34:0;32432:209:1;36939:356:0;-1:-1:-1;;;;;37041:20:0;;;37015:23;37041:20;;;:9;:20;;;;;;;;;;37082:32;;;-1:-1:-1;;37082:32:0;;;;;;37185:9;:20;;;;;;;37041;;;37135:72;;37041:20;;37105:9;;37135:14;:72::i;:::-;37277:9;-1:-1:-1;;;;;37233:54:0;37260:15;-1:-1:-1;;;;;37233:54:0;37249:9;-1:-1:-1;;;;;37233:54:0;;;;;;;;;;;37004:291;36939:356;;:::o;37381:938::-;37510:6;-1:-1:-1;;;;;37500:16:0;:6;-1:-1:-1;;;;;37500:16:0;;;:31;;;;-1:-1:-1;;;;;;37520:11:0;;;;37500:31;37496:805;;;-1:-1:-1;;;;;37556:20:0;;;37552:351;;-1:-1:-1;;;;;37618:22:0;;37601:14;37618:22;;;:14;:22;;;;;;;37682:14;:61;;37742:1;37682:61;;;-1:-1:-1;;;;;37699:19:0;;;;;;:11;:19;;;;;;;;-1:-1:-1;;37719:13:0;;37699:34;;;;;;;:40;;;;-1:-1:-1;;;;;37699:40:0;37682:61;37663:80;-1:-1:-1;37785:18:0;;;37826:57;37843:6;37851:9;37663:80;37785:18;37826:16;:57::i;:::-;37578:325;;;37552:351;-1:-1:-1;;;;;37939:20:0;;;37935:351;;-1:-1:-1;;;;;38001:22:0;;37984:14;38001:22;;;:14;:22;;;;;;;38065:14;:61;;38125:1;38065:61;;;-1:-1:-1;;;;;38082:19:0;;;;;;:11;:19;;;;;;;;-1:-1:-1;;38102:13:0;;38082:34;;;;;;;:40;;;;-1:-1:-1;;;;;38082:40:0;38065:61;38046:80;-1:-1:-1;38168:18:0;;;38209:57;38226:6;38234:9;38046:80;38168:18;38209:16;:57::i;:::-;37961:325;;;37935:351;37381:938;;;:::o;42216:361::-;42345:46;;;-1:-1:-1;;;;;16302:55:1;;;42345:46:0;;;16284:74:1;16374:18;;;;16367:34;;;42345:46:0;;;;;;;;;;16257:18:1;;;;42345:46:0;;;;;;;;;-1:-1:-1;;;42345:46:0;;;42334:58;;-1:-1:-1;;;;42334:10:0;;;;:58;;42345:46;42334:58;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42298:94;;;;42440:7;:57;;;;-1:-1:-1;42452:11:0;;:16;;:44;;;42483:4;42472:24;;;;;;;;;;;;:::i;:::-;42432:84;;;;-1:-1:-1;;;42432:84:0;;30062:2:1;42432:84:0;;;30044:21:1;30101:2;30081:18;;;30074:30;30140:17;30120:18;;;30113:45;30175:18;;42432:84:0;29860:339:1;42432:84:0;42287:290;;42216:361;;;:::o;41224:879::-;41309:10;41377:13;;41365:8;:25;;41357:43;;;;-1:-1:-1;;;41357:43:0;;24325:2:1;41357:43:0;;;24307:21:1;24364:1;24344:18;;;24337:29;-1:-1:-1;;;24382:18:1;;;24375:36;24428:18;;41357:43:0;24123:329:1;41357:43:0;-1:-1:-1;;41459:12:0;;41449:23;;;;:9;:23;;;;;:34;-1:-1:-1;;;41449:34:0;;;;:39;41441:65;;;;-1:-1:-1;;;41441:65:0;;24659:2:1;41441:65:0;;;24641:21:1;24698:2;24678:18;;;24671:30;24737:16;24717:18;;;24710:44;24771:18;;41441:65:0;24457:338:1;41441:65:0;41583:19;;;;:9;:19;;;;;:30;-1:-1:-1;;;41583:30:0;;;;41575:56;;;;-1:-1:-1;;;41575:56:0;;25002:2:1;41575:56:0;;;24984:21:1;25041:1;25021:18;;;25014:29;-1:-1:-1;;;25059:18:1;;;25052:39;25108:18;;41575:56:0;24800:332:1;41575:56:0;41726:14;;;;;;;41722:31;;;-1:-1:-1;41749:4:0;41742:11;;41722:31;41824:11;;41838:1;;-1:-1:-1;;;41824:11:0;;-1:-1:-1;;;;;41824:11:0;:15;-1:-1:-1;;;;;41808:31:0;:4;:13;;;-1:-1:-1;;;;;41808:31:0;;41804:48;;;-1:-1:-1;41848:4:0;41841:11;;41804:48;41953:15;41938:11;;;;;;;;;;;41920:4;:15;;;:29;:48;;;;41912:66;;;;-1:-1:-1;;;41912:66:0;;29728:2:1;41912:66:0;;;29710:21:1;29767:1;29747:18;;;29740:29;29805:8;29785:18;;;29778:36;29831:18;;41912:66:0;29526:329:1;41912:66:0;-1:-1:-1;42035:4:0;41224:879;;;;:::o;21429:300::-;21531:6;21526:154;21543:4;:7;;;:14;21539:1;:18;21526:154;;;21582:4;:7;;;21590:1;21582:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;21582:15:0;21604:4;:10;;;21615:1;21604:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;21582:98:0;21667:4;:9;;;21677:1;21667:12;;;;;;;;:::i;:::-;;;;;;;21582:98;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21559:3:0;;21526:154;;21809:659;21911:6;21906:544;21923:4;:7;;;:14;21919:1;:18;21906:544;;;21967:4;:9;;;21977:1;21967:12;;;;;;;;:::i;:::-;;;;;;;:19;21990:1;21967:24;21963:472;;;22016:38;22028:4;:7;;;22036:1;22028:10;;;;;;;;:::i;:::-;;;;;;;22040:4;:10;;;22051:1;22040:13;;;;;;;;:::i;:::-;;;;;;;22016:11;:38::i;:::-;21963:472;;;22135:21;22166:9;:21;22176:4;:7;;;22184:1;22176:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;22166:21:0;-1:-1:-1;;;;;22166:21:0;;;;;;;;;;;;;22135:53;;22237:39;22249:4;:7;;;22257:1;22249:10;;;;;;;;:::i;:::-;;;;;;;22261:14;22237:11;:39::i;:::-;22351:37;22361:4;:7;;;22369:1;22361:10;;;;;;;;:::i;:::-;;;;;;;22373:14;22351:9;:37::i;:::-;22112:323;21963:472;21939:3;;21906:544;;22591:972;22677:10;;;;:17;22729:1;22719:11;;22715:841;;;22751:4;:10;;;22762:1;22751:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;22751:18:0;22768:1;22751:18;22747:63;;22796:4;:10;;;22807:1;22796:13;;;;;;;;:::i;:::-;;;;;;;22771:15;;:39;;;;;;;;;;;;;;;;;;40079:433;;:::o;22715:841::-;22892:6;22902:1;22892:11;22888:668;;;22924:4;:10;;;22935:1;22924:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;22924:18:0;22941:1;22924:18;22920:63;;22969:4;:10;;;22980:1;22969:13;;;;;;;;:::i;:::-;;;;;;;22944:15;;:39;;;;;;;;;;;;;;;;;;40079:433;;:::o;22888:668::-;23065:6;23075:1;23065:11;23061:495;;;23097:4;:10;;;23108:1;23097:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23097:18:0;23114:1;23097:18;23093:59;;23138:4;:10;;;23149:1;23138:13;;;;;;;;:::i;:::-;;;;;;;23117:11;;:35;;;;;;;;;;;;;;;;;;40079:433;;:::o;23061:495::-;23227:6;23237:1;23227:11;23223:333;;;23255:4;:10;;;23266:1;23255:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23255:18:0;23272:1;23255:18;:59;;-1:-1:-1;;23297:10:0;:17;;-1:-1:-1;;23297:17:0;23310:4;23297:17;;;37381:938::o;23255:59::-;-1:-1:-1;;23289:5:0;23276:18;;-1:-1:-1;;23276:18:0;;;40079:433::o;23223:333::-;23394:6;23404:1;23394:11;23390:166;;;23422:4;:10;;;23433:1;23422:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23422:18:0;23439:1;23422:18;:63;;23466:12;:19;;-1:-1:-1;;23466:19:0;;;;;37381:938;;:::o;23422:63::-;-1:-1:-1;;23458:5:0;23443:20;;-1:-1:-1;;23443:20:0;;;22591:972::o;23684:942::-;23789:6;23784:824;23801:4;:7;;;:14;23797:1;:18;23784:824;;;23845:4;:10;;;23856:1;23845:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23845:18:0;23862:1;23845:18;:46;;;;;23867:4;:9;;;23877:1;23867:12;;;;;;;;:::i;:::-;;;;;;;:19;23890:1;23867:24;23845:46;23841:752;;;23990:4;23968:7;:19;23976:4;:7;;;23984:1;23976:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23968:19:0;-1:-1:-1;;;;;23968:19:0;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;23841:752;;;24067:4;:10;;;24078:1;24067:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24067:18:0;24084:1;24067:18;:46;;;;;24089:4;:9;;;24099:1;24089:12;;;;;;;;:::i;:::-;;;;;;;:19;24112:1;24089:24;;24067:46;24063:530;;;24223:5;24201:7;:19;24209:4;:7;;;24217:1;24209:10;;;;;;;;:::i;24063:530::-;24306:4;:10;;;24317:1;24306:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24306:18:0;24323:1;24306:18;;:46;;;;;24328:4;:9;;;24338:1;24328:12;;;;;;;;:::i;:::-;;;;;;;:19;24351:1;24328:24;24306:46;24302:291;;;24444:11;:18;1198:3;24444:43;24440:77;;24489:11;24506:4;:7;;;24514:1;24506:10;;;;;;;;:::i;:::-;;;;;;;;;;;;24489:28;;;;;;;-1:-1:-1;24489:28:0;;;;;;;;;;-1:-1:-1;;24489:28:0;-1:-1:-1;;;;;24489:28:0;;;;;;;;;24440:77;23817:3;;23784:824;;38405:660;38548:15;38614:17;;;;;:88;;-1:-1:-1;;;;;;38635:22:0;;;;;;:11;:22;;;;;;;;-1:-1:-1;;38658:16:0;;38635:40;;;;;;;:54;:67;;;;:54;;:67;38614:88;38610:360;;;-1:-1:-1;;;;;38723:22:0;;;;;;:11;:22;;;;;;;;-1:-1:-1;;38746:16:0;;38723:40;;;;;;;:57;;-1:-1:-1;;38723:57:0;;-1:-1:-1;;;;;38723:57:0;;;;;;38610:360;;;38860:31;;;;;;;;;;;;;;-1:-1:-1;;;;;38860:31:0;;;;;;;;;;-1:-1:-1;;;;;38821:22:0;;-1:-1:-1;38821:22:0;;;:11;:22;;;;;:36;;;;;;;;:70;;;;;;;;;;;-1:-1:-1;;38821:70:0;;;;;;;;;;;;;;;;;;38910:25;;:14;:25;;;;38821:70;38938:16;;38910:44;;38610:360;39006:51;;;-1:-1:-1;;;;;33378:15:1;;;33360:34;;33430:15;;33425:2;33410:18;;33403:43;-1:-1:-1;;;;;39006:51:0;;;;;33288:18:1;39006:51:0;;;;;;;38511:554;38405:660;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;14:196:1;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:367::-;278:8;288:6;342:3;335:4;327:6;323:17;319:27;309:55;;360:1;357;350:12;309:55;-1:-1:-1;383:20:1;;426:18;415:30;;412:50;;;458:1;455;448:12;412:50;495:4;487:6;483:17;471:29;;555:3;548:4;538:6;535:1;531:14;523:6;519:27;515:38;512:47;509:67;;;572:1;569;562:12;509:67;215:367;;;;;:::o;587:347::-;638:8;648:6;702:3;695:4;687:6;683:17;679:27;669:55;;720:1;717;710:12;669:55;-1:-1:-1;743:20:1;;786:18;775:30;;772:50;;;818:1;815;808:12;772:50;855:4;847:6;843:17;831:29;;907:3;900:4;891:6;883;879:19;875:30;872:39;869:59;;;924:1;921;914:12;939:163;1006:20;;1066:10;1055:22;;1045:33;;1035:61;;1092:1;1089;1082:12;1107:156;1173:20;;1233:4;1222:16;;1212:27;;1202:55;;1253:1;1250;1243:12;1268:186;1327:6;1380:2;1368:9;1359:7;1355:23;1351:32;1348:52;;;1396:1;1393;1386:12;1348:52;1419:29;1438:9;1419:29;:::i;1459:260::-;1527:6;1535;1588:2;1576:9;1567:7;1563:23;1559:32;1556:52;;;1604:1;1601;1594:12;1556:52;1627:29;1646:9;1627:29;:::i;:::-;1617:39;;1675:38;1709:2;1698:9;1694:18;1675:38;:::i;:::-;1665:48;;1459:260;;;;;:::o;1724:1210::-;1884:6;1892;1900;1908;1916;1924;1932;1940;1993:3;1981:9;1972:7;1968:23;1964:33;1961:53;;;2010:1;2007;2000:12;1961:53;2033:29;2052:9;2033:29;:::i;:::-;2023:39;;2081:38;2115:2;2104:9;2100:18;2081:38;:::i;:::-;2071:48;;2170:2;2159:9;2155:18;2142:32;2193:18;2234:2;2226:6;2223:14;2220:34;;;2250:1;2247;2240:12;2220:34;2289:70;2351:7;2342:6;2331:9;2327:22;2289:70;:::i;:::-;2378:8;;-1:-1:-1;2263:96:1;-1:-1:-1;2466:2:1;2451:18;;2438:32;;-1:-1:-1;2482:16:1;;;2479:36;;;2511:1;2508;2501:12;2479:36;2550:72;2614:7;2603:8;2592:9;2588:24;2550:72;:::i;:::-;2641:8;;-1:-1:-1;2524:98:1;-1:-1:-1;2729:3:1;2714:19;;2701:33;;-1:-1:-1;2746:16:1;;;2743:36;;;2775:1;2772;2765:12;2743:36;;2814:60;2866:7;2855:8;2844:9;2840:24;2814:60;:::i;:::-;1724:1210;;;;-1:-1:-1;1724:1210:1;;-1:-1:-1;1724:1210:1;;;;;;2893:8;-1:-1:-1;;;1724:1210:1:o;2939:626::-;3036:6;3044;3052;3060;3068;3121:3;3109:9;3100:7;3096:23;3092:33;3089:53;;;3138:1;3135;3128:12;3089:53;3161:29;3180:9;3161:29;:::i;:::-;3151:39;;3209:38;3243:2;3232:9;3228:18;3209:38;:::i;:::-;3199:48;;3294:2;3283:9;3279:18;3266:32;3256:42;;3349:2;3338:9;3334:18;3321:32;3376:18;3368:6;3365:30;3362:50;;;3408:1;3405;3398:12;3362:50;3447:58;3497:7;3488:6;3477:9;3473:22;3447:58;:::i;:::-;2939:626;;;;-1:-1:-1;2939:626:1;;-1:-1:-1;3524:8:1;;3421:84;2939:626;-1:-1:-1;;;2939:626:1:o;3570:695::-;3676:6;3684;3692;3700;3708;3716;3769:3;3757:9;3748:7;3744:23;3740:33;3737:53;;;3786:1;3783;3776:12;3737:53;3809:29;3828:9;3809:29;:::i;:::-;3799:39;;3857:38;3891:2;3880:9;3876:18;3857:38;:::i;:::-;3847:48;;3942:2;3931:9;3927:18;3914:32;3904:42;;3993:2;3982:9;3978:18;3965:32;3955:42;;4048:3;4037:9;4033:19;4020:33;4076:18;4068:6;4065:30;4062:50;;;4108:1;4105;4098:12;4062:50;4147:58;4197:7;4188:6;4177:9;4173:22;4147:58;:::i;:::-;3570:695;;;;-1:-1:-1;3570:695:1;;-1:-1:-1;3570:695:1;;4224:8;;3570:695;-1:-1:-1;;;3570:695:1:o;4270:393::-;4346:6;4354;4362;4415:2;4403:9;4394:7;4390:23;4386:32;4383:52;;;4431:1;4428;4421:12;4383:52;4454:29;4473:9;4454:29;:::i;:::-;4444:39;;4502:38;4536:2;4525:9;4521:18;4502:38;:::i;:::-;4492:48;;4590:2;4579:9;4575:18;4562:32;4603:30;4627:5;4603:30;:::i;:::-;4652:5;4642:15;;;4270:393;;;;;:::o;4668:671::-;4778:6;4786;4794;4802;4810;4818;4826;4879:3;4867:9;4858:7;4854:23;4850:33;4847:53;;;4896:1;4893;4886:12;4847:53;4919:29;4938:9;4919:29;:::i;:::-;4909:39;;4967:38;5001:2;4990:9;4986:18;4967:38;:::i;:::-;4957:48;;5055:2;5044:9;5040:18;5027:32;5068:30;5092:5;5068:30;:::i;:::-;5117:5;-1:-1:-1;5169:2:1;5154:18;;5141:32;;-1:-1:-1;5192:37:1;5224:3;5209:19;;5192:37;:::i;:::-;5182:47;;5276:3;5265:9;5261:19;5248:33;5238:43;;5328:3;5317:9;5313:19;5300:33;5290:43;;4668:671;;;;;;;;;;:::o;5344:254::-;5412:6;5420;5473:2;5461:9;5452:7;5448:23;5444:32;5441:52;;;5489:1;5486;5479:12;5441:52;5512:29;5531:9;5512:29;:::i;:::-;5502:39;5588:2;5573:18;;;;5560:32;;-1:-1:-1;;;5344:254:1:o;5603:531::-;5705:6;5713;5721;5729;5737;5745;5798:3;5786:9;5777:7;5773:23;5769:33;5766:53;;;5815:1;5812;5805:12;5766:53;5838:29;5857:9;5838:29;:::i;:::-;5828:39;;5914:2;5903:9;5899:18;5886:32;5876:42;;5965:2;5954:9;5950:18;5937:32;5927:42;;5988:36;6020:2;6009:9;6005:18;5988:36;:::i;:::-;5978:46;;6071:3;6060:9;6056:19;6043:33;6033:43;;6123:3;6112:9;6108:19;6095:33;6085:43;;5603:531;;;;;;;;:::o;6139:319::-;6206:6;6214;6267:2;6255:9;6246:7;6242:23;6238:32;6235:52;;;6283:1;6280;6273:12;6235:52;6306:29;6325:9;6306:29;:::i;:::-;6296:39;;6385:2;6374:9;6370:18;6357:32;6398:30;6422:5;6398:30;:::i;:::-;6447:5;6437:15;;;6139:319;;;;;:::o;6463:458::-;6538:6;6546;6554;6607:2;6595:9;6586:7;6582:23;6578:32;6575:52;;;6623:1;6620;6613:12;6575:52;6646:29;6665:9;6646:29;:::i;:::-;6636:39;;6725:2;6714:9;6710:18;6697:32;6738:30;6762:5;6738:30;:::i;6926:594::-;7007:6;7015;7023;7031;7084:3;7072:9;7063:7;7059:23;7055:33;7052:53;;;7101:1;7098;7091:12;7052:53;7124:29;7143:9;7124:29;:::i;:::-;7114:39;;7203:2;7192:9;7188:18;7175:32;7216:30;7240:5;7216:30;:::i;:::-;7265:5;-1:-1:-1;7322:2:1;7307:18;;7294:32;7335;7294;7335;:::i;:::-;7386:7;-1:-1:-1;7445:2:1;7430:18;;7417:32;7458:30;7417:32;7458:30;:::i;:::-;6926:594;;;;-1:-1:-1;6926:594:1;;-1:-1:-1;;6926:594:1:o;7525:448::-;7622:6;7630;7683:2;7671:9;7662:7;7658:23;7654:32;7651:52;;;7699:1;7696;7689:12;7651:52;7739:9;7726:23;7772:18;7764:6;7761:30;7758:50;;;7804:1;7801;7794:12;7758:50;7843:70;7905:7;7896:6;7885:9;7881:22;7843:70;:::i;:::-;7932:8;;7817:96;;-1:-1:-1;7525:448:1;-1:-1:-1;;;;7525:448:1:o;7978:245::-;8045:6;8098:2;8086:9;8077:7;8073:23;8069:32;8066:52;;;8114:1;8111;8104:12;8066:52;8146:9;8140:16;8165:28;8187:5;8165:28;:::i;8228:635::-;8308:6;8361:2;8349:9;8340:7;8336:23;8332:32;8329:52;;;8377:1;8374;8367:12;8329:52;8410:9;8404:16;8443:18;8435:6;8432:30;8429:50;;;8475:1;8472;8465:12;8429:50;8498:22;;8551:4;8543:13;;8539:27;-1:-1:-1;8529:55:1;;8580:1;8577;8570:12;8529:55;8609:2;8603:9;8634:48;8650:31;8678:2;8650:31;:::i;:::-;8634:48;:::i;:::-;8705:2;8698:5;8691:17;8745:7;8740:2;8735;8731;8727:11;8723:20;8720:33;8717:53;;;8766:1;8763;8756:12;8717:53;8779:54;8830:2;8825;8818:5;8814:14;8809:2;8805;8801:11;8779:54;:::i;:::-;8852:5;8228:635;-1:-1:-1;;;;;8228:635:1:o;8868:180::-;8927:6;8980:2;8968:9;8959:7;8955:23;8951:32;8948:52;;;8996:1;8993;8986:12;8948:52;-1:-1:-1;9019:23:1;;8868:180;-1:-1:-1;8868:180:1:o;9053:184::-;9123:6;9176:2;9164:9;9155:7;9151:23;9147:32;9144:52;;;9192:1;9189;9182:12;9144:52;-1:-1:-1;9215:16:1;;9053:184;-1:-1:-1;9053:184:1:o;9242:309::-;9307:6;9315;9368:2;9356:9;9347:7;9343:23;9339:32;9336:52;;;9384:1;9381;9374:12;9336:52;9420:9;9407:23;9397:33;;9480:2;9469:9;9465:18;9452:32;9493:28;9515:5;9493:28;:::i;9556:517::-;9646:6;9654;9662;9670;9678;9731:3;9719:9;9710:7;9706:23;9702:33;9699:53;;;9748:1;9745;9738:12;9699:53;9784:9;9771:23;9761:33;;9844:2;9833:9;9829:18;9816:32;9857:28;9879:5;9857:28;:::i;:::-;9904:5;-1:-1:-1;9928:36:1;9960:2;9945:18;;9928:36;:::i;:::-;9556:517;;;;-1:-1:-1;9918:46:1;;10011:2;9996:18;;9983:32;;-1:-1:-1;10062:3:1;10047:19;10034:33;;9556:517;-1:-1:-1;;9556:517:1:o;10078:1531::-;10282:6;10290;10298;10306;10314;10322;10330;10338;10346;10354;10407:3;10395:9;10386:7;10382:23;10378:33;10375:53;;;10424:1;10421;10414:12;10375:53;10447:27;10464:9;10447:27;:::i;:::-;10437:37;;10493;10526:2;10515:9;10511:18;10493:37;:::i;:::-;10483:47;;10581:2;10570:9;10566:18;10553:32;10604:18;10645:2;10637:6;10634:14;10631:34;;;10661:1;10658;10651:12;10631:34;10700:70;10762:7;10753:6;10742:9;10738:22;10700:70;:::i;:::-;10789:8;;-1:-1:-1;10674:96:1;-1:-1:-1;10877:2:1;10862:18;;10849:32;;-1:-1:-1;10893:16:1;;;10890:36;;;10922:1;10919;10912:12;10890:36;10961:72;11025:7;11014:8;11003:9;10999:24;10961:72;:::i;:::-;11052:8;;-1:-1:-1;10935:98:1;-1:-1:-1;11140:3:1;11125:19;;11112:33;;-1:-1:-1;11157:16:1;;;11154:36;;;11186:1;11183;11176:12;11154:36;11225:72;11289:7;11278:8;11267:9;11263:24;11225:72;:::i;:::-;11316:8;;-1:-1:-1;11199:98:1;-1:-1:-1;11404:3:1;11389:19;;11376:33;;-1:-1:-1;11421:16:1;;;11418:36;;;11450:1;11447;11440:12;11418:36;;11489:60;11541:7;11530:8;11519:9;11515:24;11489:60;:::i;:::-;11463:86;;11568:8;11558:18;;;11595:8;11585:18;;;10078:1531;;;;;;;;;;;;;:::o;11614:245::-;11672:6;11725:2;11713:9;11704:7;11700:23;11696:32;11693:52;;;11741:1;11738;11731:12;11693:52;11780:9;11767:23;11799:30;11823:5;11799:30;:::i;11864:381::-;11941:6;11949;12002:2;11990:9;11981:7;11977:23;11973:32;11970:52;;;12018:1;12015;12008:12;11970:52;12050:9;12044:16;12069:30;12093:5;12069:30;:::i;:::-;12168:2;12153:18;;12147:25;12118:5;;-1:-1:-1;12181:32:1;12147:25;12181:32;:::i;12250:1030::-;12357:6;12352:3;12345:19;12327:3;12383:4;12424:2;12419:3;12415:12;12449:11;12476;12469:18;;12526:6;12523:1;12519:14;12512:5;12508:26;12496:38;;12557:5;12580:1;12590:664;12604:6;12601:1;12598:13;12590:664;;;12675:5;12669:4;12665:16;12660:3;12653:29;12734:6;12721:20;12824:2;12820:7;12812:5;12796:14;12792:26;12788:40;12768:18;12764:65;12754:93;;12843:1;12840;12833:12;12754:93;12875:30;;12934:21;;12984:18;12971:32;;12968:52;;;13016:1;13013;13006:12;12968:52;13067:8;13051:14;13047:29;13040:5;13036:41;13033:61;;;13090:1;13087;13080:12;13033:61;13115:59;13169:4;13159:8;13154:2;13145:7;13141:16;13115:59;:::i;:::-;13232:12;;;;13107:67;-1:-1:-1;;;13197:15:1;;;;12626:1;12619:9;12590:664;;;-1:-1:-1;13270:4:1;;12250:1030;-1:-1:-1;;;;;;;12250:1030:1:o;13285:266::-;13373:6;13368:3;13361:19;13425:6;13418:5;13411:4;13406:3;13402:14;13389:43;-1:-1:-1;13477:1:1;13452:16;;;13470:4;13448:27;;;13441:38;;;;13533:2;13512:15;;;-1:-1:-1;;13508:29:1;13499:39;;;13495:50;;13285:266::o;13556:257::-;13597:3;13635:5;13629:12;13662:6;13657:3;13650:19;13678:63;13734:6;13727:4;13722:3;13718:14;13711:4;13704:5;13700:16;13678:63;:::i;:::-;13795:2;13774:15;-1:-1:-1;;13770:29:1;13761:39;;;;13802:4;13757:50;;13556:257;-1:-1:-1;;13556:257:1:o;13818:271::-;14001:6;13993;13988:3;13975:33;13957:3;14027:16;;14052:13;;;14027:16;13818:271;-1:-1:-1;13818:271:1:o;14094:274::-;14223:3;14261:6;14255:13;14277:53;14323:6;14318:3;14311:4;14303:6;14299:17;14277:53;:::i;:::-;14346:16;;;;;14094:274;-1:-1:-1;;14094:274:1:o;14373:1104::-;14503:3;14532:1;14565:6;14559:13;14595:3;14617:1;14645:9;14641:2;14637:18;14627:28;;14705:2;14694:9;14690:18;14727;14717:61;;14771:4;14763:6;14759:17;14749:27;;14717:61;14797:2;14845;14837:6;14834:14;14814:18;14811:38;14808:165;;;-1:-1:-1;;;14872:33:1;;14928:4;14925:1;14918:15;14958:4;14879:3;14946:17;14808:165;14989:18;15016:104;;;;15134:1;15129:323;;;;14982:470;;15016:104;-1:-1:-1;;15049:24:1;;15037:37;;15094:16;;;;-1:-1:-1;15016:104:1;;15129:323;34842:1;34835:14;;;34879:4;34866:18;;15227:1;15241:165;15255:6;15252:1;15249:13;15241:165;;;15333:14;;15320:11;;;15313:35;15376:16;;;;15270:10;;15241:165;;;15245:3;;15435:6;15430:3;15426:16;15419:23;;14982:470;-1:-1:-1;15468:3:1;;14373:1104;-1:-1:-1;;;;;;;;14373:1104:1:o;16844:1697::-;17296:3;17309:22;;;17281:19;;17366:22;;;17248:4;17446:6;17419:3;17404:19;;17248:4;17480:258;17494:6;17491:1;17488:13;17480:258;;;-1:-1:-1;;;;;17559:26:1;17578:6;17559:26;:::i;:::-;17555:75;17543:88;;17654:4;17713:15;;;;17678:12;;;;17516:1;17509:9;17480:258;;;-1:-1:-1;17797:19:1;;;17757:4;17777:18;;;17770:47;;;;17851:19;;;17757:4;-1:-1:-1;17925:6:1;;17888:12;;17951:1;17961:301;17977:6;17972:3;17969:15;17961:301;;;18056:8;18043:22;18078:30;18102:5;18078:30;:::i;:::-;-1:-1:-1;;;;;18135:38:1;18121:53;;18235:17;;;;18196:14;;;;18003:1;17994:11;17961:301;;;17965:3;18309:9;18302:5;18298:21;18293:2;18282:9;18278:18;18271:49;18343:67;18404:5;18396:6;18388;18343:67;:::i;:::-;18329:81;;;;18458:9;18450:6;18446:22;18441:2;18430:9;18426:18;18419:50;18486:49;18528:6;18520;18512;18486:49;:::i;:::-;18478:57;16844:1697;-1:-1:-1;;;;;;;;;;;16844:1697:1:o;18546:681::-;18717:2;18769:21;;;18839:13;;18742:18;;;18861:22;;;18688:4;;18717:2;18940:15;;;;18914:2;18899:18;;;18688:4;18983:218;18997:6;18994:1;18991:13;18983:218;;;19062:13;;-1:-1:-1;;;;;19058:62:1;19046:75;;19176:15;;;;19141:12;;;;19019:1;19012:9;18983:218;;;-1:-1:-1;19218:3:1;;18546:681;-1:-1:-1;;;;;;18546:681:1:o;19232:505::-;19406:3;19391:19;;19395:9;19487:6;19364:4;19521:210;19535:4;19532:1;19529:11;19521:210;;;19608:13;;19601:21;19594:29;19582:42;;19647:4;19671:12;;;;19706:15;;;;19555:1;19548:9;19521:210;;;19525:3;;;19232:505;;;;:::o;19742:800::-;19902:4;19931:2;19971;19960:9;19956:18;20001:2;19990:9;19983:21;20024:6;20059;20053:13;20090:6;20082;20075:22;20128:2;20117:9;20113:18;20106:25;;20190:2;20180:6;20177:1;20173:14;20162:9;20158:30;20154:39;20140:53;;20228:2;20220:6;20216:15;20249:1;20259:254;20273:6;20270:1;20267:13;20259:254;;;20366:2;20362:7;20350:9;20342:6;20338:22;20334:36;20329:3;20322:49;20394:39;20426:6;20417;20411:13;20394:39;:::i;:::-;20384:49;-1:-1:-1;20491:12:1;;;;20456:15;;;;20295:1;20288:9;20259:254;;;-1:-1:-1;20530:6:1;;19742:800;-1:-1:-1;;;;;;;19742:800:1:o;23223:219::-;23372:2;23361:9;23354:21;23335:4;23392:44;23432:2;23421:9;23417:18;23409:6;23392:44;:::i;31252:687::-;31523:10;31560:15;;;31542:34;;31612:15;;;31607:2;31592:18;;31585:43;31664:15;;31659:2;31644:18;;31637:43;-1:-1:-1;;;;;31761:15:1;;;31756:2;31741:18;;31734:43;31814:15;;31808:3;31793:19;;31786:44;31867:3;31861;31846:19;;31839:32;;;31494:4;;31888:45;;31913:19;;31905:6;31888:45;:::i;:::-;31880:53;31252:687;-1:-1:-1;;;;;;;;31252:687:1:o;33769:521::-;33846:4;33852:6;33912:11;33899:25;34006:2;34002:7;33991:8;33975:14;33971:29;33967:43;33947:18;33943:68;33933:96;;34025:1;34022;34015:12;33933:96;34052:33;;34104:20;;;-1:-1:-1;34147:18:1;34136:30;;34133:50;;;34179:1;34176;34169:12;34133:50;34212:4;34200:17;;-1:-1:-1;34243:14:1;34239:27;;;34229:38;;34226:58;;;34280:1;34277;34270:12;34295:275;34366:2;34360:9;34431:2;34412:13;;-1:-1:-1;;34408:27:1;34396:40;;34466:18;34451:34;;34487:22;;;34448:62;34445:88;;;34513:18;;:::i;:::-;34549:2;34542:22;34295:275;;-1:-1:-1;34295:275:1:o;34575:186::-;34623:4;34656:18;34648:6;34645:30;34642:56;;;34678:18;;:::i;:::-;-1:-1:-1;34744:2:1;34723:15;-1:-1:-1;;34719:29:1;34750:4;34715:40;;34575:186::o;34895:244::-;34934:3;-1:-1:-1;;;;;35015:2:1;35012:1;35008:10;35045:2;35042:1;35038:10;35076:3;35072:2;35068:12;35063:3;35060:21;35057:47;;;35084:18;;:::i;:::-;35120:13;;34895:244;-1:-1:-1;;;;34895:244:1:o;35144:217::-;35184:1;35210;35200:132;;35254:10;35249:3;35245:20;35242:1;35235:31;35289:4;35286:1;35279:15;35317:4;35314:1;35307:15;35200:132;-1:-1:-1;35346:9:1;;35144:217::o;35366:168::-;35406:7;35472:1;35468;35464:6;35460:14;35457:1;35454:21;35449:1;35442:9;35435:17;35431:45;35428:71;;;35479:18;;:::i;:::-;-1:-1:-1;35519:9:1;;35366:168::o;35539:125::-;35579:4;35607:1;35604;35601:8;35598:34;;;35612:18;;:::i;:::-;-1:-1:-1;35649:9:1;;35539:125::o;35669:237::-;35708:4;-1:-1:-1;;;;;35813:10:1;;;;35783;;35835:12;;;35832:38;;;35850:18;;:::i;:::-;35887:13;;35669:237;-1:-1:-1;;;35669:237:1:o;35911:1269::-;36047:9;36081:18;36122:2;36114:6;36111:14;36108:40;;;36128:18;;:::i;:::-;36174:6;36171:1;36167:14;36200:4;36224:28;36248:2;36244;36240:11;36224:28;:::i;:::-;36286:19;;;36321:12;;;;36353:5;36389:14;36373;;;36370:34;36367:54;;;36417:1;36414;36407:12;36367:54;36439:1;36430:10;;36449:698;36463:6;36460:1;36457:13;36449:698;;;36544:3;36531:17;36580:2;36567:11;36564:19;36561:39;;;36596:1;36593;36586:12;36561:39;36623:23;;36688:14;36681:4;36673:13;;36669:34;36659:62;;36717:1;36714;36707:12;36659:62;36757:2;36744:16;36786:48;36802:31;36830:2;36802:31;:::i;36786:48::-;36861:2;36854:5;36847:17;36905:14;36900:2;36895;36891;36887:11;36883:20;36880:40;36877:60;;;36933:1;36930;36923:12;36877:60;36992:2;36987;36983;36979:11;36974:2;36967:5;36963:14;36950:45;37040:1;37019:14;;;37015:23;;37008:34;;;;37055:18;;-1:-1:-1;36485:1:1;36478:9;;;;;37093:12;;;;37125;;36449:698;;;-1:-1:-1;37169:5:1;35911:1269;-1:-1:-1;;;;;;;35911:1269:1:o;37185:258::-;37257:1;37267:113;37281:6;37278:1;37275:13;37267:113;;;37357:11;;;37351:18;37338:11;;;37331:39;37303:2;37296:10;37267:113;;;37398:6;37395:1;37392:13;37389:48;;;37433:1;37424:6;37419:3;37415:16;37408:27;37389:48;;37185:258;;;:::o;37448:380::-;37527:1;37523:12;;;;37570;;;37591:61;;37645:4;37637:6;37633:17;37623:27;;37591:61;37698:2;37690:6;37687:14;37667:18;37664:38;37661:161;;;37744:10;37739:3;37735:20;37732:1;37725:31;37779:4;37776:1;37769:15;37807:4;37804:1;37797:15;37661:161;;37448:380;;;:::o;37833:135::-;37872:3;-1:-1:-1;;37893:17:1;;37890:43;;;37913:18;;:::i;:::-;-1:-1:-1;37960:1:1;37949:13;;37833:135::o;37973:127::-;38034:10;38029:3;38025:20;38022:1;38015:31;38065:4;38062:1;38055:15;38089:4;38086:1;38079:15;38237:127;38298:10;38293:3;38289:20;38286:1;38279:31;38329:4;38326:1;38319:15;38353:4;38350:1;38343:15;38369:127;38430:10;38425:3;38421:20;38418:1;38411:31;38461:4;38458:1;38451:15;38485:4;38482:1;38475:15;38501:118;38587:5;38580:13;38573:21;38566:5;38563:32;38553:60;;38609:1;38606;38599:12;38624:137;-1:-1:-1;;;;;38702:5:1;38698:38;38691:5;38688:49;38678:77;;38751:1;38748;38741:12

Swarm Source

ipfs://074b5122b0dba43d33caac375506445943e32c725d22269ee6fc49478f47089b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.