Token SoulPower

 

Overview ERC-20

Price
$0.00 @ 0.000000 FTM
Fully Diluted Market Cap
Total Supply:
129,507,914.743849 SOUL

Holders:
2,272 addresses
Balance
2,030.549112028920647887 SOUL

Value
$7.04 ( ~15.5821 FTM) [0.0016%]
0x4cb93eb88cfc55f364e9300254003d34c28cac9d
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Soul is an algorithmic, cross-chain AMM and P2P lending protocol (on Fantom) built for traders, investors, developers, and visionaries seeking to unlock a universe of open financial applications.


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SoulPower

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-06
*/

/*--------------------------------------------------------------------------------------------------
====================================================================================================
*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~
~~~*~~~*~~~* SoulPower.sol |*||*| SPDX-License-Identifier: MIT |*||*| 0xBuns + DeGatchi ~~~*~~~*~~~*
*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~
====================================================================================================
----------------------------------------------------------------------------------------------------
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy//yNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNs-..-yNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNs-.oo.-sNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmo..sNNs..sNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmo.-sNMMNs-.omMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd+.:yNMMMMNy:`+dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh+`:yMMMMMMMMy:`+dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh/`/hMMMMMMMMMMh\`/hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy:./hMMMMMMMMMMMMd\.:hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy:.+dMMMMMMMMMMMMMMd+.:yNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNs-.omMMMMMMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMms-.omMMMMMMMMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMMMMMMNs-.omMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMMMMMMMMNs-.omMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd+.:yNMMMMMMMMMMMMMMMMMMMMMMMMNy:.+dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd/.:hMMMMMNMMMMMMMMMNNMMMMMMMMMMMh:`/dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh/`/hMMNdho/:-..--::::-..--:+shmMMMh\`/hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMy:`/dNho:-```-/shdmNNNmmdy+:.``.-/ydMd\`:hMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMNy:`/yy\.-/:.-odNMMMMMMMMMMMMNh/./y+../yy\`:yMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMNs-./:.-yhs:`+dMMMMMNdhyhhmNMMMMNs-.yhs:.-/\.-sNMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMsm.`:.:sdNd:`+dMMMdo.s.p.e.l.l.dMMMdo-.sNNh+-.:`msNMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMmo.`/.ymMMNo`:hMMMM-y.-sdmmds-.y-MMMMh`:hMMMdo:\`.omMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMd+../hMMMMMs.`yMMMMMm+/d(soul)b\+sMMMMMy`.sMMMMMh\-`+dmMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMd+..-+dMMMd/`+`uMMMMM.`/6\/.6.\/6\`.MOMMMy`-.dMMMd/`-.+dMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMh/./:`.ooyMMMy`-MOMMM`..`XOXOXOXO`..`MMMOM-`yMMMyoo.`:\.\hMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMh/./hNmy/.-ohNMy-.oNMMMNy/--:/:\:--\odMMMMh:`+mMNms\hNmy\.\hMhMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMNy:.+dMMMMmy+--/who-.omMMMMN.fantom.NMMMNmo.-who\--+yMMMMmd+.:yNMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMNy:.+dMMMMMMMNds/--/+:./yNMMMMMMMMMMMMMNdo-.//:--+ymMMMMMMMMb+.:yNMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMNs-.omMMMMMMMMMMMNdo/--.`.:shmNNNMMNNNdy+-``--:+ymNMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMms-.omMMMMMMMMMMMMMMMNmyo/-...-:/++++/:-..-:+shmNMMMMMMMMMMMMMMMmo.-smMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMmo.-sNMMMMMMMMMMMMMMMMMMMMNmdhso++////++sydmNMMMMMMMMMMMMMMMMMMMMMNs-.omMMMMMMMMMMMMMM
MMMMMMMMMMMMMm+.-yNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy-.+mMMMMMMMMMMMMM
MMMMMMMMMMMMd+`:yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy:`+dMMMMMMMMMMMM
MMMMMMMMMMMh/`/hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh\`/hMMMMMMMMMMM
MMMMMMMMMMh:`/dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd\`:hMMMMMMMMMM
MMMMMMMMNy:.+dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd+.:yNMMMMMMMM
MMMMMMNy-`:+seancessssssoooooooooooooooooooooooooooooooooooooooooooooooooooooooosscircle+:`-yNMMMMMM
MMMMMMMNs::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::sNMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
====================================================================================================
~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*~~~*
====================================================================================================
--------------------------------------------------------------------------------------------------*/

pragma solidity ^0.8.0;

interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) { return msg.sender; }
    function _msgData() internal view virtual returns (bytes calldata) { return msg.data; }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint) private _balances;
    mapping(address => mapping(address => uint)) private _allowances;
    uint private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) { return _name; }
    function symbol() public view virtual override returns (string memory) { return _symbol; }
    function decimals() public view virtual override returns (uint8) { return 18; }
    function totalSupply() public view virtual override returns (uint) { return _totalSupply; }
    function balanceOf(address account) public view virtual override returns (uint) { return _balances[account]; }
    function transfer(address recipient, uint amount) public virtual override returns (bool) { 
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, 'ERC20: transfer amount exceeds allowance');
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

    function increaseAllowance(address spender, uint addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint subtractedValue) public virtual returns (bool) {
        uint currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, 'ERC20: decreased allowance below zero');
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        return true;
    }

    function _transfer(address sender, address recipient, uint amount) internal virtual {
        require(sender != address(0), 'ERC20: transfer from the zero address');
        require(recipient != address(0), 'ERC20: transfer to the zero address');
        _beforeTokenTransfer(sender, recipient, amount);
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, 'ERC20: transfer amount exceeds balance');
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;
        
        emit Transfer(sender, recipient, amount);
        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint amount) internal virtual {
        require(account != address(0), 'ERC20: mint to the zero address');
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        _balances[account] += amount;
        
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint amount) internal virtual {
        require(account != address(0), 'ERC20: burn from the zero address');
        _beforeTokenTransfer(account, address(0), amount);
        uint accountBalance = _balances[account];
        require(accountBalance >= amount, 'ERC20: burn amount exceeds balance');
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;
        
        emit Transfer(account, address(0), amount);
        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint amount) internal virtual {
        require(owner != address(0), 'ERC20: approve from the zero address');
        require(spender != address(0), 'ERC20: approve to the zero address');
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(address from, address to, uint amount) internal virtual {}
    function _afterTokenTransfer(address from, address to, uint amount) internal virtual {}
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = '0123456789abcdef';

    function toString(uint value) internal pure returns (string memory) {
        if (value == 0) { return '0'; }
        uint temp = value;
        uint digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint value) internal pure returns (string memory) {
        if (value == 0) { return '0x00'; }
        uint temp = value;
        uint length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint value, uint length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = '0';
        buffer[1] = 'x';
        for (uint i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, 'Strings: hex length insufficient');
        return string(buffer);
    }
}

interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); }

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {  mapping(address => bool) members; bytes32 adminRole; }
    mapping(bytes32 => RoleData) private _roles;
    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(string(abi.encodePacked(
                'AccessControl: account ', Strings.toHexString(uint160(account), 20),
                ' is missing role ', Strings.toHexString(uint(role), 32)))
            );
        }
    }

    function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; }

    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), 'AccessControl: can only renounce roles for self');
        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

// ----------------------------------------------
//       SoulPower 2021 | 0xBuns + DeGatchi
// ----------------------------------------------

