ETH Price: $2,501.21 (-5.06%)

Token

OMNIS-BIT (OMNIS)
 

Overview

Max Total Supply

820,717,569.286684299433289538 OMNIS

Holders

2,125 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
170 OMNIS

Value
$0.00
0xc09c98a5465b311e82beb9a8ee8bbdacff21bcf1
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

OMNIS aims to bring everyone closer to the cryptocurrencies' world with its services.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
OMNIS

Compiler Version
v0.5.9+commit.e560f70d

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-09-24
*/

pragma solidity 0.5.9;
/**
 _____                   __  __      ______      ____                 ____       ______      ______
/\  __`\     /'\_/`\    /\ \/\ \    /\__  _\    /\  _`\              /\  _`\    /\__  _\    /\__  _\
\ \ \/\ \   /\      \   \ \ `\\ \   \/_/\ \/    \ \,\L\_\            \ \ \L\ \  \/_/\ \/    \/_/\ \/
 \ \ \ \ \  \ \ \__\ \   \ \ , ` \     \ \ \     \/_\__ \    _______  \ \  _ <'    \ \ \       \ \ \
  \ \ \_\ \  \ \ \_/\ \   \ \ \`\ \     \_\ \__    /\ \L\ \ /\______\  \ \ \L\ \    \_\ \__     \ \ \
   \ \_____\  \ \_\\ \_\   \ \_\ \_\    /\_____\   \ `\____\\/______/   \ \____/    /\_____\     \ \_\
    \/_____/   \/_/ \/_/    \/_/\/_/    \/_____/    \/_____/             \/___/     \/_____/      \/_/

    WEBSITE: www.omnis-bit.com
    Email: [email protected]
    *If you need support please contact us*

    This contract's staking features are based on the code provided at
    https://github.com/PoSToken/PoSToken

    SafeMath Library provided by OpenZeppelin
    https://github.com/OpenZeppelin/openzeppelin-solidity
    
    Audited by Callisto Security Audit Department, 
    link: https://github.com/EthereumCommonwealth/Auditing/issues/344#issuecomment-530542757
    No mitigation applied on contract for approve/transferFrom ERC20 issue https://github.com/ethereum/EIPs/issues/738
    404,436,690,827,884 lines corrected according to the audit
   *losing stake reward after token transfer is part of staking logic*

    Official Social Networks:
    Telegram Channel: https://t.me/OMNISOFFICIAL
    Telegram Chat: https://t.me/OmnisBitOfficial
    Medium: https://medium.com/@OMNIS
    Twitter: https://twitter.com/OmnisBit
    Facebook: https://www.facebook.com/OMNISBITPAGE/
    Instagram: https://www.instagram.com/omnisbit/?st=JQO8XM3Z&sh=0870a6f5
    Reddit: https://www.reddit.com/user/OMNISBIT
  
 */

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error.
 */
library SafeMath {
    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
     */
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
     * reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns(uint256) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}

/**
 * @title Admined
 * @dev The Admined contract has an owner address, can set administrators,
 * and provides authorization control functions. These features can be used in other contracts
 * through interfacing, so external contracts can check main contract admin levels
 */
contract Admined {
    address public owner; //named owner for etherscan compatibility
    mapping(address => uint256) public level;

    /**
     * @dev The Admined constructor sets the original `owner` of the contract to the sender
     * account and assing high level privileges.
     */
    constructor() public {
        owner = msg.sender;
        level[owner] = 3;
        emit OwnerSet(owner);
        emit LevelSet(owner, level[owner]);
    }

    /**
     * @dev Throws if called by any account with lower level than minLvl.
     * @param _minLvl Minimum level to use the function
     */
    modifier onlyAdmin(uint256 _minLvl) {
        require(level[msg.sender] >= _minLvl, 'You do not have privileges for this transaction');
        _;
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyAdmin(3) {
        require(newOwner != address(0), 'Address cannot be zero');

        owner = newOwner;
        level[owner] = 3;

        emit OwnerSet(owner);
        emit LevelSet(owner, level[owner]);

        level[msg.sender] = 0;
        emit LevelSet(msg.sender, level[msg.sender]);
    }

    /**
     * @dev Allows the assignment of new privileges to a new address.
     * @param userAddress The address to transfer ownership to.
     * @param lvl Lvl to assign.
     */
    function setLevel(address userAddress, uint256 lvl) public onlyAdmin(2) {
        require(userAddress != address(0), 'Address cannot be zero');
        require(lvl < level[msg.sender], 'You do not have privileges for this level assignment');
        require(level[msg.sender] > level[userAddress], 'You do not have privileges for this level change');

        level[userAddress] = lvl;
        emit LevelSet(userAddress, level[userAddress]);
    }

    event LevelSet(address indexed user, uint256 lvl);
    event OwnerSet(address indexed user);

}

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
    uint256 public totalSupply;

    function balanceOf(address who) public view returns(uint256);

    function transfer(address to, uint256 value) public returns(bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
    function allowance(address owner, address spender) public view returns(uint256);

    function transferFrom(address from, address to, uint256 value) public returns(bool);

    function approve(address spender, uint256 value) public returns(bool);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract StakerToken {
    uint256 public stakeStartTime;
    uint256 public stakeMinAge;
    uint256 public stakeMaxAge;

    function claimStake() public returns(bool);

    function coinAge() public view returns(uint256);

    function annualInterest() public view returns(uint256);
}

contract OMNIS is ERC20, StakerToken, Admined {
    using SafeMath
    for uint256;
    ///////////////////////////////////////////////////////////////////
    //TOKEN RELATED
    string public name = "OMNIS-BIT";
    string public symbol = "OMNIS";
    string public version = "v4";
    uint8 public decimals = 18;

    uint public totalSupply;
    uint public maxTotalSupply;
    uint public totalInitialSupply;

    mapping(address => uint256) balances;
    mapping(address => mapping(address => uint256)) allowed;
    //TOKEN SECTION END
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //AIRDROP RELATED
    struct Airdrop {
        uint value;
        bool claimed;
    }

    address public airdropWallet;

    mapping(address => Airdrop) public airdrops; //One airdrop at a time allowed
    //AIRDROP SECTION END
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //ESCROW RELATED
    enum PaymentStatus {
        Requested,
        Rejected,
        Pending,
        Completed,
        Refunded
    }

    struct Payment {
        address provider;
        address customer;
        uint value;
        string comment;
        PaymentStatus status;
        bool refundApproved;
    }

    uint escrowCounter;
    uint public escrowFeePercent = 2; //initially set to 0.2%
    bool public escrowEnabled = true;

    /**
     * @dev Throws if escrow is disabled.
     */
    modifier escrowIsEnabled() {
        require(escrowEnabled == true, 'Escrow is Disabled');
        _;
    }

    mapping(uint => Payment) public payments;
    address public collectionAddress;
    //ESCROW SECTION END
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //STAKING RELATED
    struct transferInStruct {
        uint128 amount;
        uint64 time;
    }

    uint public chainStartTime;
    uint public chainStartBlockNumber;
    uint public stakeStartTime;
    uint public stakeMinAge = 3 days;
    uint public stakeMaxAge = 90 days;

    mapping(address => bool) public userFreeze;

    // mapping(address => transferInStruct[]) transferIns;

    mapping(address => uint) staked;
    mapping(address => transferInStruct) lastTransfer;


    modifier canPoSclaimStake() {
        require(totalSupply < maxTotalSupply, 'Max supply reached');
        _;
    }
    //STAKING SECTION END
    ///////////////////////////////////////////////////////////////////

    /**
     * @dev Throws if any frozen is applied.
     * @param _holderWallet Address of the actual token holder
     */
    modifier notFrozen(address _holderWallet) {
        require(userFreeze[_holderWallet] == false, 'Balance frozen by the user');
        _;
    }

    ///////////////////////////////////////////////////////////////////
    //EVENTS
    event ClaimStake(address indexed _address, uint _reward);
    event NewCollectionWallet(address newWallet);

    event ClaimDrop(address indexed user, uint value);
    event NewAirdropWallet(address newWallet);

    event GlobalFreeze(bool status);

    event EscrowLock(bool status);
    event NewFeeRate(uint newFee);
    event PaymentCreation(
        uint indexed orderId,
        address indexed provider,
        address indexed customer,
        uint value,
        string description
    );
    event PaymentUpdate(
        uint indexed orderId,
        address indexed provider,
        address indexed customer,
        uint value,
        PaymentStatus status
    );
    event PaymentRefundApprove(
        uint indexed orderId,
        address indexed provider,
        address indexed customer,
        bool status
    );
    ///////////////////////////////////////////////////////////////////

    constructor() public {

        maxTotalSupply = 1000000000 * 10 ** 18; //MAX SUPPLY EVER
        totalInitialSupply = 820000000 * 10 ** 18; //INITIAL SUPPLY
        chainStartTime = now; //Deployment Time
        chainStartBlockNumber = block.number; //Deployment Block
        totalSupply = totalInitialSupply;
        collectionAddress = msg.sender; //Initially fees collection wallet to creator
        airdropWallet = msg.sender; //Initially airdrop wallet to creator
        balances[msg.sender] = totalInitialSupply;

        emit Transfer(address(0), msg.sender, totalInitialSupply);
    }

    /**
     * @dev setCollectionWallet
     * @dev Allow an admin from level 3 to set the Escrow Service Fee Wallet
     * @param _newWallet The new fee wallet
     */
    function setCollectionWallet(address _newWallet) public onlyAdmin(3) {
        require(_newWallet != address(0), 'Address cannot be zero');
        collectionAddress = _newWallet;
        emit NewCollectionWallet(collectionAddress);
    }

    /**
     * @dev setAirDropWallet
     * @dev Allow an admin from level 3 to set the Airdrop Service Wallet
     * @param _newWallet The new Airdrop wallet
     */
    function setAirDropWallet(address _newWallet) public onlyAdmin(3) {
        require(_newWallet != address(0), 'Address cannot be zero');
        airdropWallet = _newWallet;
        emit NewAirdropWallet(airdropWallet);
    }

    ///////////////////////////////////////////////////////////////////
    //ERC20 FUNCTIONS
    function transfer(address _to, uint256 _value) public notFrozen(msg.sender) returns(bool) {
        require(_to != address(0), 'Address cannot be zero');
        require(_to != address(this), 'Address cannot be this contract');

        if (msg.sender == _to) return claimStake();

        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(msg.sender, _to, _value);

        //STAKING RELATED//////////////////////////////////////////////
        if (staked[msg.sender] != 0) staked[msg.sender] = 0;
        uint64 _now = uint64(now);
        lastTransfer[msg.sender] = transferInStruct(uint128(balances[msg.sender]), _now);

        if (uint(lastTransfer[_to].time) != 0) {
            uint nCoinSeconds = now.sub(uint(lastTransfer[_to].time));
            if (nCoinSeconds > stakeMaxAge) nCoinSeconds = stakeMaxAge;
            staked[_to] = staked[_to].add(uint(lastTransfer[_to].amount).mul(nCoinSeconds.div(1 days)));
        }
        lastTransfer[_to] = transferInStruct(uint128(balances[_to]), _now);
        ///////////////////////////////////////////////////////////////

        return true;
    }

    function balanceOf(address _owner) public view returns(uint256 balance) {
        return balances[_owner];
    }

    function transferFrom(address _from, address _to, uint256 _value) public notFrozen(_from) returns(bool) {
        require(_to != address(0), 'Address cannot be zero');

        uint256 _allowance = allowed[_from][msg.sender];
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        allowed[_from][msg.sender] = _allowance.sub(_value);
        emit Transfer(_from, _to, _value);

        //STAKING RELATED//////////////////////////////////////////////
        if (staked[_from] != 0) staked[_from] = 0;
        uint64 _now = uint64(now);
        lastTransfer[_from] = transferInStruct(uint128(balances[_from]), _now);

        if (_from != _to) { //Prevent double stake

            if (uint(lastTransfer[_to].time) != 0) {
                uint nCoinSeconds = now.sub(uint(lastTransfer[_to].time));
                if (nCoinSeconds > stakeMaxAge) nCoinSeconds = stakeMaxAge;
                staked[_to] = staked[_to].add(uint(lastTransfer[_to].amount).mul(nCoinSeconds.div(1 days)));
            }

            lastTransfer[_to] = transferInStruct(uint128(balances[_to]), _now);
        }
        ///////////////////////////////////////////////////////////////

        return true;
    }

    function approve(address _spender, uint256 _value) public returns(bool) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);

        return true;
    }

    function allowance(address _owner, address _spender) public view returns(uint256 remaining) {
        return allowed[_owner][_spender];
    }
    //ERC20 SECTION END
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //STAKING FUNCTIONS
    /**
     * @dev claimStake
     * @dev Allow any user to claim stake earned
     */
    function claimStake() public canPoSclaimStake returns(bool) {
        if (balances[msg.sender] <= 0) return false;

        uint reward = getProofOfStakeReward(msg.sender);

        if (totalSupply.add(reward) > maxTotalSupply) {
            reward = maxTotalSupply.sub(totalSupply);
        }

        if (reward <= 0) return false;

        totalSupply = totalSupply.add(reward);
        balances[msg.sender] = balances[msg.sender].add(reward);

        //STAKING RELATED//////////////////////////////////////////////
        uint64 _now = uint64(now);
        staked[msg.sender] = 0;
        lastTransfer[msg.sender] = transferInStruct(uint128(balances[msg.sender]), _now);
        ///////////////////////////////////////////////////////////////

        emit Transfer(address(0), msg.sender, reward);
        emit ClaimStake(msg.sender, reward);
        return true;
    }

    /**
     * @dev getBlockNumber
     * @dev Returns the block number since deployment
     */
    function getBlockNumber() public view returns(uint blockNumber) {
        blockNumber = block.number.sub(chainStartBlockNumber);
    }

    /**
     * @dev coinAge
     * @dev Returns the coinage for the callers account
     */
    function coinAge() public view returns(uint myCoinAge) {
        myCoinAge = getCoinAge(msg.sender, now);
    }

    /**
     * @dev annualInterest
     * @dev Returns the current interest rate
     */
    function annualInterest() public view returns(uint interest) {
        uint _now = now;
        // If all periods are finished but not max supply is reached,
        // a default small interest rate is left until max supply
        // get reached
        interest = (1 * 1e15); //fallback interest
        if ((_now.sub(stakeStartTime)).div(365 days) == 0) {
            interest = (106 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 1) {
            interest = (49 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 2) {
            interest = (24 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 3) {
            interest = (13 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 4) {
            interest = (11 * 1e15);
        }
    }

    /**
     * @dev getProofOfStakeReward
     * @dev Returns the current stake of a wallet
     * @param _address is the user wallet
     */
    function getProofOfStakeReward(address _address) public view returns(uint) {
        require((now >= stakeStartTime) && (stakeStartTime > 0), 'Staking is not yet enabled');

        uint _now = now;
        uint _coinAge = getCoinAge(_address, _now);
        if (_coinAge <= 0) return 0;

        // If all periods are finished but not max supply is reached,
        // a default small interest rate is left until max supply
        // get reached
        uint interest = (1 * 1e15); //fallback interest

        if ((_now.sub(stakeStartTime)).div(365 days) == 0) {
            interest = (106 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 1) {
            interest = (49 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 2) {
            interest = (24 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 3) {
            interest = (13 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 4) {
            interest = (11 * 1e15);
        }

        return (_coinAge * interest).div(365 * (10 ** uint256(decimals)));
    }

    function getCoinAge(address _address, uint _now) internal view returns(uint _coinAge) {
        _coinAge = staked[_address];
        if (uint(lastTransfer[_address].time) != 0) {
            uint nCoinSeconds = _now.sub(uint(lastTransfer[_address].time));
            if (nCoinSeconds > stakeMaxAge) nCoinSeconds = stakeMaxAge;
            _coinAge = _coinAge.add(uint(lastTransfer[_address].amount).mul(nCoinSeconds.div(1 days)));
        }
    }

    /**
     * @dev setStakeStartTime
     * @dev Used by the owner to define the staking period start
     * @param timestamp time in UNIX format
     */
    function setStakeStartTime(uint timestamp) public onlyAdmin(3) {
        require((stakeStartTime <= 0) && (timestamp >= chainStartTime), 'Wrong time set');
        stakeStartTime = timestamp;
    }
    //STACKING SECTION END
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //UTILITY FUNCTIONS
    /**
     * @dev batchTransfer
     * @dev Used by the owner to deliver several transfers at the same time (Airdrop)
     * @param _recipients Array of addresses
     * @param _values Array of values
     */
    function batchTransfer(
        address[] calldata _recipients,
        uint[] calldata _values
    )
    external
    onlyAdmin(1)
    returns(bool) {
        //Check data sizes
        require(_recipients.length > 0 && _recipients.length == _values.length, 'Addresses and Values have wrong sizes');
        //Total value calc
        uint total = 0;
        for (uint i = 0; i < _values.length; i++) {
            total = total.add(_values[i]);
        }
        //Sender must hold funds
        require(total <= balances[msg.sender], 'Not enough funds for the transaction');
        //Make transfers
        uint64 _now = uint64(now);
        for (uint j = 0; j < _recipients.length; j++) {
            balances[_recipients[j]] = balances[_recipients[j]].add(_values[j]);
            //STAKING RELATED//////////////////////////////////////////////
            if (uint(lastTransfer[_recipients[j]].time) != 0) {
                uint nCoinSeconds = now.sub(uint(lastTransfer[_recipients[j]].time));
                if (nCoinSeconds > stakeMaxAge) nCoinSeconds = stakeMaxAge;
                staked[_recipients[j]] = staked[_recipients[j]].add(uint(lastTransfer[_recipients[j]].amount).mul(nCoinSeconds.div(1 days)));
            }
            lastTransfer[_recipients[j]] = transferInStruct(uint128(_values[j]), _now);
            ///////////////////////////////////////////////////////////////
            emit Transfer(msg.sender, _recipients[j], _values[j]);
        }
        //Reduce all balance on a single transaction from sender
        balances[msg.sender] = balances[msg.sender].sub(total);
        //STAKING RELATED//////////////////////////////////////////////
        if (staked[msg.sender] != 0) staked[msg.sender] = 0;
        lastTransfer[msg.sender] = transferInStruct(uint128(balances[msg.sender]), _now);
        ///////////////////////////////////////////////////////////////
        return true;
    }

    /**
     * @dev dropSet
     * @dev Used by the owner to set several self-claiming drops at the same time (Airdrop)
     * @param _recipients Array of addresses
     * @param _values Array of values1
     */
    function dropSet(
        address[] calldata _recipients,
        uint[] calldata _values
    )
    external
    onlyAdmin(1)
    returns(bool) {
        //Check data sizes
        require(_recipients.length > 0 && _recipients.length == _values.length, 'Addresses and Values have wrong sizes');

        for (uint j = 0; j < _recipients.length; j++) {
            //Store user drop info
            airdrops[_recipients[j]].value = _values[j];
            airdrops[_recipients[j]].claimed = false;
        }

        return true;
    }

    /**
     * @dev claimAirdrop
     * @dev Allow any user with a drop set to claim it
     */
    function claimAirdrop() external returns(bool) {
        //Check if not claimed
        require(airdrops[msg.sender].claimed == false, 'Airdrop already claimed');
        require(airdrops[msg.sender].value != 0, 'No airdrop value to claim');

        //Original value
        uint _value = airdrops[msg.sender].value;

        //Set as Claimed
        airdrops[msg.sender].claimed = true;
        //Clear value
        airdrops[msg.sender].value = 0;

        //Tokens are on airdropWallet
        address _from = airdropWallet;
        //Tokens goes to costumer
        address _to = msg.sender;
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);

        emit Transfer(_from, _to, _value);
        emit ClaimDrop(_to, _value);

        //STAKING RELATED//////////////////////////////////////////////
        if (staked[_from] != 0) staked[_from] = 0;
        uint64 _now = uint64(now);
        lastTransfer[_from] = transferInStruct(uint128(balances[_from]), _now);

        if (_from != _to) { //Prevent double stake

            if (uint(lastTransfer[_to].time) != 0) {
                uint nCoinSeconds = now.sub(uint(lastTransfer[_to].time));
                if (nCoinSeconds > stakeMaxAge) nCoinSeconds = stakeMaxAge;
                staked[_to] = staked[_to].add(uint(lastTransfer[_to].amount).mul(nCoinSeconds.div(1 days)));
            }
            lastTransfer[_to] = transferInStruct(uint128(balances[_to]), _now);
        }
        ///////////////////////////////////////////////////////////////

        return true;

    }

    /**
     * @dev userFreezeBalance
     * @dev Allow a user to safe Lock/Unlock it's balance
     * @param _lock Lock Status to set
     */
    function userFreezeBalance(bool _lock) public returns(bool) {
        userFreeze[msg.sender] = _lock;
        return userFreeze[msg.sender];
    }

    //UTILITY SECTION ENDS
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //ESCROW FUNCTIONS
    /**
     * @dev createPaymentRequest
     * @dev Allow an user to request start a Escrow process
     * @param _customer Counterpart that will receive payment on success
     * @param _value Amount to be escrowed
     * @param _description Description
     */
    function createPaymentRequest(
        address _customer,
        uint _value,
        string calldata _description
    )
    external
    escrowIsEnabled()
    notFrozen(msg.sender)
    returns(uint) {

        require(_customer != address(0), 'Address cannot be zero');
        require(_value > 0, 'Value cannot be zero');

        payments[escrowCounter] = Payment(msg.sender, _customer, _value, _description, PaymentStatus.Requested, false);
        emit PaymentCreation(escrowCounter, msg.sender, _customer, _value, _description);

        escrowCounter = escrowCounter.add(1);
        return escrowCounter - 1;

    }

    /**
     * @dev answerPaymentRequest
     * @dev Allow a user to answer to a Escrow process
     * @param _orderId the request ticket number
     * @param _answer request answer
     */
    function answerPaymentRequest(uint _orderId, bool _answer) external returns(bool) {
        //Get Payment Handler
        Payment storage payment = payments[_orderId];

        require(payment.status == PaymentStatus.Requested, 'Ticket wrong status, expected "Requested"');
        require(payment.customer == msg.sender, 'You are not allowed to manage this ticket');

        if (_answer == true) {

            address _to = address(this);

            balances[payment.provider] = balances[payment.provider].sub(payment.value);
            balances[_to] = balances[_to].add(payment.value);
            emit Transfer(payment.provider, _to, payment.value);

            //STAKING RELATED//////////////////////////////////////////////
            if (staked[payment.provider] != 0) staked[payment.provider] = 0;
            uint64 _now = uint64(now);
            lastTransfer[payment.provider] = transferInStruct(uint128(balances[payment.provider]), _now);
            ///////////////////////////////////////////////////////////////

            payments[_orderId].status = PaymentStatus.Pending;

            emit PaymentUpdate(_orderId, payment.provider, payment.customer, payment.value, PaymentStatus.Pending);

        } else {

            payments[_orderId].status = PaymentStatus.Rejected;

            emit PaymentUpdate(_orderId, payment.provider, payment.customer, payment.value, PaymentStatus.Rejected);

        }

        return true;
    }


    /**
     * @dev release
     * @dev Allow a provider or admin user to release a payment
     * @param _orderId Ticket number of the escrow service
     */
    function release(uint _orderId) external returns(bool) {
        //Get Payment Handler
        Payment storage payment = payments[_orderId];
        //Only if pending
        require(payment.status == PaymentStatus.Pending, 'Ticket wrong status, expected "Pending"');
        //Only owner or token provider
        require(level[msg.sender] >= 2 || msg.sender == payment.provider, 'You are not allowed to manage this ticket');
        //Tokens are on contract
        address _from = address(this);
        //Tokens goes to costumer
        address _to = payment.customer;
        //Original value
        uint _value = payment.value;
        //Fee calculation
        uint _fee = _value.mul(escrowFeePercent).div(1000);
        //Value less fees
        _value = _value.sub(_fee);
        //Costumer transfer
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(_from, _to, _value);
        //collectionAddress fee recolection
        balances[_from] = balances[_from].sub(_fee);
        balances[collectionAddress] = balances[collectionAddress].add(_fee);
        emit Transfer(_from, collectionAddress, _fee);

        //STAKING RELATED//////////////////////////////////////////////
        if (staked[_from] != 0) staked[_from] = 0;
        uint64 _now = uint64(now);
        lastTransfer[_from] = transferInStruct(uint128(balances[_from]), _now);

        if (_from != _to) { //Prevent double stake

            if (uint(lastTransfer[_to].time) != 0) {
                uint nCoinSeconds = now.sub(uint(lastTransfer[_to].time));
                if (nCoinSeconds > stakeMaxAge) nCoinSeconds = stakeMaxAge;
                staked[_to] = staked[_to].add(uint(lastTransfer[_to].amount).mul(nCoinSeconds.div(1 days)));
            }
            lastTransfer[_to] = transferInStruct(uint128(balances[_to]), _now);
        }

        if (uint(lastTransfer[collectionAddress].time) != 0) {
            uint nCoinSeconds = now.sub(uint(lastTransfer[collectionAddress].time));
            if (nCoinSeconds > stakeMaxAge) nCoinSeconds = stakeMaxAge;
            staked[collectionAddress] = staked[collectionAddress].add(uint(lastTransfer[collectionAddress].amount).mul(nCoinSeconds.div(1 days)));
        }
        lastTransfer[collectionAddress] = transferInStruct(uint128(_fee), _now);
        ///////////////////////////////////////////////////////////////


        //Payment Escrow Completed
        payment.status = PaymentStatus.Completed;
        //Emit Event
        emit PaymentUpdate(_orderId, payment.provider, payment.customer, payment.value, payment.status);

        return true;
    }

    /**
     * @dev refund
     * @dev Allow a user to refund a payment
     * @param _orderId Ticket number of the escrow service
     */
    function refund(uint _orderId) external returns(bool) {
        //Get Payment Handler
        Payment storage payment = payments[_orderId];
        //Only if pending
        require(payment.status == PaymentStatus.Pending, 'Ticket wrong status, expected "Pending"');
        //Only if refund was approved
        require(payment.refundApproved, 'Refund has not been approved yet');
        //Only owner or token provider
        require(level[msg.sender] >= 2 || msg.sender == payment.provider, 'You are not allowed to manage this ticket');
        //Tokens are on contract
        address _from = address(this);
        //Tokens go back to provider
        address _to = payment.provider;
        //Original value
        uint _value = payment.value;
        //Provider transfer
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(_from, _to, _value);
        
        //STAKING RELATED//////////////////////////////////////////////
        if (staked[_from] != 0) staked[_from] = 0;
        uint64 _now = uint64(now);
        lastTransfer[_from] = transferInStruct(uint128(balances[_from]), _now);

        if (_from != _to) { //Prevent double stake

            if (uint(lastTransfer[_to].time) != 0) {
                uint nCoinSeconds = now.sub(uint(lastTransfer[_to].time));
                if (nCoinSeconds > stakeMaxAge) nCoinSeconds = stakeMaxAge;
                staked[_to] = staked[_to].add(uint(lastTransfer[_to].amount).mul(nCoinSeconds.div(1 days)));
            }
            lastTransfer[_to] = transferInStruct(uint128(balances[_to]), _now);
        }
        ///////////////////////////////////////////////////////////////
        
        //Payment Escrow Refunded
        payment.status = PaymentStatus.Refunded;
        //Emit Event
        emit PaymentUpdate(_orderId, payment.provider, payment.customer, payment.value, payment.status);

        return true;
    }

    /**
     * @dev approveRefund
     * @dev Allow a user to approve a refund
     * @param _orderId Ticket number of the escrow service
     */
    function approveRefund(uint _orderId) external returns(bool) {
        //Get Payment Handler
        Payment storage payment = payments[_orderId];
        //Only if pending
        require(payment.status == PaymentStatus.Pending, 'Ticket wrong status, expected "Pending"');
        //Only owner or costumer
        require(level[msg.sender] >= 2 || msg.sender == payment.customer, 'You are not allowed to manage this ticket');
        //Approve Refund
        payment.refundApproved = true;

        emit PaymentRefundApprove(_orderId, payment.provider, payment.customer, payment.refundApproved);

        return true;
    }

    /**
     * @dev escrowLockSet
     * @dev Allow the owner to lock the escrow feature
     * @param _lock lock indicator
     */
    function escrowLockSet(bool _lock) external onlyAdmin(3) returns(bool) {
        escrowEnabled = _lock;
        emit EscrowLock(escrowEnabled);
        return true;
    }

    //ESCROW SECTION END
    ///////////////////////////////////////////////////////////////////
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getProofOfStakeReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newWallet","type":"address"}],"name":"setAirDropWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"coinAge","outputs":[{"name":"myCoinAge","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_orderId","type":"uint256"}],"name":"refund","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxTotalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"escrowFeePercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_orderId","type":"uint256"}],"name":"approveRefund","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_orderId","type":"uint256"}],"name":"release","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_lock","type":"bool"}],"name":"escrowLockSet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getBlockNumber","outputs":[{"name":"blockNumber","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userFreeze","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"chainStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimAirdrop","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"collectionAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"userAddress","type":"address"},{"name":"lvl","type":"uint256"}],"name":"setLevel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakeStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_orderId","type":"uint256"},{"name":"_answer","type":"bool"}],"name":"answerPaymentRequest","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"payments","outputs":[{"name":"provider","type":"address"},{"name":"customer","type":"address"},{"name":"value","type":"uint256"},{"name":"comment","type":"string"},{"name":"status","type":"uint8"},{"name":"refundApproved","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_recipients","type":"address[]"},{"name":"_values","type":"uint256[]"}],"name":"batchTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipients","type":"address[]"},{"name":"_values","type":"uint256[]"}],"name":"dropSet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"airdrops","outputs":[{"name":"value","type":"uint256"},{"name":"claimed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalInitialSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airdropWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_lock","type":"bool"}],"name":"userFreezeBalance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"annualInterest","outputs":[{"name":"interest","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakeMinAge","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"setStakeStartTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"chainStartBlockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"level","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"escrowEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakeMaxAge","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimStake","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_customer","type":"address"},{"name":"_value","type":"uint256"},{"name":"_description","type":"string"}],"name":"createPaymentRequest","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newWallet","type":"address"}],"name":"setCollectionWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_address","type":"address"},{"indexed":false,"name":"_reward","type":"uint256"}],"name":"ClaimStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newWallet","type":"address"}],"name":"NewCollectionWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"ClaimDrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newWallet","type":"address"}],"name":"NewAirdropWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"status","type":"bool"}],"name":"GlobalFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"status","type":"bool"}],"name":"EscrowLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newFee","type":"uint256"}],"name":"NewFeeRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"orderId","type":"uint256"},{"indexed":true,"name":"provider","type":"address"},{"indexed":true,"name":"customer","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"description","type":"string"}],"name":"PaymentCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"orderId","type":"uint256"},{"indexed":true,"name":"provider","type":"address"},{"indexed":true,"name":"customer","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"status","type":"uint8"}],"name":"PaymentUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"orderId","type":"uint256"},{"indexed":true,"name":"provider","type":"address"},{"indexed":true,"name":"customer","type":"address"},{"indexed":false,"name":"status","type":"bool"}],"name":"PaymentRefundApprove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"lvl","type":"uint256"}],"name":"LevelSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

60c0604052600960808190527f4f4d4e49532d424954000000000000000000000000000000000000000000000060a090815262000040916006919062000259565b506040805180820190915260058082527f4f4d4e49530000000000000000000000000000000000000000000000000000006020909201918252620000879160079162000259565b506040805180820190915260028082527f76340000000000000000000000000000000000000000000000000000000000006020909201918252620000ce9160089162000259565b5060098054601260ff19918216811790925560029091556013805490911660011790556203f4806019556276a700601a553480156200010c57600080fd5b50600480546001600160a01b03191633178082556001600160a01b03908116600090815260056020526040808220600390559254925192909116917f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe29190a26004546001600160a01b031660008181526005602090815260409182902054825190815291517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a26b033b2e3c9fd0803ce8000000600b556b02a649c112686927b4000000600c8190554260165543601755600a81905560158054336001600160a01b03199182168117909255600f8054909116821790556000818152600d60209081526040808320859055805194855251929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3620002fe565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200029c57805160ff1916838001178555620002cc565b82800160010185558215620002cc579182015b82811115620002cc578251825591602001919060010190620002af565b50620002da929150620002de565b5090565b620002fb91905b80821115620002da5760008155600101620002e5565b90565b614240806200030e6000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c806381deb8021161015c578063b2552fc4116100ce578063dd62ed3e11610087578063dd62ed3e146108de578063e1c3bac61461090c578063eb32117314610914578063ec8c1b541461091c578063ee78b8331461099f578063f2fde38b146109c55761028a565b8063b2552fc41461087b578063cbd8877e14610883578063cc1b63d51461088b578063cd474b04146108a8578063d41b6db6146108b0578063db15c93c146108d65761028a565b80638da5cb5b116101205780638da5cb5b1461081057806395d89b41146108185780639fd4da4014610820578063a14779c914610828578063a9059cbb14610830578063ae7109341461085c5761028a565b806381deb8021461055a57806387d817891461057f57806388d695b2146106555780638bfa9207146107135780638c86f0a7146107d15761028a565b8063348a71a6116102005780635b054f9b116101b95780635b054f9b146104cc5780635b88349d146104d45780636aa00371146104dc57806370a0823114610500578063722dcd8f146105265780637419f190146105525761028a565b8063348a71a61461043d57806337bdc99b1461045a578063427bad251461047757806342cbb15c146104965780634e1c3fc51461049e57806354fd4d50146104c45761028a565b80631e1b13c0116102525780631e1b13c0146103b457806323b872dd146103bc578063278ecde1146103f25780632ab4d0521461040f5780632c3ce5fa14610417578063313ce5671461041f5761028a565b806306fdde031461028f578063095ea7b31461030c5780630d6dcab31461034c578063176ede631461038457806318160ddd146103ac575b600080fd5b6102976109eb565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d15781810151838201526020016102b9565b50505050905090810190601f1680156102fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103386004803603604081101561032257600080fd5b506001600160a01b038135169060200135610a79565b604080519115158252519081900360200190f35b6103726004803603602081101561036257600080fd5b50356001600160a01b0316610ae0565b60408051918252519081900360200190f35b6103aa6004803603602081101561039a57600080fd5b50356001600160a01b0316610c9c565b005b610372610d91565b610372610d97565b610338600480360360608110156103d257600080fd5b506001600160a01b03813581169160208101359091169060400135610da8565b6103386004803603602081101561040857600080fd5b5035611195565b61037261161f565b610372611625565b61042761162b565b6040805160ff9092168252519081900360200190f35b6103386004803603602081101561045357600080fd5b5035611634565b6103386004803603602081101561047057600080fd5b503561176b565b6103386004803603602081101561048d57600080fd5b50351515611dfb565b610372611e9e565b610338600480360360208110156104b457600080fd5b50356001600160a01b0316611eb5565b610297611eca565b610372611f25565b610338611f2b565b6104e461234a565b604080516001600160a01b039092168252519081900360200190f35b6103726004803603602081101561051657600080fd5b50356001600160a01b0316612359565b6103aa6004803603604081101561053c57600080fd5b506001600160a01b038135169060200135612374565b61037261250c565b6103386004803603604081101561057057600080fd5b50803590602001351515612512565b61059c6004803603602081101561059557600080fd5b5035612811565b604080516001600160a01b0380891682528716602082015290810185905260608101608082018460048111156105ce57fe5b60ff16815260200183151515158152602001828103825285818151815260200191508051906020019080838360005b838110156106155781810151838201526020016105fd565b50505050905090810190601f1680156106425780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b6103386004803603604081101561066b57600080fd5b810190602081018135600160201b81111561068557600080fd5b82018360208201111561069757600080fd5b803590602001918460208302840111600160201b831117156106b857600080fd5b919390929091602081019035600160201b8111156106d557600080fd5b8201836020820111156106e757600080fd5b803590602001918460208302840111600160201b8311171561070857600080fd5b5090925090506128e3565b6103386004803603604081101561072957600080fd5b810190602081018135600160201b81111561074357600080fd5b82018360208201111561075557600080fd5b803590602001918460208302840111600160201b8311171561077657600080fd5b919390929091602081019035600160201b81111561079357600080fd5b8201836020820111156107a557600080fd5b803590602001918460208302840111600160201b831117156107c657600080fd5b509092509050612e11565b6107f7600480360360208110156107e757600080fd5b50356001600160a01b0316612f5f565b6040805192835290151560208301528051918290030190f35b6104e4612f7b565b610297612f8a565b610372612fe5565b6104e4612feb565b6103386004803603604081101561084657600080fd5b506001600160a01b038135169060200135612ffa565b6103386004803603602081101561087257600080fd5b503515156133c9565b6103726133ef565b6103726134fc565b6103aa600480360360208110156108a157600080fd5b5035613502565b6103726135ad565b610372600480360360208110156108c657600080fd5b50356001600160a01b03166135b3565b6103386135c5565b610372600480360360408110156108f457600080fd5b506001600160a01b03813581169160200135166135ce565b6103726135f9565b6103386135ff565b6103726004803603606081101561093257600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561096157600080fd5b82018360208201111561097357600080fd5b803590602001918460018302840111600160201b8311171561099457600080fd5b5090925090506137dc565b6103aa600480360360208110156109b557600080fd5b50356001600160a01b0316613aef565b6103aa600480360360208110156109db57600080fd5b50356001600160a01b0316613be4565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a715780601f10610a4657610100808354040283529160200191610a71565b820191906000526020600020905b815481529060010190602001808311610a5457829003601f168201915b505050505081565b336000818152600e602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60006018544210158015610af657506000601854115b610b47576040805162461bcd60e51b815260206004820152601a60248201527f5374616b696e67206973206e6f742079657420656e61626c6564000000000000604482015290519081900360640190fd5b426000610b548483613d79565b905060008111610b6957600092505050610c97565b60185466038d7ea4c6800090610b9c906301e1338090610b9090869063ffffffff613e2616565b9063ffffffff613e8316565b610baf575067017896703a310000610c77565b610bcc6301e13380610b9060185486613e2690919063ffffffff16565b60011415610be2575066ae153d89fe8000610c77565b610bff6301e13380610b9060185486613e2690919063ffffffff16565b60021415610c155750665543df729c0000610c77565b610c326301e13380610b9060185486613e2690919063ffffffff16565b60031415610c485750662e2f6e5e148000610c77565b610c656301e13380610b9060185486613e2690919063ffffffff16565b60041415610c77575066271471148780005b600954610c91908284029060ff16600a0a61016d02613e83565b93505050505b919050565b33600090815260056020526040902054600390811115610ced5760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b6001600160a01b038216610d36576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b600f80546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517ffc4d4f776e81f0d8fc28fe53de66ffc5e9c082fc6df83aa57699acf700d219e3916020908290030190a15050565b600a5481565b6000610da33342613d79565b905090565b6001600160a01b0383166000908152601b6020526040812054849060ff1615610e15576040805162461bcd60e51b815260206004820152601a6024820152792130b630b731b290333937bd32b710313c903a3432903ab9b2b960311b604482015290519081900360640190fd5b6001600160a01b038416610e5e576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b6001600160a01b0385166000818152600e60209081526040808320338452825280832054938352600d909152902054610e9d908563ffffffff613e2616565b6001600160a01b038088166000908152600d60205260408082209390935590871681522054610ed2908563ffffffff613eed16565b6001600160a01b0386166000908152600d6020526040902055610efb818563ffffffff613e2616565b6001600160a01b038088166000818152600e6020908152604080832033845282529182902094909455805188815290519289169391926000805160206140f4833981519152929181900390910190a36001600160a01b0386166000908152601c602052604090205415610f82576001600160a01b0386166000908152601c60205260408120555b6040805180820182526001600160a01b038881166000818152600d6020908152858220546001600160801b039081168652426001600160401b03818116848901908152868652601d909452979093209551865492516001600160801b0319909316911617600160801b600160c01b031916600160801b919096160294909417909255871614611188576001600160a01b0386166000908152601d6020526040902054600160801b90046001600160401b031615611105576001600160a01b0386166000908152601d602052604081205461106d904290600160801b90046001600160401b0316613e26565b9050601a5481111561107e5750601a545b6110ea6110c5611097836201518063ffffffff613e8316565b6001600160a01b038a166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6001600160a01b0389166000908152601c60205260409020549063ffffffff613eed16565b6001600160a01b0388166000908152601c6020526040902055505b6040805180820182526001600160a01b0388166000818152600d6020908152848220546001600160801b0390811685526001600160401b03878116838701908152948452601d909252949091209251835492516001600160801b0319909316941693909317600160801b600160c01b031916600160801b91909316029190911790555b5060019695505050505050565b6000818152601460205260408120600260048083015460ff16908111156111b857fe5b146111f45760405162461bcd60e51b81526004018080602001828103825260278152602001806141e56027913960400191505060405180910390fd5b6004810154610100900460ff16611252576040805162461bcd60e51b815260206004820181905260248201527f526566756e6420686173206e6f74206265656e20617070726f76656420796574604482015290519081900360640190fd5b33600090815260056020526040902054600211158061127a575080546001600160a01b031633145b6112b55760405162461bcd60e51b815260040180806020018281038252602981526020018061419c6029913960400191505060405180910390fd5b80546002820154306000818152600d602052604090205490926001600160a01b031691906112e9908263ffffffff613e2616565b6001600160a01b038085166000908152600d6020526040808220939093559084168152205461131e908263ffffffff613eed16565b6001600160a01b038084166000818152600d602090815260409182902094909455805185815290519193928716926000805160206140f483398151915292918290030190a36001600160a01b0383166000908152601c60205260409020541561139b576001600160a01b0383166000908152601c60205260408120555b6040805180820182526001600160a01b038581166000818152600d6020908152858220546001600160801b039081168652426001600160401b03818116848901908152868652601d909452979093209551865492516001600160801b0319909316911617600160801b600160c01b031916600160801b9190961602949094179092558416146115a1576001600160a01b0383166000908152601d6020526040902054600160801b90046001600160401b03161561151e576001600160a01b0383166000908152601d6020526040812054611486904290600160801b90046001600160401b0316613e26565b9050601a548111156114975750601a545b6115036114de6114b0836201518063ffffffff613e8316565b6001600160a01b0387166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6001600160a01b0386166000908152601c60205260409020549063ffffffff613eed16565b6001600160a01b0385166000908152601c6020526040902055505b6040805180820182526001600160a01b0385166000818152600d6020908152848220546001600160801b0390811685526001600160401b03878116838701908152948452601d909252949091209251835492516001600160801b0319909316941693909317600160801b600160c01b031916600160801b91909316029190911790555b6004858101805460ff19168217908190556001870154875460028901546040518181526001600160a01b039384169593909216938c936000805160206140a48339815191529360ff9092169190602082019083908111156115fe57fe5b60ff1681526020019250505060405180910390a45060019695505050505050565b600b5481565b60125481565b60095460ff1681565b6000818152601460205260408120600260048083015460ff169081111561165757fe5b146116935760405162461bcd60e51b81526004018080602001828103825260278152602001806141e56027913960400191505060405180910390fd5b3360009081526005602052604090205460021115806116be575060018101546001600160a01b031633145b6116f95760405162461bcd60e51b815260040180806020018281038252602981526020018061419c6029913960400191505060405180910390fd5b60048101805461ff0019166101009081179182905560018301548354604080519390940460ff161515835292516001600160a01b03918216939091169186917fc65ac2becb2e9b9bcd53a2316ae3e6a55220f37ad81a9911cc7cb865fdc2cb4c9181900360200190a450600192915050565b6000818152601460205260408120600260048083015460ff169081111561178e57fe5b146117ca5760405162461bcd60e51b81526004018080602001828103825260278152602001806141e56027913960400191505060405180910390fd5b3360009081526005602052604090205460021115806117f2575080546001600160a01b031633145b61182d5760405162461bcd60e51b815260040180806020018281038252602981526020018061419c6029913960400191505060405180910390fd5b6001810154600282015460125430926001600160a01b03169190600090611863906103e890610b9090859063ffffffff613f4e16565b9050611875828263ffffffff613e2616565b6001600160a01b0385166000908152600d60205260409020549092506118a1908363ffffffff613e2616565b6001600160a01b038086166000908152600d602052604080822093909355908516815220546118d6908363ffffffff613eed16565b6001600160a01b038085166000818152600d602090815260409182902094909455805186815290519193928816926000805160206140f483398151915292918290030190a36001600160a01b0384166000908152600d6020526040902054611944908263ffffffff613e2616565b6001600160a01b038086166000908152600d6020526040808220939093556015549091168152205461197c908263ffffffff613eed16565b601580546001600160a01b039081166000908152600d60209081526040918290209490945591548251858152925190821693918816926000805160206140f483398151915292908290030190a36001600160a01b0384166000908152601c602052604090205415611a01576001600160a01b0384166000908152601c60205260408120555b6040805180820182526001600160a01b038681166000818152600d6020908152858220546001600160801b039081168652426001600160401b03818116848901908152868652601d909452979093209551865492516001600160801b0319909316911617600160801b600160c01b031916600160801b919096160294909417909255851614611c07576001600160a01b0384166000908152601d6020526040902054600160801b90046001600160401b031615611b84576001600160a01b0384166000908152601d6020526040812054611aec904290600160801b90046001600160401b0316613e26565b9050601a54811115611afd5750601a545b611b69611b44611b16836201518063ffffffff613e8316565b6001600160a01b0388166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6001600160a01b0387166000908152601c60205260409020549063ffffffff613eed16565b6001600160a01b0386166000908152601c6020526040902055505b6040805180820182526001600160a01b0386166000818152600d6020908152848220546001600160801b0390811685526001600160401b03878116838701908152948452601d909252949091209251835492516001600160801b0319909316941693909317600160801b600160c01b031916600160801b91909316029190911790555b6015546001600160a01b03166000908152601d6020526040902054600160801b90046001600160401b031615611d0b576015546001600160a01b03166000908152601d6020526040812054611c6d904290600160801b90046001600160401b0316613e26565b9050601a54811115611c7e5750601a545b611cee611cc7611c97836201518063ffffffff613e8316565b6015546001600160a01b03166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6015546001600160a01b03166000908152601c60205260409020549063ffffffff613eed16565b6015546001600160a01b03166000908152601c6020526040902055505b6040805180820182526001600160801b0384811682526001600160401b0384811660208085019182526015546001600160a01b039081166000908152601d8352879020955186549351909416600160801b02600160801b600160c01b0319949095166001600160801b03199093169290921792909216929092179092556004898101805460ff19166003179081905560018b01548b5460028d01549651878152918516969416948e946000805160206140a483398151915294909360ff1692918201908390811115611dd957fe5b60ff1681526020019250505060405180910390a4506001979650505050505050565b33600090815260056020526040812054600390811115611e4c5760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b6013805460ff191684151517908190556040805160ff90921615158252517ff9ed57c1eaa5c6ec721dc109448dedf9d17229b260b0a448b8e2ae866947da66916020908290030190a150600192915050565b6000610da360175443613e2690919063ffffffff16565b601b6020526000908152604090205460ff1681565b6008805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a715780601f10610a4657610100808354040283529160200191610a71565b60165481565b3360009081526010602052604081206001015460ff1615611f93576040805162461bcd60e51b815260206004820152601760248201527f41697264726f7020616c726561647920636c61696d6564000000000000000000604482015290519081900360640190fd5b33600090815260106020526040902054611ff4576040805162461bcd60e51b815260206004820152601960248201527f4e6f2061697264726f702076616c756520746f20636c61696d00000000000000604482015290519081900360640190fd5b33600081815260106020908152604080832080546001808301805460ff1916909117905590849055600f546001600160a01b0316808552600d90935292205491929091612047908463ffffffff613e2616565b6001600160a01b038084166000908152600d6020526040808220939093559083168152205461207c908463ffffffff613eed16565b6001600160a01b038083166000818152600d602090815260409182902094909455805187815290519193928616926000805160206140f483398151915292918290030190a36040805184815290516001600160a01b038316917f85a627733b5275fd9f62e7af950b23750d9d10f58202b4a491b4b21905076dfe919081900360200190a26001600160a01b0382166000908152601c602052604090205415612138576001600160a01b0382166000908152601c60205260408120555b6040805180820182526001600160a01b038481166000818152600d6020908152858220546001600160801b039081168652426001600160401b03818116848901908152868652601d909452979093209551865492516001600160801b0319909316911617600160801b600160c01b031916600160801b91909616029490941790925583161461233e576001600160a01b0382166000908152601d6020526040902054600160801b90046001600160401b0316156122bb576001600160a01b0382166000908152601d6020526040812054612223904290600160801b90046001600160401b0316613e26565b9050601a548111156122345750601a545b6122a061227b61224d836201518063ffffffff613e8316565b6001600160a01b0386166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6001600160a01b0385166000908152601c60205260409020549063ffffffff613eed16565b6001600160a01b0384166000908152601c6020526040902055505b6040805180820182526001600160a01b0384166000818152600d6020908152848220546001600160801b0390811685526001600160401b03878116838701908152948452601d909252949091209251835492516001600160801b0319909316941693909317600160801b600160c01b031916600160801b91909316029190911790555b60019450505050505b90565b6015546001600160a01b031681565b6001600160a01b03166000908152600d602052604090205490565b336000908152600560205260409020546002908111156123c55760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b6001600160a01b03831661240e576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b33600090815260056020526040902054821061245b5760405162461bcd60e51b81526004018080602001828103825260348152602001806141146034913960400191505060405180910390fd5b6001600160a01b03831660009081526005602052604080822054338352912054116124b75760405162461bcd60e51b81526004018080602001828103825260308152602001806140c46030913960400191505060405180910390fd5b6001600160a01b038316600081815260056020908152604091829020859055815185815291517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a2505050565b60185481565b60008281526014602052604081208160048083015460ff169081111561253457fe5b146125705760405162461bcd60e51b815260040180806020018281038252602981526020018061405a6029913960400191505060405180910390fd5b60018101546001600160a01b031633146125bb5760405162461bcd60e51b815260040180806020018281038252602981526020018061419c6029913960400191505060405180910390fd5b6001831515141561279e57600281015481546001600160a01b03166000908152600d602052604090205430916125f7919063ffffffff613e2616565b82546001600160a01b039081166000908152600d6020526040808220939093556002850154918416815291909120546126359163ffffffff613eed16565b6001600160a01b038083166000818152600d602090815260409182902094909455855460028701548251908152915192949316926000805160206140f483398151915292918290030190a381546001600160a01b03166000908152601c6020526040902054156126ba5781546001600160a01b03166000908152601c60205260408120555b60408051808201825283546001600160a01b039081166000818152600d6020908152858220546001600160801b0390811686526001600160401b0342818116848901908152958552601d8452888520975188549651909216600160801b02600160801b600160c01b0319929093166001600160801b0319909616959095171617909455898152601484528490206004018054600260ff1990911681179091556001870154875482890154875190815295860192909252855192959084169491909316928a926000805160206140a48339815191529281900390910190a45050612807565b600084815260146020908152604091829020600401805460ff19166001908117909155838101548454600286015485519081529384019290925283516001600160a01b0391821694919092169288926000805160206140a4833981519152929181900390910190a45b5060019392505050565b601460209081526000918252604091829020805460018083015460028085015460038601805489516101009682161596909602600019011692909204601f81018890048802850188019098528784526001600160a01b0394851697949092169591949390918301828280156128c75780601f1061289c576101008083540402835291602001916128c7565b820191906000526020600020905b8154815290600101906020018083116128aa57829003601f168201915b5050506004909301549192505060ff8082169161010090041686565b336000908152600560205260408120546001908111156129345760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b841580159061294257508483145b61297d5760405162461bcd60e51b81526004018080602001828103825260258152602001806141776025913960400191505060405180910390fd5b6000805b848110156129b8576129ae86868381811061299857fe5b9050602002013583613eed90919063ffffffff16565b9150600101612981565b50336000908152600d6020526040902054811115612a075760405162461bcd60e51b81526004018080602001828103825260248152602001806140366024913960400191505060405180910390fd5b4260005b87811015612d3a57612a78878783818110612a2257fe5b90506020020135600d60008c8c86818110612a3957fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054613eed90919063ffffffff16565b600d60008b8b85818110612a8857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550601d60008a8a84818110612acc57fe5b602090810292909201356001600160a01b031683525081019190915260400160002054600160801b90046001600160401b031615612c15576000612b53601d60008c8c86818110612b1957fe5b602090810292909201356001600160a01b0316835250810191909152604001600020544290600160801b90046001600160401b0316613e26565b9050601a54811115612b645750601a545b612bcf612bbf612b7d836201518063ffffffff613e8316565b601d60008e8e88818110612b8d57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020546001600160801b031690613f4e565b601c60008d8d87818110612a3957fe5b601c60008c8c86818110612bdf57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550505b6040518060400160405280888884818110612c2c57fe5b905060200201356001600160801b03168152602001836001600160401b0316815250601d60008b8b85818110612c5e57fe5b602090810292909201356001600160a01b0316835250818101929092526040016000208251815493909201516001600160801b03199093166001600160801b0390921691909117600160801b600160c01b031916600160801b6001600160401b0390931692909202919091179055888882818110612cd857fe5b905060200201356001600160a01b03166001600160a01b0316336001600160a01b03166000805160206140f4833981519152898985818110612d1657fe5b905060200201356040518082815260200191505060405180910390a3600101612a0b565b50336000908152600d6020526040902054612d5b908363ffffffff613e2616565b336000908152600d6020908152604080832093909355601c9052205415612d8d57336000908152601c60205260408120555b604080518082018252336000818152600d6020908152848220546001600160801b0390811685526001600160401b03968716828601908152938352601d909152939020915182549151909416600160801b02600160801b600160c01b0319949093166001600160801b03199091161792909216179055506001915050949350505050565b33600090815260056020526040812054600190811115612e625760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b8415801590612e7057508483145b612eab5760405162461bcd60e51b81526004018080602001828103825260258152602001806141776025913960400191505060405180910390fd5b60005b8581101561118857848482818110612ec257fe5b9050602002013560106000898985818110612ed957fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060000181905550600060106000898985818110612f2257fe5b602090810292909201356001600160a01b03168352508101919091526040016000206001908101805460ff19169215159290921790915501612eae565b6010602052600090815260409020805460019091015460ff1682565b6004546001600160a01b031681565b6007805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a715780601f10610a4657610100808354040283529160200191610a71565b600c5481565b600f546001600160a01b031681565b336000818152601b602052604081205490919060ff161561305f576040805162461bcd60e51b815260206004820152601a6024820152792130b630b731b290333937bd32b710313c903a3432903ab9b2b960311b604482015290519081900360640190fd5b6001600160a01b0384166130a8576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b6001600160a01b038416301415613106576040805162461bcd60e51b815260206004820152601f60248201527f416464726573732063616e6e6f74206265207468697320636f6e747261637400604482015290519081900360640190fd5b336001600160a01b03851614156131265761311f6135ff565b91506133c2565b336000908152600d6020526040902054613146908463ffffffff613e2616565b336000908152600d6020526040808220929092556001600160a01b03861681522054613178908463ffffffff613eed16565b6001600160a01b0385166000818152600d60209081526040918290209390935580518681529051919233926000805160206140f48339815191529281900390910190a3336000908152601c6020526040902054156131e157336000908152601c60205260408120555b604080518082018252336000818152600d6020908152848220546001600160801b039081168552426001600160401b03818116848801908152958552601d9093528684209551865495516001600160801b0319909616921691909117600160801b600160c01b031916600160801b9483168502179094556001600160a01b03891682529390205491929104161561333e576001600160a01b0385166000908152601d60205260408120546132a6904290600160801b90046001600160401b0316613e26565b9050601a548111156132b75750601a545b6133236132fe6132d0836201518063ffffffff613e8316565b6001600160a01b0389166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6001600160a01b0388166000908152601c60205260409020549063ffffffff613eed16565b6001600160a01b0387166000908152601c6020526040902055505b6040805180820182526001600160a01b0387166000818152600d6020908152848220546001600160801b0390811685526001600160401b03968716828601908152938352601d909152939020915182549151909416600160801b02600160801b600160c01b0319949093166001600160801b03199091161792909216179055600191505b5092915050565b336000908152601b60205260409020805460ff1916911515919091179081905560ff1690565b60185466038d7ea4c68000904290613418906301e1338090610b9090849063ffffffff613e2616565b61342c5767017896703a31000091506134f8565b6134496301e13380610b9060185484613e2690919063ffffffff16565b600114156134605766ae153d89fe800091506134f8565b61347d6301e13380610b9060185484613e2690919063ffffffff16565b6002141561349457665543df729c000091506134f8565b6134b16301e13380610b9060185484613e2690919063ffffffff16565b600314156134c857662e2f6e5e14800091506134f8565b6134e56301e13380610b9060185484613e2690919063ffffffff16565b600414156134f857662714711487800091505b5090565b60195481565b336000908152600560205260409020546003908111156135535760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b60185415801561356557506016548210155b6135a7576040805162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81d1a5b59481cd95d60921b604482015290519081900360640190fd5b50601855565b60175481565b60056020526000908152604090205481565b60135460ff1681565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b601a5481565b6000600b54600a541061364e576040805162461bcd60e51b815260206004820152601260248201527113585e081cdd5c1c1b1e481c995858da195960721b604482015290519081900360640190fd5b336000908152600d602052604090205461366a57506000612347565b600061367533610ae0565b9050600b5461368f82600a54613eed90919063ffffffff16565b11156136ad57600a54600b546136aa9163ffffffff613e2616565b90505b600081116136bf576000915050612347565b600a546136d2908263ffffffff613eed16565b600a55336000908152600d60205260409020546136f5908263ffffffff613eed16565b336000818152600d60209081526040808320948555601c82528083208390558051808201825294546001600160801b0390811686526001600160401b0342818116888601908152878752601d8652848720985189549151909316600160801b02600160801b600160c01b0319939094166001600160801b0319909116179190911691909117909555805186815290516000805160206140f4833981519152929181900390910190a360408051838152905133917f157fac8fd4f41c05fc4eb4fc76efaff83b44dde65830c8474bbda846b6cebbcb919081900360200190a260019250505090565b60135460009060ff161515600114613830576040805162461bcd60e51b8152602060048201526012602482015271115cd8dc9bddc81a5cc8111a5cd8589b195960721b604482015290519081900360640190fd5b336000818152601b602052604090205460ff1615613892576040805162461bcd60e51b815260206004820152601a6024820152792130b630b731b290333937bd32b710313c903a3432903ab9b2b960311b604482015290519081900360640190fd5b6001600160a01b0386166138db576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b60008511613927576040805162461bcd60e51b815260206004820152601460248201527356616c75652063616e6e6f74206265207a65726f60601b604482015290519081900360640190fd5b6040518060c00160405280336001600160a01b03168152602001876001600160a01b0316815260200186815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020808301829052604092830182905260115482526014815290829020835181546001600160a01b039182166001600160a01b031991821617835585840151600184018054919093169116179055918301516002830155606083015180516139fc9260038501920190613fa7565b5060808201518160040160006101000a81548160ff02191690836004811115613a2157fe5b021790555060a08201518160040160016101000a81548160ff021916908315150217905550905050856001600160a01b0316336001600160a01b03166011547fa6de25ec225b198e8219d2afbfa9b7a76fea3c9c02b1ed34880f4a338aa19d1388888860405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a4601154613adc90600163ffffffff613eed16565b6011819055600019019695505050505050565b33600090815260056020526040902054600390811115613b405760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b6001600160a01b038216613b89576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b601580546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517fb408f9ca0555ebd07984cfda88b709f9637edae44f4be9b3e1a2c54e5ea10b5d916020908290030190a15050565b33600090815260056020526040902054600390811115613c355760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b6001600160a01b038216613c7e576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b03848116919091178083558116600090815260056020526040808220600390559254925192909116917f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe29190a26004546001600160a01b031660008181526005602090815260409182902054825190815291517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a23360008181526005602090815260408083208390558051928352517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a25050565b6001600160a01b0382166000908152601c6020908152604080832054601d90925290912054600160801b90046001600160401b031615610ada576001600160a01b0383166000908152601d6020526040812054613de7908490600160801b90046001600160401b0316613e26565b9050601a54811115613df85750601a545b613e1e613e116114b0836201518063ffffffff613e8316565b839063ffffffff613eed16565b949350505050565b600082821115613e7d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000808211613ed9576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b6000828481613ee457fe5b04949350505050565b600082820183811015613f47576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082613f5d57506000610ada565b82820282848281613f6a57fe5b0414613f475760405162461bcd60e51b81526004018080602001828103825260218152602001806140836021913960400191505060405180910390fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613fe857805160ff1916838001178555614015565b82800160010185558215614015579182015b82811115614015578251825591602001919060010190613ffa565b506134f8926123479250905b808211156134f8576000815560010161402156fe4e6f7420656e6f7567682066756e647320666f7220746865207472616e73616374696f6e5469636b65742077726f6e67207374617475732c206578706563746564202252657175657374656422536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7756c968f05bc49a69dd99aa09b312b62b432db62df743893a786634f5b6a6c1fb596f7520646f206e6f7420686176652070726976696c6567657320666f722074686973206c6576656c206368616e6765ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef596f7520646f206e6f7420686176652070726976696c6567657320666f722074686973206c6576656c2061737369676e6d656e74596f7520646f206e6f7420686176652070726976696c6567657320666f722074686973207472616e73616374696f6e41646472657373657320616e642056616c75657320686176652077726f6e672073697a6573596f7520617265206e6f7420616c6c6f77656420746f206d616e6167652074686973207469636b6574416464726573732063616e6e6f74206265207a65726f000000000000000000005469636b65742077726f6e67207374617475732c206578706563746564202250656e64696e6722a265627a7a7230582080510e110c74db572f1e054964c125c4efa34a2b0b829e13049ae4061875395664736f6c63430005090032

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061028a5760003560e01c806381deb8021161015c578063b2552fc4116100ce578063dd62ed3e11610087578063dd62ed3e146108de578063e1c3bac61461090c578063eb32117314610914578063ec8c1b541461091c578063ee78b8331461099f578063f2fde38b146109c55761028a565b8063b2552fc41461087b578063cbd8877e14610883578063cc1b63d51461088b578063cd474b04146108a8578063d41b6db6146108b0578063db15c93c146108d65761028a565b80638da5cb5b116101205780638da5cb5b1461081057806395d89b41146108185780639fd4da4014610820578063a14779c914610828578063a9059cbb14610830578063ae7109341461085c5761028a565b806381deb8021461055a57806387d817891461057f57806388d695b2146106555780638bfa9207146107135780638c86f0a7146107d15761028a565b8063348a71a6116102005780635b054f9b116101b95780635b054f9b146104cc5780635b88349d146104d45780636aa00371146104dc57806370a0823114610500578063722dcd8f146105265780637419f190146105525761028a565b8063348a71a61461043d57806337bdc99b1461045a578063427bad251461047757806342cbb15c146104965780634e1c3fc51461049e57806354fd4d50146104c45761028a565b80631e1b13c0116102525780631e1b13c0146103b457806323b872dd146103bc578063278ecde1146103f25780632ab4d0521461040f5780632c3ce5fa14610417578063313ce5671461041f5761028a565b806306fdde031461028f578063095ea7b31461030c5780630d6dcab31461034c578063176ede631461038457806318160ddd146103ac575b600080fd5b6102976109eb565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d15781810151838201526020016102b9565b50505050905090810190601f1680156102fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103386004803603604081101561032257600080fd5b506001600160a01b038135169060200135610a79565b604080519115158252519081900360200190f35b6103726004803603602081101561036257600080fd5b50356001600160a01b0316610ae0565b60408051918252519081900360200190f35b6103aa6004803603602081101561039a57600080fd5b50356001600160a01b0316610c9c565b005b610372610d91565b610372610d97565b610338600480360360608110156103d257600080fd5b506001600160a01b03813581169160208101359091169060400135610da8565b6103386004803603602081101561040857600080fd5b5035611195565b61037261161f565b610372611625565b61042761162b565b6040805160ff9092168252519081900360200190f35b6103386004803603602081101561045357600080fd5b5035611634565b6103386004803603602081101561047057600080fd5b503561176b565b6103386004803603602081101561048d57600080fd5b50351515611dfb565b610372611e9e565b610338600480360360208110156104b457600080fd5b50356001600160a01b0316611eb5565b610297611eca565b610372611f25565b610338611f2b565b6104e461234a565b604080516001600160a01b039092168252519081900360200190f35b6103726004803603602081101561051657600080fd5b50356001600160a01b0316612359565b6103aa6004803603604081101561053c57600080fd5b506001600160a01b038135169060200135612374565b61037261250c565b6103386004803603604081101561057057600080fd5b50803590602001351515612512565b61059c6004803603602081101561059557600080fd5b5035612811565b604080516001600160a01b0380891682528716602082015290810185905260608101608082018460048111156105ce57fe5b60ff16815260200183151515158152602001828103825285818151815260200191508051906020019080838360005b838110156106155781810151838201526020016105fd565b50505050905090810190601f1680156106425780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b6103386004803603604081101561066b57600080fd5b810190602081018135600160201b81111561068557600080fd5b82018360208201111561069757600080fd5b803590602001918460208302840111600160201b831117156106b857600080fd5b919390929091602081019035600160201b8111156106d557600080fd5b8201836020820111156106e757600080fd5b803590602001918460208302840111600160201b8311171561070857600080fd5b5090925090506128e3565b6103386004803603604081101561072957600080fd5b810190602081018135600160201b81111561074357600080fd5b82018360208201111561075557600080fd5b803590602001918460208302840111600160201b8311171561077657600080fd5b919390929091602081019035600160201b81111561079357600080fd5b8201836020820111156107a557600080fd5b803590602001918460208302840111600160201b831117156107c657600080fd5b509092509050612e11565b6107f7600480360360208110156107e757600080fd5b50356001600160a01b0316612f5f565b6040805192835290151560208301528051918290030190f35b6104e4612f7b565b610297612f8a565b610372612fe5565b6104e4612feb565b6103386004803603604081101561084657600080fd5b506001600160a01b038135169060200135612ffa565b6103386004803603602081101561087257600080fd5b503515156133c9565b6103726133ef565b6103726134fc565b6103aa600480360360208110156108a157600080fd5b5035613502565b6103726135ad565b610372600480360360208110156108c657600080fd5b50356001600160a01b03166135b3565b6103386135c5565b610372600480360360408110156108f457600080fd5b506001600160a01b03813581169160200135166135ce565b6103726135f9565b6103386135ff565b6103726004803603606081101561093257600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561096157600080fd5b82018360208201111561097357600080fd5b803590602001918460018302840111600160201b8311171561099457600080fd5b5090925090506137dc565b6103aa600480360360208110156109b557600080fd5b50356001600160a01b0316613aef565b6103aa600480360360208110156109db57600080fd5b50356001600160a01b0316613be4565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a715780601f10610a4657610100808354040283529160200191610a71565b820191906000526020600020905b815481529060010190602001808311610a5457829003601f168201915b505050505081565b336000818152600e602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60006018544210158015610af657506000601854115b610b47576040805162461bcd60e51b815260206004820152601a60248201527f5374616b696e67206973206e6f742079657420656e61626c6564000000000000604482015290519081900360640190fd5b426000610b548483613d79565b905060008111610b6957600092505050610c97565b60185466038d7ea4c6800090610b9c906301e1338090610b9090869063ffffffff613e2616565b9063ffffffff613e8316565b610baf575067017896703a310000610c77565b610bcc6301e13380610b9060185486613e2690919063ffffffff16565b60011415610be2575066ae153d89fe8000610c77565b610bff6301e13380610b9060185486613e2690919063ffffffff16565b60021415610c155750665543df729c0000610c77565b610c326301e13380610b9060185486613e2690919063ffffffff16565b60031415610c485750662e2f6e5e148000610c77565b610c656301e13380610b9060185486613e2690919063ffffffff16565b60041415610c77575066271471148780005b600954610c91908284029060ff16600a0a61016d02613e83565b93505050505b919050565b33600090815260056020526040902054600390811115610ced5760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b6001600160a01b038216610d36576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b600f80546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517ffc4d4f776e81f0d8fc28fe53de66ffc5e9c082fc6df83aa57699acf700d219e3916020908290030190a15050565b600a5481565b6000610da33342613d79565b905090565b6001600160a01b0383166000908152601b6020526040812054849060ff1615610e15576040805162461bcd60e51b815260206004820152601a6024820152792130b630b731b290333937bd32b710313c903a3432903ab9b2b960311b604482015290519081900360640190fd5b6001600160a01b038416610e5e576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b6001600160a01b0385166000818152600e60209081526040808320338452825280832054938352600d909152902054610e9d908563ffffffff613e2616565b6001600160a01b038088166000908152600d60205260408082209390935590871681522054610ed2908563ffffffff613eed16565b6001600160a01b0386166000908152600d6020526040902055610efb818563ffffffff613e2616565b6001600160a01b038088166000818152600e6020908152604080832033845282529182902094909455805188815290519289169391926000805160206140f4833981519152929181900390910190a36001600160a01b0386166000908152601c602052604090205415610f82576001600160a01b0386166000908152601c60205260408120555b6040805180820182526001600160a01b038881166000818152600d6020908152858220546001600160801b039081168652426001600160401b03818116848901908152868652601d909452979093209551865492516001600160801b0319909316911617600160801b600160c01b031916600160801b919096160294909417909255871614611188576001600160a01b0386166000908152601d6020526040902054600160801b90046001600160401b031615611105576001600160a01b0386166000908152601d602052604081205461106d904290600160801b90046001600160401b0316613e26565b9050601a5481111561107e5750601a545b6110ea6110c5611097836201518063ffffffff613e8316565b6001600160a01b038a166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6001600160a01b0389166000908152601c60205260409020549063ffffffff613eed16565b6001600160a01b0388166000908152601c6020526040902055505b6040805180820182526001600160a01b0388166000818152600d6020908152848220546001600160801b0390811685526001600160401b03878116838701908152948452601d909252949091209251835492516001600160801b0319909316941693909317600160801b600160c01b031916600160801b91909316029190911790555b5060019695505050505050565b6000818152601460205260408120600260048083015460ff16908111156111b857fe5b146111f45760405162461bcd60e51b81526004018080602001828103825260278152602001806141e56027913960400191505060405180910390fd5b6004810154610100900460ff16611252576040805162461bcd60e51b815260206004820181905260248201527f526566756e6420686173206e6f74206265656e20617070726f76656420796574604482015290519081900360640190fd5b33600090815260056020526040902054600211158061127a575080546001600160a01b031633145b6112b55760405162461bcd60e51b815260040180806020018281038252602981526020018061419c6029913960400191505060405180910390fd5b80546002820154306000818152600d602052604090205490926001600160a01b031691906112e9908263ffffffff613e2616565b6001600160a01b038085166000908152600d6020526040808220939093559084168152205461131e908263ffffffff613eed16565b6001600160a01b038084166000818152600d602090815260409182902094909455805185815290519193928716926000805160206140f483398151915292918290030190a36001600160a01b0383166000908152601c60205260409020541561139b576001600160a01b0383166000908152601c60205260408120555b6040805180820182526001600160a01b038581166000818152600d6020908152858220546001600160801b039081168652426001600160401b03818116848901908152868652601d909452979093209551865492516001600160801b0319909316911617600160801b600160c01b031916600160801b9190961602949094179092558416146115a1576001600160a01b0383166000908152601d6020526040902054600160801b90046001600160401b03161561151e576001600160a01b0383166000908152601d6020526040812054611486904290600160801b90046001600160401b0316613e26565b9050601a548111156114975750601a545b6115036114de6114b0836201518063ffffffff613e8316565b6001600160a01b0387166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6001600160a01b0386166000908152601c60205260409020549063ffffffff613eed16565b6001600160a01b0385166000908152601c6020526040902055505b6040805180820182526001600160a01b0385166000818152600d6020908152848220546001600160801b0390811685526001600160401b03878116838701908152948452601d909252949091209251835492516001600160801b0319909316941693909317600160801b600160c01b031916600160801b91909316029190911790555b6004858101805460ff19168217908190556001870154875460028901546040518181526001600160a01b039384169593909216938c936000805160206140a48339815191529360ff9092169190602082019083908111156115fe57fe5b60ff1681526020019250505060405180910390a45060019695505050505050565b600b5481565b60125481565b60095460ff1681565b6000818152601460205260408120600260048083015460ff169081111561165757fe5b146116935760405162461bcd60e51b81526004018080602001828103825260278152602001806141e56027913960400191505060405180910390fd5b3360009081526005602052604090205460021115806116be575060018101546001600160a01b031633145b6116f95760405162461bcd60e51b815260040180806020018281038252602981526020018061419c6029913960400191505060405180910390fd5b60048101805461ff0019166101009081179182905560018301548354604080519390940460ff161515835292516001600160a01b03918216939091169186917fc65ac2becb2e9b9bcd53a2316ae3e6a55220f37ad81a9911cc7cb865fdc2cb4c9181900360200190a450600192915050565b6000818152601460205260408120600260048083015460ff169081111561178e57fe5b146117ca5760405162461bcd60e51b81526004018080602001828103825260278152602001806141e56027913960400191505060405180910390fd5b3360009081526005602052604090205460021115806117f2575080546001600160a01b031633145b61182d5760405162461bcd60e51b815260040180806020018281038252602981526020018061419c6029913960400191505060405180910390fd5b6001810154600282015460125430926001600160a01b03169190600090611863906103e890610b9090859063ffffffff613f4e16565b9050611875828263ffffffff613e2616565b6001600160a01b0385166000908152600d60205260409020549092506118a1908363ffffffff613e2616565b6001600160a01b038086166000908152600d602052604080822093909355908516815220546118d6908363ffffffff613eed16565b6001600160a01b038085166000818152600d602090815260409182902094909455805186815290519193928816926000805160206140f483398151915292918290030190a36001600160a01b0384166000908152600d6020526040902054611944908263ffffffff613e2616565b6001600160a01b038086166000908152600d6020526040808220939093556015549091168152205461197c908263ffffffff613eed16565b601580546001600160a01b039081166000908152600d60209081526040918290209490945591548251858152925190821693918816926000805160206140f483398151915292908290030190a36001600160a01b0384166000908152601c602052604090205415611a01576001600160a01b0384166000908152601c60205260408120555b6040805180820182526001600160a01b038681166000818152600d6020908152858220546001600160801b039081168652426001600160401b03818116848901908152868652601d909452979093209551865492516001600160801b0319909316911617600160801b600160c01b031916600160801b919096160294909417909255851614611c07576001600160a01b0384166000908152601d6020526040902054600160801b90046001600160401b031615611b84576001600160a01b0384166000908152601d6020526040812054611aec904290600160801b90046001600160401b0316613e26565b9050601a54811115611afd5750601a545b611b69611b44611b16836201518063ffffffff613e8316565b6001600160a01b0388166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6001600160a01b0387166000908152601c60205260409020549063ffffffff613eed16565b6001600160a01b0386166000908152601c6020526040902055505b6040805180820182526001600160a01b0386166000818152600d6020908152848220546001600160801b0390811685526001600160401b03878116838701908152948452601d909252949091209251835492516001600160801b0319909316941693909317600160801b600160c01b031916600160801b91909316029190911790555b6015546001600160a01b03166000908152601d6020526040902054600160801b90046001600160401b031615611d0b576015546001600160a01b03166000908152601d6020526040812054611c6d904290600160801b90046001600160401b0316613e26565b9050601a54811115611c7e5750601a545b611cee611cc7611c97836201518063ffffffff613e8316565b6015546001600160a01b03166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6015546001600160a01b03166000908152601c60205260409020549063ffffffff613eed16565b6015546001600160a01b03166000908152601c6020526040902055505b6040805180820182526001600160801b0384811682526001600160401b0384811660208085019182526015546001600160a01b039081166000908152601d8352879020955186549351909416600160801b02600160801b600160c01b0319949095166001600160801b03199093169290921792909216929092179092556004898101805460ff19166003179081905560018b01548b5460028d01549651878152918516969416948e946000805160206140a483398151915294909360ff1692918201908390811115611dd957fe5b60ff1681526020019250505060405180910390a4506001979650505050505050565b33600090815260056020526040812054600390811115611e4c5760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b6013805460ff191684151517908190556040805160ff90921615158252517ff9ed57c1eaa5c6ec721dc109448dedf9d17229b260b0a448b8e2ae866947da66916020908290030190a150600192915050565b6000610da360175443613e2690919063ffffffff16565b601b6020526000908152604090205460ff1681565b6008805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a715780601f10610a4657610100808354040283529160200191610a71565b60165481565b3360009081526010602052604081206001015460ff1615611f93576040805162461bcd60e51b815260206004820152601760248201527f41697264726f7020616c726561647920636c61696d6564000000000000000000604482015290519081900360640190fd5b33600090815260106020526040902054611ff4576040805162461bcd60e51b815260206004820152601960248201527f4e6f2061697264726f702076616c756520746f20636c61696d00000000000000604482015290519081900360640190fd5b33600081815260106020908152604080832080546001808301805460ff1916909117905590849055600f546001600160a01b0316808552600d90935292205491929091612047908463ffffffff613e2616565b6001600160a01b038084166000908152600d6020526040808220939093559083168152205461207c908463ffffffff613eed16565b6001600160a01b038083166000818152600d602090815260409182902094909455805187815290519193928616926000805160206140f483398151915292918290030190a36040805184815290516001600160a01b038316917f85a627733b5275fd9f62e7af950b23750d9d10f58202b4a491b4b21905076dfe919081900360200190a26001600160a01b0382166000908152601c602052604090205415612138576001600160a01b0382166000908152601c60205260408120555b6040805180820182526001600160a01b038481166000818152600d6020908152858220546001600160801b039081168652426001600160401b03818116848901908152868652601d909452979093209551865492516001600160801b0319909316911617600160801b600160c01b031916600160801b91909616029490941790925583161461233e576001600160a01b0382166000908152601d6020526040902054600160801b90046001600160401b0316156122bb576001600160a01b0382166000908152601d6020526040812054612223904290600160801b90046001600160401b0316613e26565b9050601a548111156122345750601a545b6122a061227b61224d836201518063ffffffff613e8316565b6001600160a01b0386166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6001600160a01b0385166000908152601c60205260409020549063ffffffff613eed16565b6001600160a01b0384166000908152601c6020526040902055505b6040805180820182526001600160a01b0384166000818152600d6020908152848220546001600160801b0390811685526001600160401b03878116838701908152948452601d909252949091209251835492516001600160801b0319909316941693909317600160801b600160c01b031916600160801b91909316029190911790555b60019450505050505b90565b6015546001600160a01b031681565b6001600160a01b03166000908152600d602052604090205490565b336000908152600560205260409020546002908111156123c55760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b6001600160a01b03831661240e576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b33600090815260056020526040902054821061245b5760405162461bcd60e51b81526004018080602001828103825260348152602001806141146034913960400191505060405180910390fd5b6001600160a01b03831660009081526005602052604080822054338352912054116124b75760405162461bcd60e51b81526004018080602001828103825260308152602001806140c46030913960400191505060405180910390fd5b6001600160a01b038316600081815260056020908152604091829020859055815185815291517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a2505050565b60185481565b60008281526014602052604081208160048083015460ff169081111561253457fe5b146125705760405162461bcd60e51b815260040180806020018281038252602981526020018061405a6029913960400191505060405180910390fd5b60018101546001600160a01b031633146125bb5760405162461bcd60e51b815260040180806020018281038252602981526020018061419c6029913960400191505060405180910390fd5b6001831515141561279e57600281015481546001600160a01b03166000908152600d602052604090205430916125f7919063ffffffff613e2616565b82546001600160a01b039081166000908152600d6020526040808220939093556002850154918416815291909120546126359163ffffffff613eed16565b6001600160a01b038083166000818152600d602090815260409182902094909455855460028701548251908152915192949316926000805160206140f483398151915292918290030190a381546001600160a01b03166000908152601c6020526040902054156126ba5781546001600160a01b03166000908152601c60205260408120555b60408051808201825283546001600160a01b039081166000818152600d6020908152858220546001600160801b0390811686526001600160401b0342818116848901908152958552601d8452888520975188549651909216600160801b02600160801b600160c01b0319929093166001600160801b0319909616959095171617909455898152601484528490206004018054600260ff1990911681179091556001870154875482890154875190815295860192909252855192959084169491909316928a926000805160206140a48339815191529281900390910190a45050612807565b600084815260146020908152604091829020600401805460ff19166001908117909155838101548454600286015485519081529384019290925283516001600160a01b0391821694919092169288926000805160206140a4833981519152929181900390910190a45b5060019392505050565b601460209081526000918252604091829020805460018083015460028085015460038601805489516101009682161596909602600019011692909204601f81018890048802850188019098528784526001600160a01b0394851697949092169591949390918301828280156128c75780601f1061289c576101008083540402835291602001916128c7565b820191906000526020600020905b8154815290600101906020018083116128aa57829003601f168201915b5050506004909301549192505060ff8082169161010090041686565b336000908152600560205260408120546001908111156129345760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b841580159061294257508483145b61297d5760405162461bcd60e51b81526004018080602001828103825260258152602001806141776025913960400191505060405180910390fd5b6000805b848110156129b8576129ae86868381811061299857fe5b9050602002013583613eed90919063ffffffff16565b9150600101612981565b50336000908152600d6020526040902054811115612a075760405162461bcd60e51b81526004018080602001828103825260248152602001806140366024913960400191505060405180910390fd5b4260005b87811015612d3a57612a78878783818110612a2257fe5b90506020020135600d60008c8c86818110612a3957fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054613eed90919063ffffffff16565b600d60008b8b85818110612a8857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550601d60008a8a84818110612acc57fe5b602090810292909201356001600160a01b031683525081019190915260400160002054600160801b90046001600160401b031615612c15576000612b53601d60008c8c86818110612b1957fe5b602090810292909201356001600160a01b0316835250810191909152604001600020544290600160801b90046001600160401b0316613e26565b9050601a54811115612b645750601a545b612bcf612bbf612b7d836201518063ffffffff613e8316565b601d60008e8e88818110612b8d57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020546001600160801b031690613f4e565b601c60008d8d87818110612a3957fe5b601c60008c8c86818110612bdf57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550505b6040518060400160405280888884818110612c2c57fe5b905060200201356001600160801b03168152602001836001600160401b0316815250601d60008b8b85818110612c5e57fe5b602090810292909201356001600160a01b0316835250818101929092526040016000208251815493909201516001600160801b03199093166001600160801b0390921691909117600160801b600160c01b031916600160801b6001600160401b0390931692909202919091179055888882818110612cd857fe5b905060200201356001600160a01b03166001600160a01b0316336001600160a01b03166000805160206140f4833981519152898985818110612d1657fe5b905060200201356040518082815260200191505060405180910390a3600101612a0b565b50336000908152600d6020526040902054612d5b908363ffffffff613e2616565b336000908152600d6020908152604080832093909355601c9052205415612d8d57336000908152601c60205260408120555b604080518082018252336000818152600d6020908152848220546001600160801b0390811685526001600160401b03968716828601908152938352601d909152939020915182549151909416600160801b02600160801b600160c01b0319949093166001600160801b03199091161792909216179055506001915050949350505050565b33600090815260056020526040812054600190811115612e625760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b8415801590612e7057508483145b612eab5760405162461bcd60e51b81526004018080602001828103825260258152602001806141776025913960400191505060405180910390fd5b60005b8581101561118857848482818110612ec257fe5b9050602002013560106000898985818110612ed957fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060000181905550600060106000898985818110612f2257fe5b602090810292909201356001600160a01b03168352508101919091526040016000206001908101805460ff19169215159290921790915501612eae565b6010602052600090815260409020805460019091015460ff1682565b6004546001600160a01b031681565b6007805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a715780601f10610a4657610100808354040283529160200191610a71565b600c5481565b600f546001600160a01b031681565b336000818152601b602052604081205490919060ff161561305f576040805162461bcd60e51b815260206004820152601a6024820152792130b630b731b290333937bd32b710313c903a3432903ab9b2b960311b604482015290519081900360640190fd5b6001600160a01b0384166130a8576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b6001600160a01b038416301415613106576040805162461bcd60e51b815260206004820152601f60248201527f416464726573732063616e6e6f74206265207468697320636f6e747261637400604482015290519081900360640190fd5b336001600160a01b03851614156131265761311f6135ff565b91506133c2565b336000908152600d6020526040902054613146908463ffffffff613e2616565b336000908152600d6020526040808220929092556001600160a01b03861681522054613178908463ffffffff613eed16565b6001600160a01b0385166000818152600d60209081526040918290209390935580518681529051919233926000805160206140f48339815191529281900390910190a3336000908152601c6020526040902054156131e157336000908152601c60205260408120555b604080518082018252336000818152600d6020908152848220546001600160801b039081168552426001600160401b03818116848801908152958552601d9093528684209551865495516001600160801b0319909616921691909117600160801b600160c01b031916600160801b9483168502179094556001600160a01b03891682529390205491929104161561333e576001600160a01b0385166000908152601d60205260408120546132a6904290600160801b90046001600160401b0316613e26565b9050601a548111156132b75750601a545b6133236132fe6132d0836201518063ffffffff613e8316565b6001600160a01b0389166000908152601d60205260409020546001600160801b03169063ffffffff613f4e16565b6001600160a01b0388166000908152601c60205260409020549063ffffffff613eed16565b6001600160a01b0387166000908152601c6020526040902055505b6040805180820182526001600160a01b0387166000818152600d6020908152848220546001600160801b0390811685526001600160401b03968716828601908152938352601d909152939020915182549151909416600160801b02600160801b600160c01b0319949093166001600160801b03199091161792909216179055600191505b5092915050565b336000908152601b60205260409020805460ff1916911515919091179081905560ff1690565b60185466038d7ea4c68000904290613418906301e1338090610b9090849063ffffffff613e2616565b61342c5767017896703a31000091506134f8565b6134496301e13380610b9060185484613e2690919063ffffffff16565b600114156134605766ae153d89fe800091506134f8565b61347d6301e13380610b9060185484613e2690919063ffffffff16565b6002141561349457665543df729c000091506134f8565b6134b16301e13380610b9060185484613e2690919063ffffffff16565b600314156134c857662e2f6e5e14800091506134f8565b6134e56301e13380610b9060185484613e2690919063ffffffff16565b600414156134f857662714711487800091505b5090565b60195481565b336000908152600560205260409020546003908111156135535760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b60185415801561356557506016548210155b6135a7576040805162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81d1a5b59481cd95d60921b604482015290519081900360640190fd5b50601855565b60175481565b60056020526000908152604090205481565b60135460ff1681565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b601a5481565b6000600b54600a541061364e576040805162461bcd60e51b815260206004820152601260248201527113585e081cdd5c1c1b1e481c995858da195960721b604482015290519081900360640190fd5b336000908152600d602052604090205461366a57506000612347565b600061367533610ae0565b9050600b5461368f82600a54613eed90919063ffffffff16565b11156136ad57600a54600b546136aa9163ffffffff613e2616565b90505b600081116136bf576000915050612347565b600a546136d2908263ffffffff613eed16565b600a55336000908152600d60205260409020546136f5908263ffffffff613eed16565b336000818152600d60209081526040808320948555601c82528083208390558051808201825294546001600160801b0390811686526001600160401b0342818116888601908152878752601d8652848720985189549151909316600160801b02600160801b600160c01b0319939094166001600160801b0319909116179190911691909117909555805186815290516000805160206140f4833981519152929181900390910190a360408051838152905133917f157fac8fd4f41c05fc4eb4fc76efaff83b44dde65830c8474bbda846b6cebbcb919081900360200190a260019250505090565b60135460009060ff161515600114613830576040805162461bcd60e51b8152602060048201526012602482015271115cd8dc9bddc81a5cc8111a5cd8589b195960721b604482015290519081900360640190fd5b336000818152601b602052604090205460ff1615613892576040805162461bcd60e51b815260206004820152601a6024820152792130b630b731b290333937bd32b710313c903a3432903ab9b2b960311b604482015290519081900360640190fd5b6001600160a01b0386166138db576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b60008511613927576040805162461bcd60e51b815260206004820152601460248201527356616c75652063616e6e6f74206265207a65726f60601b604482015290519081900360640190fd5b6040518060c00160405280336001600160a01b03168152602001876001600160a01b0316815260200186815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020808301829052604092830182905260115482526014815290829020835181546001600160a01b039182166001600160a01b031991821617835585840151600184018054919093169116179055918301516002830155606083015180516139fc9260038501920190613fa7565b5060808201518160040160006101000a81548160ff02191690836004811115613a2157fe5b021790555060a08201518160040160016101000a81548160ff021916908315150217905550905050856001600160a01b0316336001600160a01b03166011547fa6de25ec225b198e8219d2afbfa9b7a76fea3c9c02b1ed34880f4a338aa19d1388888860405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a4601154613adc90600163ffffffff613eed16565b6011819055600019019695505050505050565b33600090815260056020526040902054600390811115613b405760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b6001600160a01b038216613b89576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b601580546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517fb408f9ca0555ebd07984cfda88b709f9637edae44f4be9b3e1a2c54e5ea10b5d916020908290030190a15050565b33600090815260056020526040902054600390811115613c355760405162461bcd60e51b815260040180806020018281038252602f815260200180614148602f913960400191505060405180910390fd5b6001600160a01b038216613c7e576040805162461bcd60e51b815260206004820152601660248201526000805160206141c5833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b03848116919091178083558116600090815260056020526040808220600390559254925192909116917f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe29190a26004546001600160a01b031660008181526005602090815260409182902054825190815291517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a23360008181526005602090815260408083208390558051928352517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a25050565b6001600160a01b0382166000908152601c6020908152604080832054601d90925290912054600160801b90046001600160401b031615610ada576001600160a01b0383166000908152601d6020526040812054613de7908490600160801b90046001600160401b0316613e26565b9050601a54811115613df85750601a545b613e1e613e116114b0836201518063ffffffff613e8316565b839063ffffffff613eed16565b949350505050565b600082821115613e7d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000808211613ed9576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b6000828481613ee457fe5b04949350505050565b600082820183811015613f47576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082613f5d57506000610ada565b82820282848281613f6a57fe5b0414613f475760405162461bcd60e51b81526004018080602001828103825260218152602001806140836021913960400191505060405180910390fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613fe857805160ff1916838001178555614015565b82800160010185558215614015579182015b82811115614015578251825591602001919060010190613ffa565b506134f8926123479250905b808211156134f8576000815560010161402156fe4e6f7420656e6f7567682066756e647320666f7220746865207472616e73616374696f6e5469636b65742077726f6e67207374617475732c206578706563746564202252657175657374656422536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7756c968f05bc49a69dd99aa09b312b62b432db62df743893a786634f5b6a6c1fb596f7520646f206e6f7420686176652070726976696c6567657320666f722074686973206c6576656c206368616e6765ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef596f7520646f206e6f7420686176652070726976696c6567657320666f722074686973206c6576656c2061737369676e6d656e74596f7520646f206e6f7420686176652070726976696c6567657320666f722074686973207472616e73616374696f6e41646472657373657320616e642056616c75657320686176652077726f6e672073697a6573596f7520617265206e6f7420616c6c6f77656420746f206d616e6167652074686973207469636b6574416464726573732063616e6e6f74206265207a65726f000000000000000000005469636b65742077726f6e67207374617475732c206578706563746564202250656e64696e6722a265627a7a7230582080510e110c74db572f1e054964c125c4efa34a2b0b829e13049ae4061875395664736f6c63430005090032