contract SoulPower is ERC20('SoulPower', 'SOUL'), AccessControl {

    address public supreme;     // supreme divine
    bytes32 public anunnaki;   // admin role
    bytes32 public thoth;     // minter role

    bytes32 public constant DOMAIN_TYPEHASH = // EIP-712 typehash for the contract's domain
        keccak256('EIP712Domain(string name,uint chainId,address verifyingContract)');
    bytes32 public constant DELEGATION_TYPEHASH = // EIP-712 typehash for the delegation struct used by the contract
        keccak256('Delegation(address delegatee,uint nonce,uint expiry)'); 

    // mappings for user accounts (address)
    mapping(address => mapping(uint => Checkpoint)) public checkpoints;     // vote checkpoints
    mapping(address => uint) public numCheckpoints;                       // checkpoint count
    mapping(address => uint) public nonces;                             // signing / validating states
    mapping(address => address) internal _delegates;                  // each accounts' delegate

    struct Checkpoint {  // checkpoint for marking number of votes from a given timestamp
        uint fromTime;
        uint votes;
    }

    event NewSupreme(address supreme);
    event Rethroned(bytes32 role, address oldAccount, address newAccount);
    event DelegateChanged( // emitted when an account changes its delegate
        address indexed delegator,
        address indexed fromDelegate,
        address indexed toDelegate
    );
    event DelegateVotesChanged( // emitted when a delegate account's vote balance changes
        address indexed delegate,
        uint previousBalance,
        uint newBalance
    );

    // restricted to the house of the role passed as an object to obey
    modifier obey(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    // channels the authority vested in anunnaki and thoth to the supreme
    constructor(address _supreme) {
        supreme = _supreme;
        anunnaki = keccak256('anunnaki'); // alpha supreme
        thoth = keccak256('thoth');      // god of wisdom and magic

        _divinationRitual(DEFAULT_ADMIN_ROLE, DEFAULT_ADMIN_ROLE, supreme); // supreme as root admin
        _divinationRitual(anunnaki, anunnaki, supreme);                    // anunnaki as admin of anunnaki
        _divinationRitual(thoth, anunnaki, supreme);                      // anunnaki as admin of thoth
    }

    // solidifies roles (internal)
    function _divinationRitual(bytes32 _role, bytes32 _adminRole, address _account) internal {
        _setupRole(_role, _account);
        _setRoleAdmin(_role, _adminRole);
    }

    // grants `role` to `newAccount` && renounces `role` from `oldAccount` (public role)
    function rethroneRitual(bytes32 role, address oldAccount, address newAccount) public obey(role) {
        require(oldAccount != newAccount, 'must be a new address');
        grantRole(role, newAccount);     // grants new account
        renounceRole(role, oldAccount); //  removes old account of role

        emit Rethroned(role, oldAccount, newAccount);
    }

    // updates supreme address (public anunnaki)
    function newSupreme(address _supreme) public obey(anunnaki) {
        require(supreme != _supreme, 'make a change, be the change');  //  prevents self-destruct
        rethroneRitual(DEFAULT_ADMIN_ROLE, supreme, _supreme);        //   empowers new supreme
        supreme = _supreme;

        emit NewSupreme(supreme);
    }

    // checks whether sender has divine role (public view)
    function hasDivineRole(bytes32 role) public view returns (bool) {
        return hasRole(role, msg.sender);
    }

    // mints soul power as the house of thoth so wills (public thoth)
    function mint(address _to, uint _amount) public obey(thoth) {
        _mint(_to, _amount);
        _moveDelegates(address(0), _delegates[_to], _amount);
    }

    // destroys `amount` tokens from the caller (public)
    function burn(uint amount) public {
        _burn(_msgSender(), amount);
        _moveDelegates(_delegates[_msgSender()], address(0), amount);
    }

    // destroys `amount` tokens from the `account` (public)
    function burnFrom(address account, uint amount) public {
        uint currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, 'burn amount exceeds allowance');

        _approve(account, _msgSender(), currentAllowance - amount);
        _burn(account, amount);
        _moveDelegates(_delegates[account], address(0), amount);
    }

    // returns the address delegated by a given delegator (external view)
    function delegates(address delegator) external view returns (address) {
        return _delegates[delegator];
    }

    // delegates to the `delegatee` (external)
    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    // delegates votes from signatory to `delegatee` (external)
    function delegateBySig(
        address delegatee,
        uint nonce,
        uint expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        bytes32 domainSeparator = keccak256(
            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name())), getChainId(), address(this))
        );

        bytes32 structHash = keccak256(
            abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry)
        );

        bytes32 digest = keccak256(
            abi.encodePacked('\x19\x01', domainSeparator, structHash)
        );

        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), 'delegateBySig: invalid signature');
        require(nonce == nonces[signatory]++, 'delegateBySig: invalid nonce');
        require(block.timestamp <= expiry, 'delegateBySig: signature expired');
        return _delegate(signatory, delegatee);
    }

    // returns current votes balance for `account` (external view)
    function getCurrentVotes(address account) external view returns (uint) {
        uint nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    // returns an account's prior vote count as of a given timestamp (external view)
    function getPriorVotes(address account, uint blockTimestamp) external view returns (uint) {
        require(blockTimestamp < block.timestamp, 'getPriorVotes: not yet determined');
        
        uint nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) { return 0; }

        // checks most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromTime <= blockTimestamp) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // checks implicit zero balance
        if (checkpoints[account][0].fromTime > blockTimestamp) {
            return 0;
        }

        uint lower = 0;
        uint upper = nCheckpoints - 1;
        while (upper > lower) {
            uint center = upper - (upper - lower) / 2; // avoids overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromTime == blockTimestamp) {
                return cp.votes;
            } else if (cp.fromTime < blockTimestamp) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }

        return checkpoints[account][lower].votes;
    }

    function safe256(uint n, string memory errorMessage) internal pure returns (uint) {
        require(n < type(uint).max, errorMessage);
        return uint(n);
    }

    function getChainId() internal view returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = _delegates[delegator];
        uint delegatorBalance = balanceOf(delegator); // balance of underlying SOUL (not scaled)
        _delegates[delegator] = delegatee;
        emit DelegateChanged(delegator, currentDelegate, delegatee);
        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(address srcRep, address dstRep, uint amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decreases old representative
                uint srcRepNum = numCheckpoints[srcRep];
                uint srcRepOld = srcRepNum > 0
                    ? checkpoints[srcRep][srcRepNum - 1].votes
                    : 0;
                uint srcRepNew = srcRepOld - amount;
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increases new representative
                uint dstRepNum = numCheckpoints[dstRep];
                uint dstRepOld = dstRepNum > 0
                    ? checkpoints[dstRep][dstRepNum - 1].votes
                    : 0;
                uint dstRepNew = dstRepOld + amount;
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(
        address delegatee,
        uint nCheckpoints,
        uint oldVotes,
        uint newVotes
    ) internal {
        uint blockTimestamp = safe256(block.timestamp, 'block timestamp exceeds 256 bits');

        if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromTime == blockTimestamp) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else { 
            checkpoints[delegatee][nCheckpoints] = Checkpoint(blockTimestamp, newVotes);
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_supreme","type":"address"}],"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":"value","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":false,"internalType":"address","name":"supreme","type":"address"}],"name":"NewSupreme","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":false,"internalType":"address","name":"oldAccount","type":"address"},{"indexed":false,"internalType":"address","name":"newAccount","type":"address"}],"name":"Rethroned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"anunnaki","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"checkpoints","outputs":[{"internalType":"uint256","name":"fromTime","type":"uint256"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"expiry","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":"delegator","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":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockTimestamp","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"hasDivineRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_supreme","type":"address"}],"name":"newSupreme","outputs":[],"stateMutability":"nonpayable","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":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"oldAccount","type":"address"},{"internalType":"address","name":"newAccount","type":"address"}],"name":"rethroneRitual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supreme","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thoth","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620048f5380380620048f5833981810160405281019062000037919062000503565b6040518060400160405280600981526020017f536f756c506f77657200000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f534f554c000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb9291906200043c565b508060049080519060200190620000d49291906200043c565b50505080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f45552d869603260d0572333b5da740bb4eaf623685d53936ee462b64a9a771826007819055507fdffb0b033b8033405f5fb07b08f48c89fa1b4a3d5d5a475c3e2b8df5fbd4da0d600881905550620001a16000801b6000801b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200021a60201b60201c565b620001da600754600754600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200021a60201b60201c565b62000213600854600754600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200021a60201b60201c565b50620005e2565b6200022c83826200024360201b60201c565b6200023e83836200025960201b60201c565b505050565b620002558282620002b760201b60201c565b5050565b806200026b83620003a960201b60201c565b837fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a48060056000848152602001908152602001600020600101819055505050565b620002c98282620003c960201b60201c565b620003a55760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200034a6200043460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600060056000838152602001908152602001600020600101549050919050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b8280546200044a9062000563565b90600052602060002090601f0160209004810192826200046e5760008555620004ba565b82601f106200048957805160ff1916838001178555620004ba565b82800160010185558215620004ba579182015b82811115620004b95782518255916020019190600101906200049c565b5b509050620004c99190620004cd565b5090565b5b80821115620004e8576000816000905550600101620004ce565b5090565b600081519050620004fd81620005c8565b92915050565b6000602082840312156200051657600080fd5b60006200052684828501620004ec565b91505092915050565b60006200053c8262000543565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200057c57607f821691505b6020821081141562000593576200059262000599565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620005d3816200052f565b8114620005df57600080fd5b50565b61430380620005f26000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80636fcfff4511610130578063a217fddf116100b8578063c3cda5201161007c578063c3cda520146106eb578063d547741f14610707578063dbaef9b014610723578063dd62ed3e14610753578063e7a324dc1461078357610227565b8063a217fddf1461061f578063a457c2d71461063d578063a6ed77ee1461066d578063a9059cbb1461068b578063b4b5ea57146106bb57610227565b806379cc6790116100ff57806379cc6790146105695780637ecebe001461058557806391d14854146105b557806395d89b41146105e55780639aeb37271461060357610227565b80636fcfff45146104bd57806370a08231146104ed578063743d507c1461051d578063782d6fe11461053957610227565b80632f2ff15d116101b357806340c10f191161018257806340c10f191461041b57806342966c681461043757806348f8bfea14610453578063587cde1e146104715780635c19a95c146104a157610227565b80632f2ff15d14610395578063313ce567146103b157806336568abe146103cf57806339509351146103eb57610227565b8063155dfb50116101fa578063155dfb50146102db57806318160ddd146102f957806320606b701461031757806323b872dd14610335578063248a9ca31461036557610227565b806301ffc9a71461022c57806306fdde031461025c578063095ea7b31461027a5780630cdfebfa146102aa575b600080fd5b61024660048036038101906102419190613122565b6107a1565b60405161025391906135ce565b60405180910390f35b61026461081b565b604051610271919061370a565b60405180910390f35b610294600480360381019061028f9190612fa9565b6108ad565b6040516102a191906135ce565b60405180910390f35b6102c460048036038101906102bf9190612fa9565b6108cb565b6040516102d29291906139a7565b60405180910390f35b6102e36108fc565b6040516102f091906135e9565b60405180910390f35b610301610902565b60405161030e919061398c565b60405180910390f35b61031f61090c565b60405161032c91906135e9565b60405180910390f35b61034f600480360381019061034a9190612f5a565b610930565b60405161035c91906135ce565b60405180910390f35b61037f600480360381019061037a919061306e565b610a31565b60405161038c91906135e9565b60405180910390f35b6103af60048036038101906103aa9190613097565b610a51565b005b6103b9610a7a565b6040516103c691906139d0565b60405180910390f35b6103e960048036038101906103e49190613097565b610a83565b005b61040560048036038101906104009190612fa9565b610b06565b60405161041291906135ce565b60405180910390f35b61043560048036038101906104309190612fa9565b610bb2565b005b610451600480360381019061044c919061314b565b610c40565b005b61045b610cc6565b60405161046891906135b3565b60405180910390f35b61048b60048036038101906104869190612ef5565b610cec565b60405161049891906135b3565b60405180910390f35b6104bb60048036038101906104b69190612ef5565b610d55565b005b6104d760048036038101906104d29190612ef5565b610d62565b6040516104e4919061398c565b60405180910390f35b61050760048036038101906105029190612ef5565b610d7a565b604051610514919061398c565b60405180910390f35b610537600480360381019061053291906130d3565b610dc2565b005b610553600480360381019061054e9190612fa9565b610e98565b604051610560919061398c565b60405180910390f35b610583600480360381019061057e9190612fa9565b6111c3565b005b61059f600480360381019061059a9190612ef5565b6112b2565b6040516105ac919061398c565b60405180910390f35b6105cf60048036038101906105ca9190613097565b6112ca565b6040516105dc91906135ce565b60405180910390f35b6105ed611335565b6040516105fa919061370a565b60405180910390f35b61061d60048036038101906106189190612ef5565b6113c7565b005b61062761153a565b60405161063491906135e9565b60405180910390f35b61065760048036038101906106529190612fa9565b611541565b60405161066491906135ce565b60405180910390f35b610675611635565b60405161068291906135e9565b60405180910390f35b6106a560048036038101906106a09190612fa9565b61163b565b6040516106b291906135ce565b60405180910390f35b6106d560048036038101906106d09190612ef5565b611659565b6040516106e2919061398c565b60405180910390f35b61070560048036038101906107009190612fe5565b611716565b005b610721600480360381019061071c9190613097565b6119ab565b005b61073d6004803603810190610738919061306e565b6119d4565b60405161074a91906135ce565b60405180910390f35b61076d60048036038101906107689190612f1e565b6119e7565b60405161077a919061398c565b60405180910390f35b61078b611a6e565b60405161079891906135e9565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610814575061081382611a92565b5b9050919050565b60606003805461082a90613c0f565b80601f016020809104026020016040519081016040528092919081815260200182805461085690613c0f565b80156108a35780601f10610878576101008083540402835291602001916108a3565b820191906000526020600020905b81548152906001019060200180831161088657829003601f168201915b5050505050905090565b60006108c16108ba611afc565b8484611b04565b6001905092915050565b6009602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b60075481565b6000600254905090565b7f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3581565b600061093d848484611ccf565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610988611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff9061382c565b60405180910390fd5b610a2585610a14611afc565b8584610a209190613af3565b611b04565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b610a5a82610a31565b610a6b81610a66611afc565b611f59565b610a758383611ff6565b505050565b60006012905090565b610a8b611afc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef9061394c565b60405180910390fd5b610b0282826120d7565b5050565b6000610ba8610b13611afc565b848460016000610b21611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ba39190613a12565b611b04565b6001905092915050565b600854610bc681610bc1611afc565b611f59565b610bd083836121b9565b610c3b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612319565b505050565b610c51610c4b611afc565b82612576565b610cc3600c6000610c60611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600083612319565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d5f3382612756565b50565b600a6020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82610dd481610dcf611afc565b611f59565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a9061384c565b60405180910390fd5b610e4d8483610a51565b610e578484610a83565b7f61d8718e0a8cd948a81621b18092fb2d08d9c1d961369cbf16aab6dc46e3e4b1848484604051610e8a93929190613604565b60405180910390a150505050565b6000428210610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed39061372c565b60405180910390fd5b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610f335760009150506111bd565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610f829190613af3565b8152602001908152602001600020600001541161100157600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610fe79190613af3565b8152602001908152602001600020600101549150506111bd565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008081526020019081526020016000206000015411156110665760009150506111bd565b6000806001836110769190613af3565b90505b81811115611163576000600283836110919190613af3565b61109b9190613a68565b826110a69190613af3565b90506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090508681600001511415611138578060200151955050505050506111bd565b868160000151101561114c5781935061115c565b6001826111599190613af3565b92505b5050611079565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206001015493505050505b92915050565b60006111d6836111d1611afc565b6119e7565b90508181101561121b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112129061390c565b60405180910390fd5b61123883611227611afc565b84846112339190613af3565b611b04565b6112428383612576565b6112ad600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600084612319565b505050565b600b6020528060005260406000206000915090505481565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805461134490613c0f565b80601f016020809104026020016040519081016040528092919081815260200182805461137090613c0f565b80156113bd5780601f10611392576101008083540402835291602001916113bd565b820191906000526020600020905b8154815290600101906020018083116113a057829003601f168201915b5050505050905090565b6007546113db816113d6611afc565b611f59565b8173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561146c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611463906138cc565b60405180910390fd5b61149c6000801b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610dc2565b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1c881cf11671f3ab7e97a339a15f6a1d287b427944d2d36d393c0846b1d35757600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161152e91906135b3565b60405180910390a15050565b6000801b81565b60008060016000611550611afc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561160d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116049061392c565b60405180910390fd5b61162a611618611afc565b8585846116259190613af3565b611b04565b600191505092915050565b60085481565b600061164f611648611afc565b8484611ccf565b6001905092915050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116116ad57600061170e565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001836116fb9190613af3565b8152602001908152602001600020600101545b915050919050565b60007f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3561174161081b565b805190602001206117506128c7565b306040516020016117649493929190613680565b60405160208183030381529060405280519060200120905060007f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc8888886040516020016117b5949392919061363b565b604051602081830303815290604052805190602001209050600082826040516020016117e2929190613542565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161181f94939291906136c5565b6020604051602081039080840390855afa158015611841573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b4906137cc565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061190d90613c41565b919050558914611952576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119499061386c565b60405180910390fd5b87421115611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c9061380c565b60405180910390fd5b61199f818b612756565b50505050505050505050565b6119b482610a31565b6119c5816119c0611afc565b611f59565b6119cf83836120d7565b505050565b60006119e082336112ca565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6b906138ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb906137ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cc2919061398c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906138ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da69061376c565b60405180910390fd5b611dba8383836128d4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e37906137ec565b60405180910390fd5b8181611e4c9190613af3565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611edc9190613a12565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f40919061398c565b60405180910390a3611f538484846128d9565b50505050565b611f6382826112ca565b611ff257611f888173ffffffffffffffffffffffffffffffffffffffff1660146128de565b611f968360001c60206128de565b604051602001611fa7929190613579565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe9919061370a565b60405180910390fd5b5050565b61200082826112ca565b6120d35760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612078611afc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6120e182826112ca565b156121b55760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061215a611afc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122209061396c565b60405180910390fd5b612235600083836128d4565b80600260008282546122479190613a12565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461229c9190613a12565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612301919061398c565b60405180910390a3612315600083836128d9565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123555750600081115b1561257157600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612465576000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116123e2576000612443565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846124309190613af3565b8152602001908152602001600020600101545b9050600083826124539190613af3565b905061246186848484612bd8565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612570576000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116124ed57600061254e565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461253b9190613af3565b8152602001908152602001600020600101545b90506000838261255e9190613a12565b905061256c85848484612bd8565b5050505b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125dd9061388c565b60405180910390fd5b6125f2826000836128d4565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f9061378c565b60405180910390fd5b81816126849190613af3565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546126d89190613af3565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161273d919061398c565b60405180910390a3612751836000846128d9565b505050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006127c584610d7a565b905082600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46128c1828483612319565b50505050565b6000804690508091505090565b505050565b505050565b6060600060028360026128f19190613a99565b6128fb9190613a12565b67ffffffffffffffff81111561293a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561296c5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106129ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612a54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612a949190613a99565b612a9e9190613a12565b90505b6001811115612b8a577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612b06577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612b43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612b8390613be5565b9050612aa1565b5060008414612bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc59061374c565b60405180910390fd5b8091505092915050565b6000612c19426040518060400160405280602081526020017f626c6f636b2074696d657374616d702065786365656473203235362062697473815250612e1b565b9050600084118015612c89575080600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612c759190613af3565b815260200190815260200160002060000154145b15612cf75781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612cdd9190613af3565b815260200190815260200160002060010181905550612dc4565b604051806040016040528082815260200183815250600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000820151816000015560208201518160010155905050600184612d809190613a12565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612e0c9291906139a7565b60405180910390a25050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83108290612e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e79919061370a565b60405180910390fd5b5082905092915050565b600081359050612e9b8161425a565b92915050565b600081359050612eb081614271565b92915050565b600081359050612ec581614288565b92915050565b600081359050612eda8161429f565b92915050565b600081359050612eef816142b6565b92915050565b600060208284031215612f0757600080fd5b6000612f1584828501612e8c565b91505092915050565b60008060408385031215612f3157600080fd5b6000612f3f85828601612e8c565b9250506020612f5085828601612e8c565b9150509250929050565b600080600060608486031215612f6f57600080fd5b6000612f7d86828701612e8c565b9350506020612f8e86828701612e8c565b9250506040612f9f86828701612ecb565b9150509250925092565b60008060408385031215612fbc57600080fd5b6000612fca85828601612e8c565b9250506020612fdb85828601612ecb565b9150509250929050565b60008060008060008060c08789031215612ffe57600080fd5b600061300c89828a01612e8c565b965050602061301d89828a01612ecb565b955050604061302e89828a01612ecb565b945050606061303f89828a01612ee0565b935050608061305089828a01612ea1565b92505060a061306189828a01612ea1565b9150509295509295509295565b60006020828403121561308057600080fd5b600061308e84828501612ea1565b91505092915050565b600080604083850312156130aa57600080fd5b60006130b885828601612ea1565b92505060206130c985828601612e8c565b9150509250929050565b6000806000606084860312156130e857600080fd5b60006130f686828701612ea1565b935050602061310786828701612e8c565b925050604061311886828701612e8c565b9150509250925092565b60006020828403121561313457600080fd5b600061314284828501612eb6565b91505092915050565b60006020828403121561315d57600080fd5b600061316b84828501612ecb565b91505092915050565b61317d81613b27565b82525050565b61318c81613b39565b82525050565b61319b81613b45565b82525050565b6131b26131ad82613b45565b613c8a565b82525050565b60006131c3826139eb565b6131cd81856139f6565b93506131dd818560208601613bb2565b6131e681613d21565b840191505092915050565b60006131fc826139eb565b6132068185613a07565b9350613216818560208601613bb2565b80840191505092915050565b600061322f6021836139f6565b915061323a82613d32565b604082019050919050565b60006132526020836139f6565b915061325d82613d81565b602082019050919050565b60006132756023836139f6565b915061328082613daa565b604082019050919050565b60006132986022836139f6565b91506132a382613df9565b604082019050919050565b60006132bb6022836139f6565b91506132c682613e48565b604082019050919050565b60006132de600283613a07565b91506132e982613e97565b600282019050919050565b60006133016020836139f6565b915061330c82613ec0565b602082019050919050565b60006133246026836139f6565b915061332f82613ee9565b604082019050919050565b60006133476020836139f6565b915061335282613f38565b602082019050919050565b600061336a6028836139f6565b915061337582613f61565b604082019050919050565b600061338d6015836139f6565b915061339882613fb0565b602082019050919050565b60006133b0601c836139f6565b91506133bb82613fd9565b602082019050919050565b60006133d36021836139f6565b91506133de82614002565b604082019050919050565b60006133f66025836139f6565b915061340182614051565b604082019050919050565b6000613419601c836139f6565b9150613424826140a0565b602082019050919050565b600061343c6024836139f6565b9150613447826140c9565b604082019050919050565b600061345f601d836139f6565b915061346a82614118565b602082019050919050565b6000613482601783613a07565b915061348d82614141565b601782019050919050565b60006134a56025836139f6565b91506134b08261416a565b604082019050919050565b60006134c8601183613a07565b91506134d3826141b9565b601182019050919050565b60006134eb602f836139f6565b91506134f6826141e2565b604082019050919050565b600061350e601f836139f6565b915061351982614231565b602082019050919050565b61352d81613b9b565b82525050565b61353c81613ba5565b82525050565b600061354d826132d1565b915061355982856131a1565b60208201915061356982846131a1565b6020820191508190509392505050565b600061358482613475565b915061359082856131f1565b915061359b826134bb565b91506135a782846131f1565b91508190509392505050565b60006020820190506135c86000830184613174565b92915050565b60006020820190506135e36000830184613183565b92915050565b60006020820190506135fe6000830184613192565b92915050565b60006060820190506136196000830186613192565b6136266020830185613174565b6136336040830184613174565b949350505050565b60006080820190506136506000830187613192565b61365d6020830186613174565b61366a6040830185613524565b6136776060830184613524565b95945050505050565b60006080820190506136956000830187613192565b6136a26020830186613192565b6136af6040830185613524565b6136bc6060830184613174565b95945050505050565b60006080820190506136da6000830187613192565b6136e76020830186613533565b6136f46040830185613192565b6137016060830184613192565b95945050505050565b6000602082019050818103600083015261372481846131b8565b905092915050565b6000602082019050818103600083015261374581613222565b9050919050565b6000602082019050818103600083015261376581613245565b9050919050565b6000602082019050818103600083015261378581613268565b9050919050565b600060208201905081810360008301526137a58161328b565b9050919050565b600060208201905081810360008301526137c5816132ae565b9050919050565b600060208201905081810360008301526137e5816132f4565b9050919050565b6000602082019050818103600083015261380581613317565b9050919050565b600060208201905081810360008301526138258161333a565b9050919050565b600060208201905081810360008301526138458161335d565b9050919050565b6000602082019050818103600083015261386581613380565b9050919050565b60006020820190508181036000830152613885816133a3565b9050919050565b600060208201905081810360008301526138a5816133c6565b9050919050565b600060208201905081810360008301526138c5816133e9565b9050919050565b600060208201905081810360008301526138e58161340c565b9050919050565b600060208201905081810360008301526139058161342f565b9050919050565b6000602082019050818103600083015261392581613452565b9050919050565b6000602082019050818103600083015261394581613498565b9050919050565b60006020820190508181036000830152613965816134de565b9050919050565b6000602082019050818103600083015261398581613501565b9050919050565b60006020820190506139a16000830184613524565b92915050565b60006040820190506139bc6000830185613524565b6139c96020830184613524565b9392505050565b60006020820190506139e56000830184613533565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000613a1d82613b9b565b9150613a2883613b9b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a5d57613a5c613c94565b5b828201905092915050565b6000613a7382613b9b565b9150613a7e83613b9b565b925082613a8e57613a8d613cc3565b5b828204905092915050565b6000613aa482613b9b565b9150613aaf83613b9b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ae857613ae7613c94565b5b828202905092915050565b6000613afe82613b9b565b9150613b0983613b9b565b925082821015613b1c57613b1b613c94565b5b828203905092915050565b6000613b3282613b7b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613bd0578082015181840152602081019050613bb5565b83811115613bdf576000848401525b50505050565b6000613bf082613b9b565b91506000821415613c0457613c03613c94565b5b600182039050919050565b60006002820490506001821680613c2757607f821691505b60208210811415613c3b57613c3a613cf2565b5b50919050565b6000613c4c82613b9b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c7f57613c7e613c94565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f6d7573742062652061206e657720616464726573730000000000000000000000600082015250565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6d616b652061206368616e67652c20626520746865206368616e676500000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6275726e20616d6f756e74206578636565647320616c6c6f77616e6365000000600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61426381613b27565b811461426e57600080fd5b50565b61427a81613b45565b811461428557600080fd5b50565b61429181613b4f565b811461429c57600080fd5b50565b6142a881613b9b565b81146142b357600080fd5b50565b6142bf81613ba5565b81146142ca57600080fd5b5056fea2646970667358221220821d296d9e083956047e769287e96f6b44d9183d3a145161fde297a69d49e3ab64736f6c6343000804003300000000000000000000000081dd37687c74df8f957a370a9a4435d873f5e5a9

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

00000000000000000000000081dd37687c74df8f957a370a9a4435d873f5e5a9

-----Decoded View---------------
Arg [0] : _supreme (address): 0x81dd37687c74df8f957a370a9a4435d873f5e5a9

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000081dd37687c74df8f957a370a9a4435d873f5e5a9


Deployed ByteCode Sourcemap

16142:10001:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13828:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6917:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7740:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16783:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;16266:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7190:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16360:174;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7914:412;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14543:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14660:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7105:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14972:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8334:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19922:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20149:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16215:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20831:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21004:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16880:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7287:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18905:367;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22495:1192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20369:379;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16975:38;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14040:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7009:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19330:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13365:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8554:369;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16312:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7403:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22183:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21181:926;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14815:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19728:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7584:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16541:187;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13828:204;13913:4;13952:32;13937:47;;;:11;:47;;;;:87;;;;13988:36;14012:11;13988:23;:36::i;:::-;13937:87;13930:94;;13828:204;;;:::o;6917:86::-;6971:13;6995:5;6988:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6917:86;:::o;7740:166::-;7820:4;7837:39;7846:12;:10;:12::i;:::-;7860:7;7869:6;7837:8;:39::i;:::-;7894:4;7887:11;;7740:166;;;;:::o;16783:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16266:23::-;;;;:::o;7190:91::-;7251:4;7266:12;;7259:19;;7190:91;:::o;16360:174::-;16457:77;16360:174;:::o;7914:412::-;8017:4;8034:36;8044:6;8052:9;8063:6;8034:9;:36::i;:::-;8081:21;8105:11;:19;8117:6;8105:19;;;;;;;;;;;;;;;:33;8125:12;:10;:12::i;:::-;8105:33;;;;;;;;;;;;;;;;8081:57;;8177:6;8157:16;:26;;8149:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8239:57;8248:6;8256:12;:10;:12::i;:::-;8289:6;8270:16;:25;;;;:::i;:::-;8239:8;:57::i;:::-;8314:4;8307:11;;;7914:412;;;;;:::o;14543:109::-;14609:7;14627:6;:12;14634:4;14627:12;;;;;;;;;;;:22;;;14620:29;;14543:109;;;:::o;14660:147::-;14743:18;14756:4;14743:12;:18::i;:::-;13770:30;13781:4;13787:12;:10;:12::i;:::-;13770:10;:30::i;:::-;14774:25:::1;14785:4;14791:7;14774:10;:25::i;:::-;14660:147:::0;;;:::o;7105:79::-;7163:5;7179:2;7172:9;;7105:79;:::o;14972:216::-;15079:12;:10;:12::i;:::-;15068:23;;:7;:23;;;15060:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;15154:26;15166:4;15172:7;15154:11;:26::i;:::-;14972:216;;:::o;8334:212::-;8419:4;8436:80;8445:12;:10;:12::i;:::-;8459:7;8505:10;8468:11;:25;8480:12;:10;:12::i;:::-;8468:25;;;;;;;;;;;;;;;:34;8494:7;8468:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8436:8;:80::i;:::-;8534:4;8527:11;;8334:212;;;;:::o;19922:161::-;19975:5;;17938:30;17949:4;17955:12;:10;:12::i;:::-;17938:10;:30::i;:::-;19993:19:::1;19999:3;20004:7;19993:5;:19::i;:::-;20023:52;20046:1;20050:10;:15;20061:3;20050:15;;;;;;;;;;;;;;;;;;;;;;;;;20067:7;20023:14;:52::i;:::-;19922:161:::0;;;:::o;20149:151::-;20194:27;20200:12;:10;:12::i;:::-;20214:6;20194:5;:27::i;:::-;20232:60;20247:10;:24;20258:12;:10;:12::i;:::-;20247:24;;;;;;;;;;;;;;;;;;;;;;;;;20281:1;20285:6;20232:14;:60::i;:::-;20149:151;:::o;16215:22::-;;;;;;;;;;;;;:::o;20831:117::-;20892:7;20919:10;:21;20930:9;20919:21;;;;;;;;;;;;;;;;;;;;;;;;;20912:28;;20831:117;;;:::o;21004:104::-;21068:32;21078:10;21090:9;21068;:32::i;:::-;21004:104;:::o;16880:46::-;;;;;;;;;;;;;;;;;:::o;7287:110::-;7361:4;7376:9;:18;7386:7;7376:18;;;;;;;;;;;;;;;;7369:25;;7287:110;;;:::o;18905:367::-;18995:4;17938:30;17949:4;17955:12;:10;:12::i;:::-;17938:10;:30::i;:::-;19034:10:::1;19020:24;;:10;:24;;;;19012:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;19081:27;19091:4;19097:10;19081:9;:27::i;:::-;19145:30;19158:4;19164:10;19145:12;:30::i;:::-;19225:39;19235:4;19241:10;19253;19225:39;;;;;;;;:::i;:::-;;;;;;;;18905:367:::0;;;;:::o;22495:1192::-;22579:4;22621:15;22604:14;:32;22596:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;22695:17;22715:14;:23;22730:7;22715:23;;;;;;;;;;;;;;;;22695:43;;22769:1;22753:12;:17;22749:36;;;22781:1;22774:8;;;;;22749:36;22891:14;22840:11;:20;22852:7;22840:20;;;;;;;;;;;;;;;:38;22876:1;22861:12;:16;;;;:::i;:::-;22840:38;;;;;;;;;;;:47;;;:65;22836:149;;22929:11;:20;22941:7;22929:20;;;;;;;;;;;;;;;:38;22965:1;22950:12;:16;;;;:::i;:::-;22929:38;;;;;;;;;;;:44;;;22922:51;;;;;22836:149;23077:14;23042:11;:20;23054:7;23042:20;;;;;;;;;;;;;;;:23;23063:1;23042:23;;;;;;;;;;;:32;;;:49;23038:90;;;23115:1;23108:8;;;;;23038:90;23140:10;23165;23193:1;23178:12;:16;;;;:::i;:::-;23165:29;;23205:422;23220:5;23212;:13;23205:422;;;23242:11;23282:1;23273:5;23265;:13;;;;:::i;:::-;23264:19;;;;:::i;:::-;23256:5;:27;;;;:::i;:::-;23242:41;;23317:20;23340:11;:20;23352:7;23340:20;;;;;;;;;;;;;;;:28;23361:6;23340:28;;;;;;;;;;;23317:51;;;;;;;;;;;;;;;;;;;;;;;;;;;23402:14;23387:2;:11;;;:29;23383:233;;;23444:2;:8;;;23437:15;;;;;;;;;23383:233;23492:14;23478:2;:11;;;:28;23474:142;;;23535:6;23527:14;;23474:142;;;23599:1;23590:6;:10;;;;:::i;:::-;23582:18;;23474:142;23205:422;;;;;23646:11;:20;23658:7;23646:20;;;;;;;;;;;;;;;:27;23667:5;23646:27;;;;;;;;;;;:33;;;23639:40;;;;;22495:1192;;;;;:::o;20369:379::-;20435:21;20459:32;20469:7;20478:12;:10;:12::i;:::-;20459:9;:32::i;:::-;20435:56;;20530:6;20510:16;:26;;20502:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20583:58;20592:7;20601:12;:10;:12::i;:::-;20634:6;20615:16;:25;;;;:::i;:::-;20583:8;:58::i;:::-;20652:22;20658:7;20667:6;20652:5;:22::i;:::-;20685:55;20700:10;:19;20711:7;20700:19;;;;;;;;;;;;;;;;;;;;;;;;;20729:1;20733:6;20685:14;:55::i;:::-;20369:379;;;:::o;16975:38::-;;;;;;;;;;;;;;;;;:::o;14040:139::-;14118:4;14142:6;:12;14149:4;14142:12;;;;;;;;;;;:20;;:29;14163:7;14142:29;;;;;;;;;;;;;;;;;;;;;;;;;14135:36;;14040:139;;;;:::o;7009:90::-;7065:13;7089:7;7082:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7009:90;:::o;19330:330::-;19380:8;;17938:30;17949:4;17955:12;:10;:12::i;:::-;17938:10;:30::i;:::-;19420:8:::1;19409:19;;:7;;;;;;;;;;;:19;;;;19401:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19500:53;13410:4;19515:18:::0;::::1;19535:7;;;;;;;;;;;19544:8;19500:14;:53::i;:::-;19607:8;19597:7;;:18;;;;;;;;;;;;;;;;;;19633:19;19644:7;;;;;;;;;;;19633:19;;;;;;:::i;:::-;;;;;;;;19330:330:::0;;:::o;13365:49::-;13410:4;13365:49;;;:::o;8554:369::-;8644:4;8661:21;8685:11;:25;8697:12;:10;:12::i;:::-;8685:25;;;;;;;;;;;;;;;:34;8711:7;8685:34;;;;;;;;;;;;;;;;8661:58;;8758:15;8738:16;:35;;8730:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8826:67;8835:12;:10;:12::i;:::-;8849:7;8877:15;8858:16;:34;;;;:::i;:::-;8826:8;:67::i;:::-;8911:4;8904:11;;;8554:369;;;;:::o;16312:20::-;;;;:::o;7403:173::-;7486:4;7504:42;7514:12;:10;:12::i;:::-;7528:9;7539:6;7504:9;:42::i;:::-;7564:4;7557:11;;7403:173;;;;:::o;22183:218::-;22248:4;22265:17;22285:14;:23;22300:7;22285:23;;;;;;;;;;;;;;;;22265:43;;22341:1;22326:12;:16;:67;;22392:1;22326:67;;;22345:11;:20;22357:7;22345:20;;;;;;;;;;;;;;;:38;22381:1;22366:12;:16;;;;:::i;:::-;22345:38;;;;;;;;;;;:44;;;22326:67;22319:74;;;22183:218;;;:::o;21181:926::-;21360:23;16457:77;21454:6;:4;:6::i;:::-;21438:24;;;;;;21464:12;:10;:12::i;:::-;21486:4;21410:82;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21386:117;;;;;;21360:143;;21516:18;16663:65;21593:9;21604:5;21611:6;21561:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21537:92;;;;;;21516:113;;21642:14;21712:15;21729:10;21683:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21659:92;;;;;;21642:109;;21764:17;21784:26;21794:6;21802:1;21805;21808;21784:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21764:46;;21850:1;21829:23;;:9;:23;;;;21821:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21917:6;:17;21924:9;21917:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;21908:5;:28;21900:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22007:6;21988:15;:25;;21980:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22068:31;22078:9;22089;22068;:31::i;:::-;22061:38;;;;21181:926;;;;;;:::o;14815:149::-;14899:18;14912:4;14899:12;:18::i;:::-;13770:30;13781:4;13787:12;:10;:12::i;:::-;13770:10;:30::i;:::-;14930:26:::1;14942:4;14948:7;14930:11;:26::i;:::-;14815:149:::0;;;:::o;19728:115::-;19786:4;19810:25;19818:4;19824:10;19810:7;:25::i;:::-;19803:32;;19728:115;;;:::o;7584:148::-;7673:4;7697:11;:18;7709:5;7697:18;;;;;;;;;;;;;;;:27;7716:7;7697:27;;;;;;;;;;;;;;;;7690:34;;7584:148;;;;:::o;16541:187::-;16663:65;16541:187;:::o;12609:157::-;12694:4;12733:25;12718:40;;;:11;:40;;;;12711:47;;12609:157;;;:::o;6342:84::-;6395:7;6413:10;6406:17;;6342:84;:::o;10565:341::-;10681:1;10664:19;;:5;:19;;;;10656:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10762:1;10743:21;;:7;:21;;;;10735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10844:6;10814:11;:18;10826:5;10814:18;;;;;;;;;;;;;;;:27;10833:7;10814:27;;;;;;;;;;;;;;;:36;;;;10882:7;10866:32;;10875:5;10866:32;;;10891:6;10866:32;;;;;;:::i;:::-;;;;;;;;10565:341;;;:::o;8931:659::-;9052:1;9034:20;;:6;:20;;;;9026:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9136:1;9115:23;;:9;:23;;;;9107:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9189:47;9210:6;9218:9;9229:6;9189:20;:47::i;:::-;9247:18;9268:9;:17;9278:6;9268:17;;;;;;;;;;;;;;;;9247:38;;9321:6;9304:13;:23;;9296:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;9417:6;9401:13;:22;;;;:::i;:::-;9381:9;:17;9391:6;9381:17;;;;;;;;;;;;;;;:42;;;;9458:6;9434:9;:20;9444:9;9434:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9507:9;9490:35;;9499:6;9490:35;;;9518:6;9490:35;;;;;;:::i;:::-;;;;;;;;9536:46;9556:6;9564:9;9575:6;9536:19;:46::i;:::-;8931:659;;;;:::o;14187:348::-;14268:22;14276:4;14282:7;14268;:22::i;:::-;14263:265;;14383:41;14411:7;14383:41;;14421:2;14383:19;:41::i;:::-;14464:35;14489:4;14484:10;;14496:2;14464:19;:35::i;:::-;14321:179;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14307:209;;;;;;;;;;;:::i;:::-;;;;;;;;14263:265;14187:348;;:::o;15519:229::-;15594:22;15602:4;15608:7;15594;:22::i;:::-;15589:152;;15665:4;15633:6;:12;15640:4;15633:12;;;;;;;;;;;:20;;:29;15654:7;15633:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;15716:12;:10;:12::i;:::-;15689:40;;15707:7;15689:40;;15701:4;15689:40;;;;;;;;;;15589:152;15519:229;;:::o;15756:230::-;15831:22;15839:4;15845:7;15831;:22::i;:::-;15827:152;;;15902:5;15870:6;:12;15877:4;15870:12;;;;;;;;;;;:20;;:29;15891:7;15870:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;15954:12;:10;:12::i;:::-;15927:40;;15945:7;15927:40;;15939:4;15927:40;;;;;;;;;;15827:152;15756:230;;:::o;9598:400::-;9698:1;9679:21;;:7;:21;;;;9671:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;9747:49;9776:1;9780:7;9789:6;9747:20;:49::i;:::-;9823:6;9807:12;;:22;;;;;;;:::i;:::-;;;;;;;;9862:6;9840:9;:18;9850:7;9840:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;9915:7;9894:37;;9911:1;9894:37;;;9924:6;9894:37;;;;;;:::i;:::-;;;;;;;;9942:48;9970:1;9974:7;9983:6;9942:19;:48::i;:::-;9598:400;;:::o;24451:1008::-;24554:6;24544:16;;:6;:16;;;;:30;;;;;24573:1;24564:6;:10;24544:30;24540:912;;;24613:1;24595:20;;:6;:20;;;24591:417;;24685:14;24702;:22;24717:6;24702:22;;;;;;;;;;;;;;;;24685:39;;24743:14;24772:1;24760:9;:13;:102;;24861:1;24760:102;;;24797:11;:19;24809:6;24797:19;;;;;;;;;;;;;;;:34;24829:1;24817:9;:13;;;;:::i;:::-;24797:34;;;;;;;;;;;:40;;;24760:102;24743:119;;24881:14;24910:6;24898:9;:18;;;;:::i;:::-;24881:35;;24935:57;24952:6;24960:9;24971;24982;24935:16;:57::i;:::-;24591:417;;;;25046:1;25028:20;;:6;:20;;;25024:417;;25118:14;25135;:22;25150:6;25135:22;;;;;;;;;;;;;;;;25118:39;;25176:14;25205:1;25193:9;:13;:102;;25294:1;25193:102;;;25230:11;:19;25242:6;25230:19;;;;;;;;;;;;;;;:34;25262:1;25250:9;:13;;;;:::i;:::-;25230:34;;;;;;;;;;;:40;;;25193:102;25176:119;;25314:14;25343:6;25331:9;:18;;;;:::i;:::-;25314:35;;25368:57;25385:6;25393:9;25404;25415;25368:16;:57::i;:::-;25024:417;;;;24540:912;24451:1008;;;:::o;10006:551::-;10106:1;10087:21;;:7;:21;;;;10079:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10157:49;10178:7;10195:1;10199:6;10157:20;:49::i;:::-;10217:19;10239:9;:18;10249:7;10239:18;;;;;;;;;;;;;;;;10217:40;;10294:6;10276:14;:24;;10268:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10388:6;10371:14;:23;;;;:::i;:::-;10350:9;:18;10360:7;10350:18;;;;;;;;;;;;;;;:44;;;;10421:6;10405:12;;:22;;;;;;;:::i;:::-;;;;;;;;10479:1;10453:37;;10462:7;10453:37;;;10483:6;10453:37;;;;;;:::i;:::-;;;;;;;;10501:48;10521:7;10538:1;10542:6;10501:19;:48::i;:::-;10006:551;;;:::o;24028:415::-;24105:23;24131:10;:21;24142:9;24131:21;;;;;;;;;;;;;;;;;;;;;;;;;24105:47;;24163:21;24187:20;24197:9;24187;:20::i;:::-;24163:44;;24285:9;24261:10;:21;24272:9;24261:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;24354:9;24310:54;;24337:15;24310:54;;24326:9;24310:54;;;;;;;;;;;;24375:60;24390:15;24407:9;24418:16;24375:14;:60::i;:::-;24028:415;;;;:::o;23870:150::-;23915:4;23932:12;23977:9;23966:20;;24005:7;23998:14;;;23870:150;:::o;10914:88::-;;;;:::o;11008:87::-;;;;:::o;12015:442::-;12084:13;12110:19;12155:1;12146:6;12142:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;12132:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12110:47;;12168:15;:6;12175:1;12168:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;12194;:6;12201:1;12194:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;12225:6;12247:1;12238:6;12234:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;12225:23;;12220:132;12254:1;12250;:5;12220:132;;;12289:12;12310:3;12302:5;:11;12289:25;;;;;;;;;;;;;;;;;;12277:6;12284:1;12277:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;12339:1;12329:11;;;;;12257:3;;;;:::i;:::-;;;12220:132;;;;12379:1;12370:5;:10;12362:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;12442:6;12428:21;;;12015:442;;;;:::o;25467:673::-;25624:19;25646:60;25654:15;25646:60;;;;;;;;;;;;;;;;;:7;:60::i;:::-;25624:82;;25738:1;25723:12;:16;:87;;;;;25796:14;25743:11;:22;25755:9;25743:22;;;;;;;;;;;;;;;:40;25781:1;25766:12;:16;;;;:::i;:::-;25743:40;;;;;;;;;;;:49;;;:67;25723:87;25719:345;;;25876:8;25827:11;:22;25839:9;25827:22;;;;;;;;;;;;;;;:40;25865:1;25850:12;:16;;;;:::i;:::-;25827:40;;;;;;;;;;;:46;;:57;;;;25719:345;;;25957:36;;;;;;;;25968:14;25957:36;;;;25984:8;25957:36;;;25918:11;:22;25930:9;25918:22;;;;;;;;;;;;;;;:36;25941:12;25918:36;;;;;;;;;;;:75;;;;;;;;;;;;;;;;;;;26051:1;26036:12;:16;;;;:::i;:::-;26008:14;:25;26023:9;26008:25;;;;;;;;;;;;;;;:44;;;;25719:345;26102:9;26081:51;;;26113:8;26123;26081:51;;;;;;;:::i;:::-;;;;;;;;25467:673;;;;;:::o;23695:167::-;23771:4;23800:14;23796:1;:18;23816:12;23788:41;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23852:1;23840:14;;23695:167;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:137::-;342:5;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;348:86;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:135::-;629:5;667:6;654:20;645:29;;683:31;708:5;683:31;:::i;:::-;635:85;;;;:::o;726:262::-;785:6;834:2;822:9;813:7;809:23;805:32;802:2;;;850:1;847;840:12;802:2;893:1;918:53;963:7;954:6;943:9;939:22;918:53;:::i;:::-;908:63;;864:117;792:196;;;;:::o;994:407::-;1062:6;1070;1119:2;1107:9;1098:7;1094:23;1090:32;1087:2;;;1135:1;1132;1125:12;1087:2;1178:1;1203:53;1248:7;1239:6;1228:9;1224:22;1203:53;:::i;:::-;1193:63;;1149:117;1305:2;1331:53;1376:7;1367:6;1356:9;1352:22;1331:53;:::i;:::-;1321:63;;1276:118;1077:324;;;;;:::o;1407:552::-;1484:6;1492;1500;1549:2;1537:9;1528:7;1524:23;1520:32;1517:2;;;1565:1;1562;1555:12;1517:2;1608:1;1633:53;1678:7;1669:6;1658:9;1654:22;1633:53;:::i;:::-;1623:63;;1579:117;1735:2;1761:53;1806:7;1797:6;1786:9;1782:22;1761:53;:::i;:::-;1751:63;;1706:118;1863:2;1889:53;1934:7;1925:6;1914:9;1910:22;1889:53;:::i;:::-;1879:63;;1834:118;1507:452;;;;;:::o;1965:407::-;2033:6;2041;2090:2;2078:9;2069:7;2065:23;2061:32;2058:2;;;2106:1;2103;2096:12;2058:2;2149:1;2174:53;2219:7;2210:6;2199:9;2195:22;2174:53;:::i;:::-;2164:63;;2120:117;2276:2;2302:53;2347:7;2338:6;2327:9;2323:22;2302:53;:::i;:::-;2292:63;;2247:118;2048:324;;;;;:::o;2378:986::-;2480:6;2488;2496;2504;2512;2520;2569:3;2557:9;2548:7;2544:23;2540:33;2537:2;;;2586:1;2583;2576:12;2537:2;2629:1;2654:53;2699:7;2690:6;2679:9;2675:22;2654:53;:::i;:::-;2644:63;;2600:117;2756:2;2782:53;2827:7;2818:6;2807:9;2803:22;2782:53;:::i;:::-;2772:63;;2727:118;2884:2;2910:53;2955:7;2946:6;2935:9;2931:22;2910:53;:::i;:::-;2900:63;;2855:118;3012:2;3038:51;3081:7;3072:6;3061:9;3057:22;3038:51;:::i;:::-;3028:61;;2983:116;3138:3;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3109:119;3267:3;3294:53;3339:7;3330:6;3319:9;3315:22;3294:53;:::i;:::-;3284:63;;3238:119;2527:837;;;;;;;;:::o;3370:262::-;3429:6;3478:2;3466:9;3457:7;3453:23;3449:32;3446:2;;;3494:1;3491;3484:12;3446:2;3537:1;3562:53;3607:7;3598:6;3587:9;3583:22;3562:53;:::i;:::-;3552:63;;3508:117;3436:196;;;;:::o;3638:407::-;3706:6;3714;3763:2;3751:9;3742:7;3738:23;3734:32;3731:2;;;3779:1;3776;3769:12;3731:2;3822:1;3847:53;3892:7;3883:6;3872:9;3868:22;3847:53;:::i;:::-;3837:63;;3793:117;3949:2;3975:53;4020:7;4011:6;4000:9;3996:22;3975:53;:::i;:::-;3965:63;;3920:118;3721:324;;;;;:::o;4051:552::-;4128:6;4136;4144;4193:2;4181:9;4172:7;4168:23;4164:32;4161:2;;;4209:1;4206;4199:12;4161:2;4252:1;4277:53;4322:7;4313:6;4302:9;4298:22;4277:53;:::i;:::-;4267:63;;4223:117;4379:2;4405:53;4450:7;4441:6;4430:9;4426:22;4405:53;:::i;:::-;4395:63;;4350:118;4507:2;4533:53;4578:7;4569:6;4558:9;4554:22;4533:53;:::i;:::-;4523:63;;4478:118;4151:452;;;;;:::o;4609:260::-;4667:6;4716:2;4704:9;4695:7;4691:23;4687:32;4684:2;;;4732:1;4729;4722:12;4684:2;4775:1;4800:52;4844:7;4835:6;4824:9;4820:22;4800:52;:::i;:::-;4790:62;;4746:116;4674:195;;;;:::o;4875:262::-;4934:6;4983:2;4971:9;4962:7;4958:23;4954:32;4951:2;;;4999:1;4996;4989:12;4951:2;5042:1;5067:53;5112:7;5103:6;5092:9;5088:22;5067:53;:::i;:::-;5057:63;;5013:117;4941:196;;;;:::o;5143:118::-;5230:24;5248:5;5230:24;:::i;:::-;5225:3;5218:37;5208:53;;:::o;5267:109::-;5348:21;5363:5;5348:21;:::i;:::-;5343:3;5336:34;5326:50;;:::o;5382:118::-;5469:24;5487:5;5469:24;:::i;:::-;5464:3;5457:37;5447:53;;:::o;5506:157::-;5611:45;5631:24;5649:5;5631:24;:::i;:::-;5611:45;:::i;:::-;5606:3;5599:58;5589:74;;:::o;5669:364::-;5757:3;5785:39;5818:5;5785:39;:::i;:::-;5840:71;5904:6;5899:3;5840:71;:::i;:::-;5833:78;;5920:52;5965:6;5960:3;5953:4;5946:5;5942:16;5920:52;:::i;:::-;5997:29;6019:6;5997:29;:::i;:::-;5992:3;5988:39;5981:46;;5761:272;;;;;:::o;6039:377::-;6145:3;6173:39;6206:5;6173:39;:::i;:::-;6228:89;6310:6;6305:3;6228:89;:::i;:::-;6221:96;;6326:52;6371:6;6366:3;6359:4;6352:5;6348:16;6326:52;:::i;:::-;6403:6;6398:3;6394:16;6387:23;;6149:267;;;;;:::o;6422:366::-;6564:3;6585:67;6649:2;6644:3;6585:67;:::i;:::-;6578:74;;6661:93;6750:3;6661:93;:::i;:::-;6779:2;6774:3;6770:12;6763:19;;6568:220;;;:::o;6794:366::-;6936:3;6957:67;7021:2;7016:3;6957:67;:::i;:::-;6950:74;;7033:93;7122:3;7033:93;:::i;:::-;7151:2;7146:3;7142:12;7135:19;;6940:220;;;:::o;7166:366::-;7308:3;7329:67;7393:2;7388:3;7329:67;:::i;:::-;7322:74;;7405:93;7494:3;7405:93;:::i;:::-;7523:2;7518:3;7514:12;7507:19;;7312:220;;;:::o;7538:366::-;7680:3;7701:67;7765:2;7760:3;7701:67;:::i;:::-;7694:74;;7777:93;7866:3;7777:93;:::i;:::-;7895:2;7890:3;7886:12;7879:19;;7684:220;;;:::o;7910:366::-;8052:3;8073:67;8137:2;8132:3;8073:67;:::i;:::-;8066:74;;8149:93;8238:3;8149:93;:::i;:::-;8267:2;8262:3;8258:12;8251:19;;8056:220;;;:::o;8282:400::-;8442:3;8463:84;8545:1;8540:3;8463:84;:::i;:::-;8456:91;;8556:93;8645:3;8556:93;:::i;:::-;8674:1;8669:3;8665:11;8658:18;;8446:236;;;:::o;8688:366::-;8830:3;8851:67;8915:2;8910:3;8851:67;:::i;:::-;8844:74;;8927:93;9016:3;8927:93;:::i;:::-;9045:2;9040:3;9036:12;9029:19;;8834:220;;;:::o;9060:366::-;9202:3;9223:67;9287:2;9282:3;9223:67;:::i;:::-;9216:74;;9299:93;9388:3;9299:93;:::i;:::-;9417:2;9412:3;9408:12;9401:19;;9206:220;;;:::o;9432:366::-;9574:3;9595:67;9659:2;9654:3;9595:67;:::i;:::-;9588:74;;9671:93;9760:3;9671:93;:::i;:::-;9789:2;9784:3;9780:12;9773:19;;9578:220;;;:::o;9804:366::-;9946:3;9967:67;10031:2;10026:3;9967:67;:::i;:::-;9960:74;;10043:93;10132:3;10043:93;:::i;:::-;10161:2;10156:3;10152:12;10145:19;;9950:220;;;:::o;10176:366::-;10318:3;10339:67;10403:2;10398:3;10339:67;:::i;:::-;10332:74;;10415:93;10504:3;10415:93;:::i;:::-;10533:2;10528:3;10524:12;10517:19;;10322:220;;;:::o;10548:366::-;10690:3;10711:67;10775:2;10770:3;10711:67;:::i;:::-;10704:74;;10787:93;10876:3;10787:93;:::i;:::-;10905:2;10900:3;10896:12;10889:19;;10694:220;;;:::o;10920:366::-;11062:3;11083:67;11147:2;11142:3;11083:67;:::i;:::-;11076:74;;11159:93;11248:3;11159:93;:::i;:::-;11277:2;11272:3;11268:12;11261:19;;11066:220;;;:::o;11292:366::-;11434:3;11455:67;11519:2;11514:3;11455:67;:::i;:::-;11448:74;;11531:93;11620:3;11531:93;:::i;:::-;11649:2;11644:3;11640:12;11633:19;;11438:220;;;:::o;11664:366::-;11806:3;11827:67;11891:2;11886:3;11827:67;:::i;:::-;11820:74;;11903:93;11992:3;11903:93;:::i;:::-;12021:2;12016:3;12012:12;12005:19;;11810:220;;;:::o;12036:366::-;12178:3;12199:67;12263:2;12258:3;12199:67;:::i;:::-;12192:74;;12275:93;12364:3;12275:93;:::i;:::-;12393:2;12388:3;12384:12;12377:19;;12182:220;;;:::o;12408:366::-;12550:3;12571:67;12635:2;12630:3;12571:67;:::i;:::-;12564:74;;12647:93;12736:3;12647:93;:::i;:::-;12765:2;12760:3;12756:12;12749:19;;12554:220;;;:::o;12780:402::-;12940:3;12961:85;13043:2;13038:3;12961:85;:::i;:::-;12954:92;;13055:93;13144:3;13055:93;:::i;:::-;13173:2;13168:3;13164:12;13157:19;;12944:238;;;:::o;13188:366::-;13330:3;13351:67;13415:2;13410:3;13351:67;:::i;:::-;13344:74;;13427:93;13516:3;13427:93;:::i;:::-;13545:2;13540:3;13536:12;13529:19;;13334:220;;;:::o;13560:402::-;13720:3;13741:85;13823:2;13818:3;13741:85;:::i;:::-;13734:92;;13835:93;13924:3;13835:93;:::i;:::-;13953:2;13948:3;13944:12;13937:19;;13724:238;;;:::o;13968:366::-;14110:3;14131:67;14195:2;14190:3;14131:67;:::i;:::-;14124:74;;14207:93;14296:3;14207:93;:::i;:::-;14325:2;14320:3;14316:12;14309:19;;14114:220;;;:::o;14340:366::-;14482:3;14503:67;14567:2;14562:3;14503:67;:::i;:::-;14496:74;;14579:93;14668:3;14579:93;:::i;:::-;14697:2;14692:3;14688:12;14681:19;;14486:220;;;:::o;14712:118::-;14799:24;14817:5;14799:24;:::i;:::-;14794:3;14787:37;14777:53;;:::o;14836:112::-;14919:22;14935:5;14919:22;:::i;:::-;14914:3;14907:35;14897:51;;:::o;14954:663::-;15195:3;15217:148;15361:3;15217:148;:::i;:::-;15210:155;;15375:75;15446:3;15437:6;15375:75;:::i;:::-;15475:2;15470:3;15466:12;15459:19;;15488:75;15559:3;15550:6;15488:75;:::i;:::-;15588:2;15583:3;15579:12;15572:19;;15608:3;15601:10;;15199:418;;;;;:::o;15623:967::-;16005:3;16027:148;16171:3;16027:148;:::i;:::-;16020:155;;16192:95;16283:3;16274:6;16192:95;:::i;:::-;16185:102;;16304:148;16448:3;16304:148;:::i;:::-;16297:155;;16469:95;16560:3;16551:6;16469:95;:::i;:::-;16462:102;;16581:3;16574:10;;16009:581;;;;;:::o;16596:222::-;16689:4;16727:2;16716:9;16712:18;16704:26;;16740:71;16808:1;16797:9;16793:17;16784:6;16740:71;:::i;:::-;16694:124;;;;:::o;16824:210::-;16911:4;16949:2;16938:9;16934:18;16926:26;;16962:65;17024:1;17013:9;17009:17;17000:6;16962:65;:::i;:::-;16916:118;;;;:::o;17040:222::-;17133:4;17171:2;17160:9;17156:18;17148:26;;17184:71;17252:1;17241:9;17237:17;17228:6;17184:71;:::i;:::-;17138:124;;;;:::o;17268:442::-;17417:4;17455:2;17444:9;17440:18;17432:26;;17468:71;17536:1;17525:9;17521:17;17512:6;17468:71;:::i;:::-;17549:72;17617:2;17606:9;17602:18;17593:6;17549:72;:::i;:::-;17631;17699:2;17688:9;17684:18;17675:6;17631:72;:::i;:::-;17422:288;;;;;;:::o;17716:553::-;17893:4;17931:3;17920:9;17916:19;17908:27;;17945:71;18013:1;18002:9;17998:17;17989:6;17945:71;:::i;:::-;18026:72;18094:2;18083:9;18079:18;18070:6;18026:72;:::i;:::-;18108;18176:2;18165:9;18161:18;18152:6;18108:72;:::i;:::-;18190;18258:2;18247:9;18243:18;18234:6;18190:72;:::i;:::-;17898:371;;;;;;;:::o;18275:553::-;18452:4;18490:3;18479:9;18475:19;18467:27;;18504:71;18572:1;18561:9;18557:17;18548:6;18504:71;:::i;:::-;18585:72;18653:2;18642:9;18638:18;18629:6;18585:72;:::i;:::-;18667;18735:2;18724:9;18720:18;18711:6;18667:72;:::i;:::-;18749;18817:2;18806:9;18802:18;18793:6;18749:72;:::i;:::-;18457:371;;;;;;;:::o;18834:545::-;19007:4;19045:3;19034:9;19030:19;19022:27;;19059:71;19127:1;19116:9;19112:17;19103:6;19059:71;:::i;:::-;19140:68;19204:2;19193:9;19189:18;19180:6;19140:68;:::i;:::-;19218:72;19286:2;19275:9;19271:18;19262:6;19218:72;:::i;:::-;19300;19368:2;19357:9;19353:18;19344:6;19300:72;:::i;:::-;19012:367;;;;;;;:::o;19385:313::-;19498:4;19536:2;19525:9;19521:18;19513:26;;19585:9;19579:4;19575:20;19571:1;19560:9;19556:17;19549:47;19613:78;19686:4;19677:6;19613:78;:::i;:::-;19605:86;;19503:195;;;;:::o;19704:419::-;19870:4;19908:2;19897:9;19893:18;19885:26;;19957:9;19951:4;19947:20;19943:1;19932:9;19928:17;19921:47;19985:131;20111:4;19985:131;:::i;:::-;19977:139;;19875:248;;;:::o;20129:419::-;20295:4;20333:2;20322:9;20318:18;20310:26;;20382:9;20376:4;20372:20;20368:1;20357:9;20353:17;20346:47;20410:131;20536:4;20410:131;:::i;:::-;20402:139;;20300:248;;;:::o;20554:419::-;20720:4;20758:2;20747:9;20743:18;20735:26;;20807:9;20801:4;20797:20;20793:1;20782:9;20778:17;20771:47;20835:131;20961:4;20835:131;:::i;:::-;20827:139;;20725:248;;;:::o;20979:419::-;21145:4;21183:2;21172:9;21168:18;21160:26;;21232:9;21226:4;21222:20;21218:1;21207:9;21203:17;21196:47;21260:131;21386:4;21260:131;:::i;:::-;21252:139;;21150:248;;;:::o;21404:419::-;21570:4;21608:2;21597:9;21593:18;21585:26;;21657:9;21651:4;21647:20;21643:1;21632:9;21628:17;21621:47;21685:131;21811:4;21685:131;:::i;:::-;21677:139;;21575:248;;;:::o;21829:419::-;21995:4;22033:2;22022:9;22018:18;22010:26;;22082:9;22076:4;22072:20;22068:1;22057:9;22053:17;22046:47;22110:131;22236:4;22110:131;:::i;:::-;22102:139;;22000:248;;;:::o;22254:419::-;22420:4;22458:2;22447:9;22443:18;22435:26;;22507:9;22501:4;22497:20;22493:1;22482:9;22478:17;22471:47;22535:131;22661:4;22535:131;:::i;:::-;22527:139;;22425:248;;;:::o;22679:419::-;22845:4;22883:2;22872:9;22868:18;22860:26;;22932:9;22926:4;22922:20;22918:1;22907:9;22903:17;22896:47;22960:131;23086:4;22960:131;:::i;:::-;22952:139;;22850:248;;;:::o;23104:419::-;23270:4;23308:2;23297:9;23293:18;23285:26;;23357:9;23351:4;23347:20;23343:1;23332:9;23328:17;23321:47;23385:131;23511:4;23385:131;:::i;:::-;23377:139;;23275:248;;;:::o;23529:419::-;23695:4;23733:2;23722:9;23718:18;23710:26;;23782:9;23776:4;23772:20;23768:1;23757:9;23753:17;23746:47;23810:131;23936:4;23810:131;:::i;:::-;23802:139;;23700:248;;;:::o;23954:419::-;24120:4;24158:2;24147:9;24143:18;24135:26;;24207:9;24201:4;24197:20;24193:1;24182:9;24178:17;24171:47;24235:131;24361:4;24235:131;:::i;:::-;24227:139;;24125:248;;;:::o;24379:419::-;24545:4;24583:2;24572:9;24568:18;24560:26;;24632:9;24626:4;24622:20;24618:1;24607:9;24603:17;24596:47;24660:131;24786:4;24660:131;:::i;:::-;24652:139;;24550:248;;;:::o;24804:419::-;24970:4;25008:2;24997:9;24993:18;24985:26;;25057:9;25051:4;25047:20;25043:1;25032:9;25028:17;25021:47;25085:131;25211:4;25085:131;:::i;:::-;25077:139;;24975:248;;;:::o;25229:419::-;25395:4;25433:2;25422:9;25418:18;25410:26;;25482:9;25476:4;25472:20;25468:1;25457:9;25453:17;25446:47;25510:131;25636:4;25510:131;:::i;:::-;25502:139;;25400:248;;;:::o;25654:419::-;25820:4;25858:2;25847:9;25843:18;25835:26;;25907:9;25901:4;25897:20;25893:1;25882:9;25878:17;25871:47;25935:131;26061:4;25935:131;:::i;:::-;25927:139;;25825:248;;;:::o;26079:419::-;26245:4;26283:2;26272:9;26268:18;26260:26;;26332:9;26326:4;26322:20;26318:1;26307:9;26303:17;26296:47;26360:131;26486:4;26360:131;:::i;:::-;26352:139;;26250:248;;;:::o;26504:419::-;26670:4;26708:2;26697:9;26693:18;26685:26;;26757:9;26751:4;26747:20;26743:1;26732:9;26728:17;26721:47;26785:131;26911:4;26785:131;:::i;:::-;26777:139;;26675:248;;;:::o;26929:419::-;27095:4;27133:2;27122:9;27118:18;27110:26;;27182:9;27176:4;27172:20;27168:1;27157:9;27153:17;27146:47;27210:131;27336:4;27210:131;:::i;:::-;27202:139;;27100:248;;;:::o;27354:419::-;27520:4;27558:2;27547:9;27543:18;27535:26;;27607:9;27601:4;27597:20;27593:1;27582:9;27578:17;27571:47;27635:131;27761:4;27635:131;:::i;:::-;27627:139;;27525:248;;;:::o;27779:222::-;27872:4;27910:2;27899:9;27895:18;27887:26;;27923:71;27991:1;27980:9;27976:17;27967:6;27923:71;:::i;:::-;27877:124;;;;:::o;28007:332::-;28128:4;28166:2;28155:9;28151:18;28143:26;;28179:71;28247:1;28236:9;28232:17;28223:6;28179:71;:::i;:::-;28260:72;28328:2;28317:9;28313:18;28304:6;28260:72;:::i;:::-;28133:206;;;;;:::o;28345:214::-;28434:4;28472:2;28461:9;28457:18;28449:26;;28485:67;28549:1;28538:9;28534:17;28525:6;28485:67;:::i;:::-;28439:120;;;;:::o;28565:99::-;28617:6;28651:5;28645:12;28635:22;;28624:40;;;:::o;28670:169::-;28754:11;28788:6;28783:3;28776:19;28828:4;28823:3;28819:14;28804:29;;28766:73;;;;:::o;28845:148::-;28947:11;28984:3;28969:18;;28959:34;;;;:::o;28999:305::-;29039:3;29058:20;29076:1;29058:20;:::i;:::-;29053:25;;29092:20;29110:1;29092:20;:::i;:::-;29087:25;;29246:1;29178:66;29174:74;29171:1;29168:81;29165:2;;;29252:18;;:::i;:::-;29165:2;29296:1;29293;29289:9;29282:16;;29043:261;;;;:::o;29310:185::-;29350:1;29367:20;29385:1;29367:20;:::i;:::-;29362:25;;29401:20;29419:1;29401:20;:::i;:::-;29396:25;;29440:1;29430:2;;29445:18;;:::i;:::-;29430:2;29487:1;29484;29480:9;29475:14;;29352:143;;;;:::o;29501:348::-;29541:7;29564:20;29582:1;29564:20;:::i;:::-;29559:25;;29598:20;29616:1;29598:20;:::i;:::-;29593:25;;29786:1;29718:66;29714:74;29711:1;29708:81;29703:1;29696:9;29689:17;29685:105;29682:2;;;29793:18;;:::i;:::-;29682:2;29841:1;29838;29834:9;29823:20;;29549:300;;;;:::o;29855:191::-;29895:4;29915:20;29933:1;29915:20;:::i;:::-;29910:25;;29949:20;29967:1;29949:20;:::i;:::-;29944:25;;29988:1;29985;29982:8;29979:2;;;29993:18;;:::i;:::-;29979:2;30038:1;30035;30031:9;30023:17;;29900:146;;;;:::o;30052:96::-;30089:7;30118:24;30136:5;30118:24;:::i;:::-;30107:35;;30097:51;;;:::o;30154:90::-;30188:7;30231:5;30224:13;30217:21;30206:32;;30196:48;;;:::o;30250:77::-;30287:7;30316:5;30305:16;;30295:32;;;:::o;30333:149::-;30369:7;30409:66;30402:5;30398:78;30387:89;;30377:105;;;:::o;30488:126::-;30525:7;30565:42;30558:5;30554:54;30543:65;;30533:81;;;:::o;30620:77::-;30657:7;30686:5;30675:16;;30665:32;;;:::o;30703:86::-;30738:7;30778:4;30771:5;30767:16;30756:27;;30746:43;;;:::o;30795:307::-;30863:1;30873:113;30887:6;30884:1;30881:13;30873:113;;;30972:1;30967:3;30963:11;30957:18;30953:1;30948:3;30944:11;30937:39;30909:2;30906:1;30902:10;30897:15;;30873:113;;;31004:6;31001:1;30998:13;30995:2;;;31084:1;31075:6;31070:3;31066:16;31059:27;30995:2;30844:258;;;;:::o;31108:171::-;31147:3;31170:24;31188:5;31170:24;:::i;:::-;31161:33;;31216:4;31209:5;31206:15;31203:2;;;31224:18;;:::i;:::-;31203:2;31271:1;31264:5;31260:13;31253:20;;31151:128;;;:::o;31285:320::-;31329:6;31366:1;31360:4;31356:12;31346:22;;31413:1;31407:4;31403:12;31434:18;31424:2;;31490:4;31482:6;31478:17;31468:27;;31424:2;31552;31544:6;31541:14;31521:18;31518:38;31515:2;;;31571:18;;:::i;:::-;31515:2;31336:269;;;;:::o;31611:233::-;31650:3;31673:24;31691:5;31673:24;:::i;:::-;31664:33;;31719:66;31712:5;31709:77;31706:2;;;31789:18;;:::i;:::-;31706:2;31836:1;31829:5;31825:13;31818:20;;31654:190;;;:::o;31850:79::-;31889:7;31918:5;31907:16;;31897:32;;;:::o;31935:180::-;31983:77;31980:1;31973:88;32080:4;32077:1;32070:15;32104:4;32101:1;32094:15;32121:180;32169:77;32166:1;32159:88;32266:4;32263:1;32256:15;32290:4;32287:1;32280:15;32307:180;32355:77;32352:1;32345:88;32452:4;32449:1;32442:15;32476:4;32473:1;32466:15;32493:102;32534:6;32585:2;32581:7;32576:2;32569:5;32565:14;32561:28;32551:38;;32541:54;;;:::o;32601:220::-;32741:34;32737:1;32729:6;32725:14;32718:58;32810:3;32805:2;32797:6;32793:15;32786:28;32707:114;:::o;32827:182::-;32967:34;32963:1;32955:6;32951:14;32944:58;32933:76;:::o;33015:222::-;33155:34;33151:1;33143:6;33139:14;33132:58;33224:5;33219:2;33211:6;33207:15;33200:30;33121:116;:::o;33243:221::-;33383:34;33379:1;33371:6;33367:14;33360:58;33452:4;33447:2;33439:6;33435:15;33428:29;33349:115;:::o;33470:221::-;33610:34;33606:1;33598:6;33594:14;33587:58;33679:4;33674:2;33666:6;33662:15;33655:29;33576:115;:::o;33697:214::-;33837:66;33833:1;33825:6;33821:14;33814:90;33803:108;:::o;33917:182::-;34057:34;34053:1;34045:6;34041:14;34034:58;34023:76;:::o;34105:225::-;34245:34;34241:1;34233:6;34229:14;34222:58;34314:8;34309:2;34301:6;34297:15;34290:33;34211:119;:::o;34336:182::-;34476:34;34472:1;34464:6;34460:14;34453:58;34442:76;:::o;34524:227::-;34664:34;34660:1;34652:6;34648:14;34641:58;34733:10;34728:2;34720:6;34716:15;34709:35;34630:121;:::o;34757:171::-;34897:23;34893:1;34885:6;34881:14;34874:47;34863:65;:::o;34934:178::-;35074:30;35070:1;35062:6;35058:14;35051:54;35040:72;:::o;35118:220::-;35258:34;35254:1;35246:6;35242:14;35235:58;35327:3;35322:2;35314:6;35310:15;35303:28;35224:114;:::o;35344:224::-;35484:34;35480:1;35472:6;35468:14;35461:58;35553:7;35548:2;35540:6;35536:15;35529:32;35450:118;:::o;35574:178::-;35714:30;35710:1;35702:6;35698:14;35691:54;35680:72;:::o;35758:223::-;35898:34;35894:1;35886:6;35882:14;35875:58;35967:6;35962:2;35954:6;35950:15;35943:31;35864:117;:::o;35987:179::-;36127:31;36123:1;36115:6;36111:14;36104:55;36093:73;:::o;36172:173::-;36312:25;36308:1;36300:6;36296:14;36289:49;36278:67;:::o;36351:224::-;36491:34;36487:1;36479:6;36475:14;36468:58;36560:7;36555:2;36547:6;36543:15;36536:32;36457:118;:::o;36581:167::-;36721:19;36717:1;36709:6;36705:14;36698:43;36687:61;:::o;36754:234::-;36894:34;36890:1;36882:6;36878:14;36871:58;36963:17;36958:2;36950:6;36946:15;36939:42;36860:128;:::o;36994:181::-;37134:33;37130:1;37122:6;37118:14;37111:57;37100:75;:::o;37181:122::-;37254:24;37272:5;37254:24;:::i;:::-;37247:5;37244:35;37234:2;;37293:1;37290;37283:12;37234:2;37224:79;:::o;37309:122::-;37382:24;37400:5;37382:24;:::i;:::-;37375:5;37372:35;37362:2;;37421:1;37418;37411:12;37362:2;37352:79;:::o;37437:120::-;37509:23;37526:5;37509:23;:::i;:::-;37502:5;37499:34;37489:2;;37547:1;37544;37537:12;37489:2;37479:78;:::o;37563:122::-;37636:24;37654:5;37636:24;:::i;:::-;37629:5;37626:35;37616:2;;37675:1;37672;37665:12;37616:2;37606:79;:::o;37691:118::-;37762:22;37778:5;37762:22;:::i;:::-;37755:5;37752:33;37742:2;;37799:1;37796;37789:12;37742:2;37732:77;:::o

Swarm Source

ipfs://821d296d9e083956047e769287e96f6b44d9183d3a145161fde297a69d49e3ab
Loading