Deployed Bytecode Sourcemap

7507:27605:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7507:27605:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7692:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7692:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15736:207;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15736:207:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;18851:1135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18851:1135:0;-1:-1:-1;;;;;18851:1135:0;;:::i;:::-;;;;;;;;;;;;;;;;12782:228;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12782:228:0;-1:-1:-1;;;;;12782:228:0;;:::i;:::-;;7838:23;;;:::i;17638:113::-;;;:::i;14456:1272::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14456:1272:0;;;;;;;;;;;;;;;;;:::i;31888:2005::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31888:2005:0;;:::i;7868:26::-;;;:::i;8979:32::-;;;:::i;7803:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34052:637;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34052:637:0;;:::i;29012:2724::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29012:2724:0;;:::i;34834:174::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34834:174:0;;;;:::i;17398:136::-;;;:::i;9819:42::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9819:42:0;-1:-1:-1;;;;;9819:42:0;;:::i;7768:28::-;;;:::i;9632:26::-;;;:::i;24087:1634::-;;;:::i;9309:32::-;;;:::i;:::-;;;;-1:-1:-1;;;;;9309:32:0;;;;;;;;;;;;;;14334:114;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14334:114:0;-1:-1:-1;;;;;14334:114:0;;:::i;5757:454::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5757:454:0;;;;;;;;:::i;9705:26::-;;;:::i;27351:1487::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27351:1487:0;;;;;;;;;:::i;9262:40::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9262:40:0;;:::i;:::-;;;;-1:-1:-1;;;;;9262:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9262:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21240:1961;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21240:1961:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;21240:1961:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21240:1961:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21240:1961:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;21240:1961:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21240:1961:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;21240:1961:0;;-1:-1:-1;21240:1961:0;-1:-1:-1;21240:1961:0;:::i;23427:552::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23427:552:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;23427:552:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23427:552:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23427:552:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;23427:552:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23427:552:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;23427:552:0;;-1:-1:-1;23427:552:0;-1:-1:-1;23427:552:0;:::i;8353:43::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8353:43:0;-1:-1:-1;;;;;8353:43:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4267:20;;;:::i;7731:30::-;;;:::i;7901:::-;;;:::i;8316:28::-;;;:::i;13114:1212::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13114:1212:0;;;;;;;;:::i;25877:149::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25877:149:0;;;;:::i;17852:844::-;;;:::i;9738:32::-;;;:::i;20616:200::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20616:200:0;;:::i;9665:33::-;;;:::i;4336:40::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4336:40:0;-1:-1:-1;;;;;4336:40:0;;:::i;9042:32::-;;;:::i;15951:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15951:143:0;;;;;;;;;;:::i;9777:33::-;;;:::i;16390:899::-;;;:::i;26505:642::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;26505:642:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;26505:642:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26505:642:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;26505:642:0;;-1:-1:-1;26505:642:0;-1:-1:-1;26505:642:0;:::i;12360:242::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12360:242:0;-1:-1:-1;;;;;12360:242:0;;:::i;5197:364::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5197:364:0;-1:-1:-1;;;;;5197:364:0;;:::i;7692:32::-;;;;;;;;;;;;;;;-1:-1:-1;;7692:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15736:207::-;15827:10;15802:4;15819:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;15819:29:0;;;;;;;;;;;:38;;;15873;;;;;;;15802:4;;15819:29;;15827:10;;15873:38;;;;;;;;-1:-1:-1;15931:4:0;15736:207;;;;;:::o;18851:1135::-;18920:4;18953:14;;18946:3;:21;;18945:47;;;;;18990:1;18973:14;;:18;18945:47;18937:86;;;;;-1:-1:-1;;;18937:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19048:3;19036:9;19078:26;19089:8;19048:3;19078:10;:26::i;:::-;19062:42;;19131:1;19119:8;:13;19115:27;;19141:1;19134:8;;;;;;19115:27;19390:14;;19334:8;;19380:40;;19411:8;;19381:24;;:4;;:24;:8;:24;:::i;:::-;19380:30;:40;:30;:40;:::i;:::-;19376:525;;-1:-1:-1;19454:10:0;19376:525;;;19487:40;19518:8;19488:24;19497:14;;19488:4;:8;;:24;;;;:::i;19487:40::-;19531:1;19487:45;19483:418;;;-1:-1:-1;19561:9:0;19483:418;;;19593:40;19624:8;19594:24;19603:14;;19594:4;:8;;:24;;;;:::i;19593:40::-;19637:1;19593:45;19589:312;;;-1:-1:-1;19667:9:0;19589:312;;;19699:40;19730:8;19700:24;19709:14;;19700:4;:8;;:24;;;;:::i;19699:40::-;19743:1;19699:45;19695:206;;;-1:-1:-1;19773:9:0;19695:206;;;19805:40;19836:8;19806:24;19815:14;;19806:4;:8;;:24;;;;:::i;19805:40::-;19849:1;19805:45;19801:100;;;-1:-1:-1;19879:9:0;19801:100;19967:8;;19920:58;;19921:19;;;;19967:8;;19953:2;:23;19946:3;:31;19920:25;:58::i;:::-;19913:65;;;;;18851:1135;;;;:::o;12782:228::-;4926:10;4920:17;;;;:5;:17;;;;;;12845:1;;4920:28;-1:-1:-1;4920:28:0;4912:88;;;;-1:-1:-1;;;4912:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12867:24:0;;12859:59;;;;;-1:-1:-1;;;12859:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12859:59:0;;;;;;;;;;;;;;;12929:13;:26;;-1:-1:-1;;;;;;12929:26:0;-1:-1:-1;;;;;12929:26:0;;;;;;;;;;;12971:31;;;12988:13;;;;12971:31;;;;;;;;;;;;;12782:228;;:::o;7838:23::-;;;;:::o;17638:113::-;17677:14;17716:27;17727:10;17739:3;17716:10;:27::i;:::-;17704:39;;17638:113;:::o;14456:1272::-;-1:-1:-1;;;;;10445:25:0;;14554:4;10445:25;;;:10;:25;;;;;;14539:5;;10445:25;;:34;10437:73;;;;;-1:-1:-1;;;10437:73:0;;;;;;;;;;;;-1:-1:-1;;;10437:73:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14579:17:0;;14571:52;;;;;-1:-1:-1;;;14571:52:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14571:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14657:14:0;;14636:18;14657:14;;;:7;:14;;;;;;;;14672:10;14657:26;;;;;;;;14712:15;;;:8;:15;;;;;;:27;;14732:6;14712:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;14694:15:0;;;;;;;:8;:15;;;;;;:45;;;;14766:13;;;;;;;:25;;14784:6;14766:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;14750:13:0;;;;;;:8;:13;;;;;:41;14831:22;:10;14846:6;14831:22;:14;:22;:::i;:::-;-1:-1:-1;;;;;14802:14:0;;;;;;;:7;:14;;;;;;;;14817:10;14802:26;;;;;;;;:51;;;;14869:28;;;;;;;;;;;14802:14;;-1:-1:-1;;;;;;;;;;;14869:28:0;;;;;;;;;;-1:-1:-1;;;;;14987:13:0;;;;;;:6;:13;;;;;;:18;14983:41;;-1:-1:-1;;;;;15007:13:0;;15023:1;15007:13;;;:6;:13;;;;;:17;14983:41;15093:48;;;;;;;;-1:-1:-1;;;;;15118:15:0;;;-1:-1:-1;15118:15:0;;;:8;:15;;;;;;;;-1:-1:-1;;;;;15093:48:0;;;;;15056:3;-1:-1:-1;;;;;15093:48:0;;;;;;;;;15071:19;;;:12;:19;;;;;;;:70;;;;;;-1:-1:-1;;;;;;15071:70:0;;;;;;-1:-1:-1;;;;;;;;15071:70:0;-1:-1:-1;;;15071:70:0;;;;;;;;;;;;15158:12;;;15154:470;;-1:-1:-1;;;;;15221:17:0;;;;;;:12;:17;;;;;:22;-1:-1:-1;;;15221:22:0;;-1:-1:-1;;;;;15221:22:0;15216:33;15212:318;;-1:-1:-1;;;;;15303:17:0;;15270;15303;;;:12;:17;;;;;:22;15290:37;;:3;;-1:-1:-1;;;15303:22:0;;-1:-1:-1;;;;;15303:22:0;15290:7;:37::i;:::-;15270:57;;15365:11;;15350:12;:26;15346:58;;;-1:-1:-1;15393:11:0;;15346:58;15437:77;15453:60;15488:24;:12;15505:6;15488:24;:16;:24;:::i;:::-;-1:-1:-1;;;;;15458:17:0;;;;;;:12;:17;;;;;:24;-1:-1:-1;;;;;15458:24:0;;15453:60;:34;:60;:::i;:::-;-1:-1:-1;;;;;15437:11:0;;;;;;:6;:11;;;;;;;:77;:15;:77;:::i;:::-;-1:-1:-1;;;;;15423:11:0;;;;;;:6;:11;;;;;:91;-1:-1:-1;15212:318:0;15566:46;;;;;;;;-1:-1:-1;;;;;15591:13:0;;-1:-1:-1;15591:13:0;;;:8;:13;;;;;;;;-1:-1:-1;;;;;15566:46:0;;;;;-1:-1:-1;;;;;15566:46:0;;;;;;;;;15546:17;;;:12;:17;;;;;;;:66;;;;;;-1:-1:-1;;;;;;15546:66:0;;;;;;;;;-1:-1:-1;;;;;;;;15546:66:0;-1:-1:-1;;;15546:66:0;;;;;;;;;;;15154:470;-1:-1:-1;15716:4:0;;14456:1272;-1:-1:-1;;;;;;14456:1272:0:o;31888:2005::-;31936:4;32010:18;;;:8;:18;;;;;32092:21;32074:14;;;;;;;;:39;;;;;;;;32066:91;;;;-1:-1:-1;;;32066:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32215:22;;;;;;;;;32207:67;;;;;-1:-1:-1;;;32207:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32339:10;32333:17;;;;:5;:17;;;;;;32354:1;-1:-1:-1;32333:22:0;;:56;;-1:-1:-1;32373:16:0;;-1:-1:-1;;;;;32373:16:0;32359:10;:30;32333:56;32325:110;;;;-1:-1:-1;;;32325:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32572:16;;32639:13;;;;32504:4;32480:13;32710:15;;;:8;:15;;;;;;32504:4;;-1:-1:-1;;;;;32572:16:0;;32639:13;32710:27;;32639:13;32710:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;32692:15:0;;;;;;;:8;:15;;;;;;:45;;;;32764:13;;;;;;;:25;;32782:6;32764:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;32748:13:0;;;;;;;:8;:13;;;;;;;;;:41;;;;32805:28;;;;;;;32748:13;;32805:28;;;;-1:-1:-1;;;;;;;;;;;32805:28:0;;;;;;;;-1:-1:-1;;;;;32931:13:0;;;;;;:6;:13;;;;;;:18;32927:41;;-1:-1:-1;;;;;32951:13:0;;32967:1;32951:13;;;:6;:13;;;;;:17;32927:41;33037:48;;;;;;;;-1:-1:-1;;;;;33062:15:0;;;-1:-1:-1;33062:15:0;;;:8;:15;;;;;;;;-1:-1:-1;;;;;33037:48:0;;;;;33000:3;-1:-1:-1;;;;;33037:48:0;;;;;;;;;33015:19;;;:12;:19;;;;;;;:70;;;;;;-1:-1:-1;;;;;;33015:70:0;;;;;;-1:-1:-1;;;;;;;;33015:70:0;-1:-1:-1;;;33015:70:0;;;;;;;;;;;;33102:12;;;33098:468;;-1:-1:-1;;;;;33165:17:0;;;;;;:12;:17;;;;;:22;-1:-1:-1;;;33165:22:0;;-1:-1:-1;;;;;33165:22:0;33160:33;33156:318;;-1:-1:-1;;;;;33247:17:0;;33214;33247;;;:12;:17;;;;;:22;33234:37;;:3;;-1:-1:-1;;;33247:22:0;;-1:-1:-1;;;;;33247:22:0;33234:7;:37::i;:::-;33214:57;;33309:11;;33294:12;:26;33290:58;;;-1:-1:-1;33337:11:0;;33290:58;33381:77;33397:60;33432:24;:12;33449:6;33432:24;:16;:24;:::i;:::-;-1:-1:-1;;;;;33402:17:0;;;;;;:12;:17;;;;;:24;-1:-1:-1;;;;;33402:24:0;;33397:60;:34;:60;:::i;:::-;-1:-1:-1;;;;;33381:11:0;;;;;;:6;:11;;;;;;;:77;:15;:77;:::i;:::-;-1:-1:-1;;;;;33367:11:0;;;;;;:6;:11;;;;;:91;-1:-1:-1;33156:318:0;33508:46;;;;;;;;-1:-1:-1;;;;;33533:13:0;;-1:-1:-1;33533:13:0;;;:8;:13;;;;;;;;-1:-1:-1;;;;;33508:46:0;;;;;-1:-1:-1;;;;;33508:46:0;;;;;;;;;33488:17;;;:12;:17;;;;;;;:66;;;;;;-1:-1:-1;;;;;;33488:66:0;;;;;;;;;-1:-1:-1;;;;;;;;33488:66:0;-1:-1:-1;;;33488:66:0;;;;;;;;;;;33098:468;33711:22;33694:14;;;:39;;-1:-1:-1;;33694:39:0;;;;;;;;33813:16;;;33795;;33831:13;;;;33771:90;;;;;-1:-1:-1;;;;;33813:16:0;;;;33795;;;;;33785:8;;-1:-1:-1;;;;;;;;;;;33771:90:0;33846:14;;;;;33771:90;;;;;33846:14;;33771:90;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33881:4:0;;31888:2005;-1:-1:-1;;;;;;31888:2005:0:o;7868:26::-;;;;:::o;8979:32::-;;;;:::o;7803:26::-;;;;;;:::o;34052:637::-;34107:4;34181:18;;;:8;:18;;;;;34263:21;34245:14;;;;;;;;:39;;;;;;;;34237:91;;;;-1:-1:-1;;;34237:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34387:10;34381:17;;;;:5;:17;;;;;;34402:1;-1:-1:-1;34381:22:0;;:56;;-1:-1:-1;34421:16:0;;;;-1:-1:-1;;;;;34421:16:0;34407:10;:30;34381:56;34373:110;;;;-1:-1:-1;;;34373:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34520:22;;;:29;;-1:-1:-1;;34520:29:0;;;;;;;;;34545:4;34616:16;;;34598;;34567:90;;;34634:22;;;;34520:29;34634:22;34567:90;;;;;;-1:-1:-1;;;;;34616:16:0;;;;34598;;;;34588:8;;34567:90;;;;;;;;;-1:-1:-1;34677:4:0;;34052:637;-1:-1:-1;;34052:637:0:o;29012:2724::-;29061:4;29135:18;;;:8;:18;;;;;29217:21;29199:14;;;;;;;;:39;;;;;;;;29191:91;;;;-1:-1:-1;;;29191:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29347:10;29341:17;;;;:5;:17;;;;;;29362:1;-1:-1:-1;29341:22:0;;:56;;-1:-1:-1;29381:16:0;;-1:-1:-1;;;;;29381:16:0;29367:10;:30;29341:56;29333:110;;;;-1:-1:-1;;;29333:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29577:16;;;;29644:13;;;;29718:16;;29512:4;;-1:-1:-1;;;;;29577:16:0;;29644:13;29488;;29707:38;;29740:4;;29707:28;;29644:13;;29707:28;:10;:28;:::i;:38::-;29695:50;-1:-1:-1;29792:16:0;:6;29695:50;29792:16;:10;:16;:::i;:::-;-1:-1:-1;;;;;29866:15:0;;;;;;:8;:15;;;;;;29783:25;;-1:-1:-1;29866:27:0;;29783:25;29866:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;29848:15:0;;;;;;;:8;:15;;;;;;:45;;;;29920:13;;;;;;;:25;;29938:6;29920:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;29904:13:0;;;;;;;:8;:13;;;;;;;;;:41;;;;29961:28;;;;;;;29904:13;;29961:28;;;;-1:-1:-1;;;;;;;;;;;29961:28:0;;;;;;;;-1:-1:-1;;;;;30063:15:0;;;;;;:8;:15;;;;;;:25;;30083:4;30063:25;:19;:25;:::i;:::-;-1:-1:-1;;;;;30045:15:0;;;;;;;:8;:15;;;;;;:43;;;;30138:17;;;;;30129:27;;;;:37;;30161:4;30129:37;:31;:37;:::i;:::-;30108:17;;;-1:-1:-1;;;;;30108:17:0;;;30099:27;;;;:8;:27;;;;;;;;;:67;;;;30198:17;;30182:40;;;;;;;30198:17;;;;30182:40;;;;-1:-1:-1;;;;;;;;;;;30182:40:0;;;;;;;;-1:-1:-1;;;;;30312:13:0;;;;;;:6;:13;;;;;;:18;30308:41;;-1:-1:-1;;;;;30332:13:0;;30348:1;30332:13;;;:6;:13;;;;;:17;30308:41;30418:48;;;;;;;;-1:-1:-1;;;;;30443:15:0;;;-1:-1:-1;30443:15:0;;;:8;:15;;;;;;;;-1:-1:-1;;;;;30418:48:0;;;;;30381:3;-1:-1:-1;;;;;30418:48:0;;;;;;;;;30396:19;;;:12;:19;;;;;;;:70;;;;;;-1:-1:-1;;;;;;30396:70:0;;;;;;-1:-1:-1;;;;;;;;30396:70:0;-1:-1:-1;;;30396:70:0;;;;;;;;;;;;30483:12;;;30479:468;;-1:-1:-1;;;;;30546:17:0;;;;;;:12;:17;;;;;:22;-1:-1:-1;;;30546:22:0;;-1:-1:-1;;;;;30546:22:0;30541:33;30537:318;;-1:-1:-1;;;;;30628:17:0;;30595;30628;;;:12;:17;;;;;:22;30615:37;;:3;;-1:-1:-1;;;30628:22:0;;-1:-1:-1;;;;;30628:22:0;30615:7;:37::i;:::-;30595:57;;30690:11;;30675:12;:26;30671:58;;;-1:-1:-1;30718:11:0;;30671:58;30762:77;30778:60;30813:24;:12;30830:6;30813:24;:16;:24;:::i;:::-;-1:-1:-1;;;;;30783:17:0;;;;;;:12;:17;;;;;:24;-1:-1:-1;;;;;30783:24:0;;30778:60;:34;:60;:::i;:::-;-1:-1:-1;;;;;30762:11:0;;;;;;:6;:11;;;;;;;:77;:15;:77;:::i;:::-;-1:-1:-1;;;;;30748:11:0;;;;;;:6;:11;;;;;:91;-1:-1:-1;30537:318:0;30889:46;;;;;;;;-1:-1:-1;;;;;30914:13:0;;-1:-1:-1;30914:13:0;;;:8;:13;;;;;;;;-1:-1:-1;;;;;30889:46:0;;;;;-1:-1:-1;;;;;30889:46:0;;;;;;;;;30869:17;;;:12;:17;;;;;;;:66;;;;;;-1:-1:-1;;;;;;30869:66:0;;;;;;;;;-1:-1:-1;;;;;;;;30869:66:0;-1:-1:-1;;;30869:66:0;;;;;;;;;;;30479:468;30981:17;;-1:-1:-1;;;;;30981:17:0;30968:31;;;;:12;:31;;;;;:36;-1:-1:-1;;;30968:36:0;;-1:-1:-1;;;;;30968:36:0;30963:47;30959:372;;31073:17;;-1:-1:-1;;;;;31073:17:0;31027;31060:31;;;:12;:31;;;;;:36;31047:51;;:3;;-1:-1:-1;;;31060:36:0;;-1:-1:-1;;;;;31060:36:0;31047:7;:51::i;:::-;31027:71;;31132:11;;31117:12;:26;31113:58;;;-1:-1:-1;31160:11:0;;31113:58;31214:105;31244:74;31293:24;:12;31310:6;31293:24;:16;:24;:::i;:::-;31262:17;;-1:-1:-1;;;;;31262:17:0;31249:31;;;;:12;:31;;;;;:38;-1:-1:-1;;;;;31249:38:0;;31244:74;:48;:74;:::i;:::-;31221:17;;-1:-1:-1;;;;;31221:17:0;31214:25;;;;:6;:25;;;;;;;:105;:29;:105;:::i;:::-;31193:17;;-1:-1:-1;;;;;31193:17:0;31186:25;;;;:6;:25;;;;;:133;-1:-1:-1;30959:372:0;31375:37;;;;;;;;-1:-1:-1;;;;;31375:37:0;;;;;-1:-1:-1;;;;;31375:37:0;;;;;;;;;;31354:17;;-1:-1:-1;;;;;31354:17:0;;;-1:-1:-1;31341:31:0;;;:12;:31;;;;;:71;;;;;;;;;-1:-1:-1;;;31341:71:0;-1:-1:-1;;;;;;;;31341:71:0;;;;-1:-1:-1;;;;;;31341:71:0;;;;;;;;;;;;;;;;;;31536:14;;;;:40;;-1:-1:-1;;31536:40:0;31553:23;31536:40;;;;;-1:-1:-1;31656:16:0;;;31638;;31674:13;;;;31614:90;;;;;31656:16;;;;31638;;;31628:8;;-1:-1:-1;;;;;;;;;;;31614:90:0;31674:13;;31689:14;;;31614:90;;;;31689:14;;31614:90;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31724:4:0;;29012:2724;-1:-1:-1;;;;;;;29012:2724:0:o;34834:174::-;4926:10;34899:4;4920:17;;;:5;:17;;;;;;34888:1;;4920:28;-1:-1:-1;4920:28:0;4912:88;;;;-1:-1:-1;;;4912:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34916:13;:21;;-1:-1:-1;;34916:21:0;;;;;;;;;34953:25;;;34916:21;34964:13;;;34953:25;;;;;;;;;;;;;;;-1:-1:-1;34996:4:0;;34834:174;-1:-1:-1;;34834:174:0:o;17398:136::-;17444:16;17487:39;17504:21;;17487:12;:16;;:39;;;;:::i;9819:42::-;;;;;;;;;;;;;;;:::o;7768:28::-;;;;;;;;;;;;;;;-1:-1:-1;;7768:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9632:26;;;;:::o;24087:1634::-;24194:10;24128:4;24185:20;;;:8;:20;;;;;:28;;;;;:37;24177:73;;;;;-1:-1:-1;;;24177:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24278:10;24269:20;;;;:8;:20;;;;;:26;24261:69;;;;;-1:-1:-1;;;24261:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24392:10;24369:11;24383:20;;;:8;:20;;;;;;;;:26;;24479:4;24448:28;;;:35;;-1:-1:-1;;24448:35:0;;;;;;24517:30;;;;24615:13;;-1:-1:-1;;;;;24615:13:0;24727:15;;;:8;:15;;;;;;24383:26;;24615:13;;24727:27;;24383:26;24727:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;24709:15:0;;;;;;;:8;:15;;;;;;:45;;;;24781:13;;;;;;;:25;;24799:6;24781:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;24765:13:0;;;;;;;:8;:13;;;;;;;;;:41;;;;24824:28;;;;;;;24765:13;;24824:28;;;;-1:-1:-1;;;;;;;;;;;24824:28:0;;;;;;;;24868:22;;;;;;;;-1:-1:-1;;;;;24868:22:0;;;;;;;;;;;;;-1:-1:-1;;;;;24980:13:0;;;;;;:6;:13;;;;;;:18;24976:41;;-1:-1:-1;;;;;25000:13:0;;25016:1;25000:13;;;:6;:13;;;;;:17;24976:41;25086:48;;;;;;;;-1:-1:-1;;;;;25111:15:0;;;-1:-1:-1;25111:15:0;;;:8;:15;;;;;;;;-1:-1:-1;;;;;25086:48:0;;;;;25049:3;-1:-1:-1;;;;;25086:48:0;;;;;;;;;25064:19;;;:12;:19;;;;;;;:70;;;;;;-1:-1:-1;;;;;;25064:70:0;;;;;;-1:-1:-1;;;;;;;;25064:70:0;-1:-1:-1;;;25064:70:0;;;;;;;;;;;;25151:12;;;25147:468;;-1:-1:-1;;;;;25214:17:0;;;;;;:12;:17;;;;;:22;-1:-1:-1;;;25214:22:0;;-1:-1:-1;;;;;25214:22:0;25209:33;25205:318;;-1:-1:-1;;;;;25296:17:0;;25263;25296;;;:12;:17;;;;;:22;25283:37;;:3;;-1:-1:-1;;;25296:22:0;;-1:-1:-1;;;;;25296:22:0;25283:7;:37::i;:::-;25263:57;;25358:11;;25343:12;:26;25339:58;;;-1:-1:-1;25386:11:0;;25339:58;25430:77;25446:60;25481:24;:12;25498:6;25481:24;:16;:24;:::i;:::-;-1:-1:-1;;;;;25451:17:0;;;;;;:12;:17;;;;;:24;-1:-1:-1;;;;;25451:24:0;;25446:60;:34;:60;:::i;:::-;-1:-1:-1;;;;;25430:11:0;;;;;;:6;:11;;;;;;;:77;:15;:77;:::i;:::-;-1:-1:-1;;;;;25416:11:0;;;;;;:6;:11;;;;;:91;-1:-1:-1;25205:318:0;25557:46;;;;;;;;-1:-1:-1;;;;;25582:13:0;;-1:-1:-1;25582:13:0;;;:8;:13;;;;;;;;-1:-1:-1;;;;;25557:46:0;;;;;-1:-1:-1;;;;;25557:46:0;;;;;;;;;25537:17;;;:12;:17;;;;;;;:66;;;;;;-1:-1:-1;;;;;;25537:66:0;;;;;;;;;-1:-1:-1;;;;;;;;25537:66:0;-1:-1:-1;;;25537:66:0;;;;;;;;;;;25147:468;25707:4;25700:11;;;;;;24087:1634;;:::o;9309:32::-;;;-1:-1:-1;;;;;9309:32:0;;:::o;14334:114::-;-1:-1:-1;;;;;14424:16:0;14389:15;14424:16;;;:8;:16;;;;;;;14334:114::o;5757:454::-;4926:10;4920:17;;;;:5;:17;;;;;;5826:1;;4920:28;-1:-1:-1;4920:28:0;4912:88;;;;-1:-1:-1;;;4912:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5848:25:0;;5840:60;;;;;-1:-1:-1;;;5840:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5840:60:0;;;;;;;;;;;;;;;5931:10;5925:17;;;;:5;:17;;;;;;5919:23;;5911:88;;;;-1:-1:-1;;;5911:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6038:18:0;;;;;;:5;:18;;;;;;;6024:10;6018:17;;;;;:38;6010:99;;;;-1:-1:-1;;;6010:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6122:18:0;;;;;;:5;:18;;;;;;;;;:24;;;6162:41;;;;;;;;;;;;;;;;;5757:454;;;:::o;9705:26::-;;;;:::o;27351:1487::-;27427:4;27501:18;;;:8;:18;;;;;27427:4;27540:14;;;;;;;;:41;;;;;;;;27532:95;;;;-1:-1:-1;;;27532:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27646:16;;;;-1:-1:-1;;;;;27646:16:0;27666:10;27646:30;27638:84;;;;-1:-1:-1;;;27638:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27750:4;27739:15;;;;27735:1072;;;27877:13;;;;27855:16;;-1:-1:-1;;;;;27855:16:0;27773:11;27846:26;;;:8;:26;;;;;;27795:4;;27846:45;;:26;:45;:30;:45;:::i;:::-;27826:16;;-1:-1:-1;;;;;27826:16:0;;;27817:26;;;;:8;:26;;;;;;:74;;;;27940:13;;;;27922;;;;;;;;;;:32;;;:17;:32;:::i;:::-;-1:-1:-1;;;;;27906:13:0;;;;;;;:8;:13;;;;;;;;;:48;;;;27983:16;;28006:13;;;;27974:46;;;;;;;27906:13;;27983:16;;;-1:-1:-1;;;;;;;;;;;27974:46:0;;;;;;;;28125:16;;-1:-1:-1;;;;;28125:16:0;28118:24;;;;:6;:24;;;;;;:29;28114:63;;28156:16;;-1:-1:-1;;;;;28156:16:0;28176:1;28149:24;;;:6;:24;;;;;:28;28114:63;28265:59;;;;;;;;28299:16;;-1:-1:-1;;;;;28299:16:0;;;-1:-1:-1;28290:26:0;;;:8;:26;;;;;;;;-1:-1:-1;;;;;28265:59:0;;;;;-1:-1:-1;;;;;28213:3:0;28265:59;;;;;;;;;28232:30;;;:12;:30;;;;;:92;;;;;;;;;-1:-1:-1;;;28232:92:0;-1:-1:-1;;;;;;;;28232:92:0;;;;-1:-1:-1;;;;;;28232:92:0;;;;;;;;;;;;28418:18;;;:8;:18;;;;;:25;;:49;;28446:21;-1:-1:-1;;28418:49:0;;;;;;;;-1:-1:-1;28531:16:0;;;28513;;28549:13;;;;28489:97;;;;;;;;;;;;;;28213:3;;28531:16;;;;28513;;;;;28418:18;;-1:-1:-1;;;;;;;;;;;28489:97:0;;;;;;;;;27735:1072;;;;;28623:18;;;;:8;:18;;;;;;;;;:25;;:50;;-1:-1:-1;;28623:50:0;28651:22;28623:50;;;;;;28737:16;;;;28719;;28755:13;;;;28695:98;;;;;;;;;;;;;;-1:-1:-1;;;;;28737:16:0;;;;28719;;;;;28623:18;;-1:-1:-1;;;;;;;;;;;28695:98:0;;;;;;;;;;27735:1072;-1:-1:-1;28826:4:0;;27351:1487;-1:-1:-1;;;27351:1487:0:o;9262:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9262:40:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9262:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9262:40:0;;;;;;;-1:-1:-1;;9262:40:0;;;;;;;;;;:::o;21240:1961::-;4926:10;21390:4;4920:17;;;:5;:17;;;;;;21374:1;;4920:28;-1:-1:-1;4920:28:0;4912:88;;;;-1:-1:-1;;;4912:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21443:22;;;;;:62;;-1:-1:-1;21469:36:0;;;21443:62;21435:112;;;;-1:-1:-1;;;21435:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21586:10;;21611:98;21628:18;;;21611:98;;;21676:21;21686:7;;21694:1;21686:10;;;;;;;;;;;;;21676:5;:9;;:21;;;;:::i;:::-;21668:29;-1:-1:-1;21648:3:0;;21611:98;;;-1:-1:-1;21779:10:0;21770:20;;;;:8;:20;;;;;;21761:29;;;21753:78;;;;-1:-1:-1;;;21753:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21889:3;21868:11;21904:838;21921:22;;;21904:838;;;21992:40;22021:7;;22029:1;22021:10;;;;;;;;;;;;;21992:8;:24;22001:11;;22013:1;22001:14;;;;;;;;;;;;;-1:-1:-1;;;;;22001:14:0;-1:-1:-1;;;;;21992:24:0;-1:-1:-1;;;;;21992:24:0;;;;;;;;;;;;;:28;;:40;;;;:::i;:::-;21965:8;:24;21974:11;;21986:1;21974:14;;;;;;;;;;;;;-1:-1:-1;;;;;21974:14:0;-1:-1:-1;;;;;21965:24:0;-1:-1:-1;;;;;21965:24:0;;;;;;;;;;;;:67;;;;22133:12;:28;22146:11;;22158:1;22146:14;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22146:14:0;22133:28;;-1:-1:-1;22133:28:0;;;;;;;;-1:-1:-1;22133:28:0;:33;-1:-1:-1;;;22133:33:0;;-1:-1:-1;;;;;22133:33:0;22128:44;22124:373;;22193:17;22213:48;22226:12;:28;22239:11;;22251:1;22239:14;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22239:14:0;22226:28;;-1:-1:-1;22226:28:0;;;;;;;;-1:-1:-1;22226:28:0;:33;22213:3;;-1:-1:-1;;;22226:33:0;;-1:-1:-1;;;;;22226:33:0;22213:7;:48::i;:::-;22193:68;;22299:11;;22284:12;:26;22280:58;;;-1:-1:-1;22327:11:0;;22280:58;22382:99;22409:71;22455:24;:12;22472:6;22455:24;:16;:24;:::i;:::-;22414:12;:28;22427:11;;22439:1;22427:14;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22427:14:0;22414:28;;-1:-1:-1;22414:28:0;;;;;;;;-1:-1:-1;22414:28:0;:35;-1:-1:-1;;;;;22414:35:0;;22409:45;:71::i;:::-;22382:6;:22;22389:11;;22401:1;22389:14;;;;;;22382:99;22357:6;:22;22364:11;;22376:1;22364:14;;;;;;;;;;;;;-1:-1:-1;;;;;22364:14:0;-1:-1:-1;;;;;22357:22:0;-1:-1:-1;;;;;22357:22:0;;;;;;;;;;;;:124;;;;22124:373;;22542:43;;;;;;;;22567:7;;22575:1;22567:10;;;;;;;;;;;;;-1:-1:-1;;;;;22542:43:0;;;;;22580:4;-1:-1:-1;;;;;22542:43:0;;;;22511:12;:28;22524:11;;22536:1;22524:14;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22524:14:0;22511:28;;-1:-1:-1;22511:28:0;;;;;;;;;-1:-1:-1;22511:28:0;:74;;;;;;;;;-1:-1:-1;;;;;;22511:74:0;;;-1:-1:-1;;;;;22511:74:0;;;;;;;-1:-1:-1;;;;;;;;22511:74:0;-1:-1:-1;;;;;;;;22511:74:0;;;;;;;;;;;;;22703:11;;22715:1;22703:14;;;;;;;;;;;;;-1:-1:-1;;;;;22703:14:0;-1:-1:-1;;;;;22682:48:0;22691:10;-1:-1:-1;;;;;22682:48:0;-1:-1:-1;;;;;;;;;;;22719:7:0;;22727:1;22719:10;;;;;;;;;;;;;22682:48;;;;;;;;;;;;;;;;;;21945:3;;21904:838;;;-1:-1:-1;22850:10:0;22841:20;;;;:8;:20;;;;;;:31;;22866:5;22841:31;:24;:31;:::i;:::-;22827:10;22818:20;;;;:8;:20;;;;;;;;:54;;;;22960:6;:18;;;;:23;22956:51;;22992:10;23006:1;22985:18;;;:6;:18;;;;;:22;22956:51;23045:53;;;;;;;;23079:10;-1:-1:-1;23070:20:0;;;:8;:20;;;;;;;;-1:-1:-1;;;;;23045:53:0;;;;;-1:-1:-1;;;;;23045:53:0;;;;;;;;;23018:24;;;:12;:24;;;;;;:80;;;;;;;;;-1:-1:-1;;;23018:80:0;-1:-1:-1;;;;;;;;23018:80:0;;;;-1:-1:-1;;;;;;23018:80:0;;;;;;;;;;;-1:-1:-1;23018:80:0;;-1:-1:-1;21240:1961:0;;;;;;;:::o;23427:552::-;4926:10;23571:4;4920:17;;;:5;:17;;;;;;23555:1;;4920:28;-1:-1:-1;4920:28:0;4912:88;;;;-1:-1:-1;;;4912:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23624:22;;;;;:62;;-1:-1:-1;23650:36:0;;;23624:62;23616:112;;;;-1:-1:-1;;;23616:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23746:6;23741:207;23758:22;;;23741:207;;;23871:7;;23879:1;23871:10;;;;;;;;;;;;;23838:8;:24;23847:11;;23859:1;23847:14;;;;;;;;;;;;;-1:-1:-1;;;;;23847:14:0;-1:-1:-1;;;;;23838:24:0;-1:-1:-1;;;;;23838:24:0;;;;;;;;;;;;:30;;:43;;;;23931:5;23896:8;:24;23905:11;;23917:1;23905:14;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23905:14:0;23896:24;;-1:-1:-1;23896:24:0;;;;;;;;-1:-1:-1;23896:24:0;:32;;;;:40;;-1:-1:-1;;23896:40:0;;;;;;;;;;;23782:3;23741:207;;8353:43;;;;;;;;;;;;;;;;;;;;;:::o;4267:20::-;;;-1:-1:-1;;;;;4267:20:0;;:::o;7731:30::-;;;;;;;;;;;;;;;-1:-1:-1;;7731:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7901;;;;:::o;8316:28::-;;;-1:-1:-1;;;;;8316:28:0;;:::o;13114:1212::-;13178:10;13198:4;10445:25;;;:10;:25;;;;;;13198:4;;13178:10;10445:25;;:34;10437:73;;;;;-1:-1:-1;;;10437:73:0;;;;;;;;;;;;-1:-1:-1;;;10437:73:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13223:17:0;;13215:52;;;;;-1:-1:-1;;;13215:52:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13215:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13286:20:0;;13301:4;13286:20;;13278:64;;;;;-1:-1:-1;;;13278:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13359:10;-1:-1:-1;;;;;13359:17:0;;;13355:42;;;13385:12;:10;:12::i;:::-;13378:19;;;;13355:42;13442:10;13433:20;;;;:8;:20;;;;;;:32;;13458:6;13433:32;:24;:32;:::i;:::-;13419:10;13410:20;;;;:8;:20;;;;;;:55;;;;-1:-1:-1;;;;;13492:13:0;;;;;;:25;;13510:6;13492:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;13476:13:0;;;;;;:8;:13;;;;;;;;;:41;;;;13533:33;;;;;;;13476:13;;13542:10;;-1:-1:-1;;;;;;;;;;;13533:33:0;;;;;;;;;13663:10;13656:18;;;;:6;:18;;;;;;:23;13652:51;;13688:10;13702:1;13681:18;;;:6;:18;;;;;:22;13652:51;13777:53;;;;;;;;13811:10;-1:-1:-1;13802:20:0;;;:8;:20;;;;;;;;-1:-1:-1;;;;;13777:53:0;;;;;13735:3;-1:-1:-1;;;;;13777:53:0;;;;;;;;;13750:24;;;:12;:24;;;;;;:80;;;;;;-1:-1:-1;;;;;;13750:80:0;;;;;;;;;-1:-1:-1;;;;;;;;13750:80:0;-1:-1:-1;;;13750:80:0;;;;;;;;;-1:-1:-1;;;;;13852:17:0;;;;;;;:22;13735:3;;13852:22;;;13847:33;13843:302;;-1:-1:-1;;;;;13930:17:0;;13897;13930;;;:12;:17;;;;;:22;13917:37;;:3;;-1:-1:-1;;;13930:22:0;;-1:-1:-1;;;;;13930:22:0;13917:7;:37::i;:::-;13897:57;;13988:11;;13973:12;:26;13969:58;;;-1:-1:-1;14016:11:0;;13969:58;14056:77;14072:60;14107:24;:12;14124:6;14107:24;:16;:24;:::i;:::-;-1:-1:-1;;;;;14077:17:0;;;;;;:12;:17;;;;;:24;-1:-1:-1;;;;;14077:24:0;;14072:60;:34;:60;:::i;:::-;-1:-1:-1;;;;;14056:11:0;;;;;;:6;:11;;;;;;;:77;:15;:77;:::i;:::-;-1:-1:-1;;;;;14042:11:0;;;;;;:6;:11;;;;;:91;-1:-1:-1;13843:302:0;14175:46;;;;;;;;-1:-1:-1;;;;;14200:13:0;;-1:-1:-1;14200:13:0;;;:8;:13;;;;;;;;-1:-1:-1;;;;;14175:46:0;;;;;-1:-1:-1;;;;;14175:46:0;;;;;;;;;14155:17;;;:12;:17;;;;;;:66;;;;;;;;;-1:-1:-1;;;14155:66:0;-1:-1:-1;;;;;;;;14155:66:0;;;;-1:-1:-1;;;;;;14155:66:0;;;;;;;;;;;;;-1:-1:-1;10521:1:0;13114:1212;;;;;:::o;25877:149::-;25959:10;25931:4;25948:22;;;:10;:22;;;;;:30;;-1:-1:-1;;25948:30:0;;;;;;;;;;;;;25996:22;;25877:149::o;17852:844::-;18178:14;;18124:8;;17936:3;;18168:40;;18199:8;;18169:24;;17936:3;;18169:24;:8;:24;:::i;18168:40::-;18164:525;;18242:10;18230:23;;18164:525;;;18275:40;18306:8;18276:24;18285:14;;18276:4;:8;;:24;;;;:::i;18275:40::-;18319:1;18275:45;18271:418;;;18349:9;18337:22;;18271:418;;;18381:40;18412:8;18382:24;18391:14;;18382:4;:8;;:24;;;;:::i;18381:40::-;18425:1;18381:45;18377:312;;;18455:9;18443:22;;18377:312;;;18487:40;18518:8;18488:24;18497:14;;18488:4;:8;;:24;;;;:::i;18487:40::-;18531:1;18487:45;18483:206;;;18561:9;18549:22;;18483:206;;;18593:40;18624:8;18594:24;18603:14;;18594:4;:8;;:24;;;;:::i;18593:40::-;18637:1;18593:45;18589:100;;;18667:9;18655:22;;18589:100;17852:844;;:::o;9738:32::-;;;;:::o;20616:200::-;4926:10;4920:17;;;;:5;:17;;;;;;20676:1;;4920:28;-1:-1:-1;4920:28:0;4912:88;;;;-1:-1:-1;;;4912:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20699:14;;:19;;;20698:54;;;20737:14;;20724:9;:27;;20698:54;20690:81;;;;;-1:-1:-1;;;20690:81:0;;;;;;;;;;;;-1:-1:-1;;;20690:81:0;;;;;;;;;;;;;;;-1:-1:-1;20782:14:0;:26;20616:200::o;9665:33::-;;;;:::o;4336:40::-;;;;;;;;;;;;;:::o;9042:32::-;;;;;;:::o;15951:143::-;-1:-1:-1;;;;;16061:15:0;;;16024:17;16061:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;15951:143::o;9777:33::-;;;;:::o;16390:899::-;16444:4;10091:14;;10077:11;;:28;10069:59;;;;;-1:-1:-1;;;10069:59:0;;;;;;;;;;;;-1:-1:-1;;;10069:59:0;;;;;;;;;;;;;;;16474:10;16489:1;16465:20;;;:8;:20;;;;;;16461:43;;-1:-1:-1;16499:5:0;16492:12;;16461:43;16517:11;16531:33;16553:10;16531:21;:33::i;:::-;16517:47;;16607:14;;16581:23;16597:6;16581:11;;:15;;:23;;;;:::i;:::-;:40;16577:113;;;16666:11;;16647:14;;:31;;;:18;:31;:::i;:::-;16638:40;;16577:113;16716:1;16706:6;:11;16702:29;;16726:5;16719:12;;;;;16702:29;16758:11;;:23;;16774:6;16758:23;:15;:23;:::i;:::-;16744:11;:37;16824:10;16815:20;;;;:8;:20;;;;;;:32;;16840:6;16815:32;:24;:32;:::i;:::-;16801:10;16792:20;;;;:8;:20;;;;;;;;:55;;;16969:6;:18;;;;;:22;;;17029:53;;;;;;;17054:20;;-1:-1:-1;;;;;17029:53:0;;;;;-1:-1:-1;;;;;16954:3:0;17029:53;;;;;;;;;17002:24;;;:12;:24;;;;;:80;;;;;;;;;-1:-1:-1;;;17002:80:0;-1:-1:-1;;;;;;;;17002:80:0;;;;-1:-1:-1;;;;;;17002:80:0;;;;;;;;;;;;;;;17173:40;;;;;;;-1:-1:-1;;;;;;;;;;;17173:40:0;;;;;;;;;;17229:30;;;;;;;;17240:10;;17229:30;;;;;;;;;;17277:4;17270:11;;;;16390:899;:::o;26505:642::-;9190:13;;26708:4;;9190:13;;:21;;:13;:21;9182:52;;;;;-1:-1:-1;;;9182:52:0;;;;;;;;;;;;-1:-1:-1;;;9182:52:0;;;;;;;;;;;;;;;26683:10;10445:25;;;;:10;:25;;;;;;;;:34;10437:73;;;;;-1:-1:-1;;;10437:73:0;;;;;;;;;;;;-1:-1:-1;;;10437:73:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26735:23:0;;26727:58;;;;;-1:-1:-1;;;26727:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26727:58:0;;;;;;;;;;;;;;;26813:1;26804:6;:10;26796:43;;;;;-1:-1:-1;;;26796:43:0;;;;;;;;;;;;-1:-1:-1;;;26796:43:0;;;;;;;;;;;;;;;26878:84;;;;;;;;26886:10;-1:-1:-1;;;;;26878:84:0;;;;;26898:9;-1:-1:-1;;;;;26878:84:0;;;;;26909:6;26878:84;;;;26917:12;;26878:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;26878:84:0;;;-1:-1:-1;;;26878:84:0;;;;;;;;;;;;;;26861:13;;26852:23;;:8;:23;;;;;;:110;;;;-1:-1:-1;;;;;26852:110:0;;;-1:-1:-1;;;;;;26852:110:0;;;;;;;;;;-1:-1:-1;26852:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27021:9;-1:-1:-1;;;;;26978:75:0;27009:10;-1:-1:-1;;;;;26978:75:0;26994:13;;26978:75;27032:6;27040:12;;26978:75;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;26978:75:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;26978:75:0;;;;-1:-1:-1;26978:75:0;;-1:-1:-1;;;;;26978:75:0;27082:13;;:20;;27100:1;27082:20;:17;:20;:::i;:::-;27066:13;:36;;;-1:-1:-1;;27120:17:0;;26505:642;-1:-1:-1;;;;;;26505:642:0:o;12360:242::-;4926:10;4920:17;;;;:5;:17;;;;;;12426:1;;4920:28;-1:-1:-1;4920:28:0;4912:88;;;;-1:-1:-1;;;4912:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12448:24:0;;12440:59;;;;;-1:-1:-1;;;12440:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12440:59:0;;;;;;;;;;;;;;;12510:17;:30;;-1:-1:-1;;;;;;12510:30:0;-1:-1:-1;;;;;12510:30:0;;;;;;;;;;;12556:38;;;12576:17;;;;12556:38;;;;;;;;;;;;;12360:242;;:::o;5197:364::-;4926:10;4920:17;;;;:5;:17;;;;;;5259:1;;4920:28;-1:-1:-1;4920:28:0;4912:88;;;;-1:-1:-1;;;4912:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5281:22:0;;5273:57;;;;;-1:-1:-1;;;5273:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5273:57:0;;;;;;;;;;;;;;;5343:5;:16;;-1:-1:-1;;;;;;5343:16:0;-1:-1:-1;;;;;5343:16:0;;;;;;;;;;5376:5;;-1:-1:-1;5370:12:0;;;:5;:12;;;;;;5385:1;5370:16;;5413:5;;5404:15;;5413:5;;;;;5404:15;;-1:-1:-1;5404:15:0;5444:5;;-1:-1:-1;;;;;5444:5:0;;5451:12;;;:5;:12;;;;;;;;;;5435:29;;;;;;;;;;;;;;;;;5483:10;5497:1;5477:17;;;:5;:17;;;;;;;;:21;;;5514:39;;;;;;;;;;;;;;;;5197:364;;:::o;19994:454::-;-1:-1:-1;;;;;20102:16:0;;20065:13;20102:16;;;:6;:16;;;;;;;;;20138:12;:22;;;;;;:27;-1:-1:-1;;;20138:27:0;;-1:-1:-1;;;;;20138:27:0;20133:38;20129:312;;-1:-1:-1;;;;;20222:22:0;;20188:17;20222:22;;;:12;:22;;;;;:27;20208:43;;:4;;-1:-1:-1;;;20222:27:0;;-1:-1:-1;;;;;20222:27:0;20208:8;:43::i;:::-;20188:63;;20285:11;;20270:12;:26;20266:58;;;-1:-1:-1;20313:11:0;;20266:58;20350:79;20363:65;20403:24;:12;20420:6;20403:24;:16;:24;:::i;20363:65::-;20350:8;;:79;:12;:79;:::i;:::-;20339:90;19994:454;-1:-1:-1;;;;19994:454:0:o;3188:183::-;3245:7;3278:1;3273;:6;;3265:49;;;;;-1:-1:-1;;;3265:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3337:5:0;;;3188:183::o;2718:332::-;2775:7;2874:1;2870;:5;2862:44;;;;;-1:-1:-1;;;2862:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2917:9;2933:1;2929;:5;;;;;;;2718:332;-1:-1:-1;;;;2718:332:0:o;3459:180::-;3516:7;3548:5;;;3572:6;;;;3564:46;;;;;-1:-1:-1;;;3564:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3630:1;3459:180;-1:-1:-1;;;3459:180:0:o;2114:469::-;2171:7;2415:6;2411:47;;-1:-1:-1;2445:1:0;2438:8;;2411:47;2482:5;;;2486:1;2482;:5;:1;2506:5;;;;;:10;2498:56;;;;-1:-1:-1;;;2498:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7507:27605;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7507:27605:0;;;;-1:-1:-1;7507:27605:0;;;;;;;;;;;;;;

Swarm Source

bzzr://80510e110c74db572f1e054964c125c4efa34a2b0b829e13049ae40618753956
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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