ETH Price: $2,463.47 (+0.48%)

Token

Wrapped Hbar (wHBAR)
 

Overview

Max Total Supply

2,019,409.0663 wHBAR

Holders

93

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
818.05907921 wHBAR

Value
$0.00
0x8f6e778787fad00a6fc97a03488c910fe5ef4662
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
wHBAR

Compiler Version
v0.5.15+commit.6a57276f

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-01
*/

// File: eip1996/contracts/libraries/StringUtil.sol

pragma solidity ^0.5.9;


library StringUtil {
    function toHash(string memory _s) internal pure returns (bytes32) {
        return keccak256(abi.encode(_s));
    }

    function isEmpty(string memory _s) internal pure returns (bool) {
        return bytes(_s).length == 0;
    }
}

// File: contracts/AccountCreator.sol

// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;


contract AccountCreator {
    using StringUtil for string;

    enum RequestStatus {
        Nonexistent,
        Requested,
        Confirmed,
        Failed,
        Refunded
    }

    struct AccountRequest {
        string hederaPublicKey;
        address payable requestor;
        uint256 paid;
        RequestStatus status;
    }

    mapping(bytes32 => AccountRequest) private requests;
    address public accountCreator;
    uint256 private fee;

    constructor(
        address creator, 
        uint256 accountCreationFee
    ) public {
        accountCreator = creator;
        fee = accountCreationFee;
    }

    function getAccountCreator() public view returns (address) {
        return accountCreator;
    }

    function getAccountCreationFee() external view returns (uint256) {
        return fee;
    }

    function setAccountCreationFee(uint256 feeInWei) external returns (bool) {
        require(
            msg.sender == accountCreator,
            "Only the account creator can call this function"
        );
        fee = feeInWei;
        return true;
    }

    // User calls createAccount
    function _createAccount(
        string memory operationId,
        string memory hederaPublicKey
    ) internal returns (bool) {
        bytes32 operationIdHash = operationId.toHash();
        AccountRequest storage request = requests[operationIdHash];

        require(!hederaPublicKey.isEmpty(), "Hedera Public Key cannot be empty");
        require(request.paid == 0, "A request with this id already exists");

        request.requestor = msg.sender;
        request.hederaPublicKey = hederaPublicKey;
        request.status = RequestStatus.Requested;
        request.paid = msg.value;

        emit CreateAccountRequest(
            operationId,
            msg.sender,
            hederaPublicKey
        );

        return true;
    }

    function createAccount(
        string calldata operationId, 
        string calldata hederaPublicKey
    ) external payable returns (bool) {
        require(
            msg.value == fee, 
            "Incorrect fee amount, call getAccountCreationFee"
        );

        // Make accountcreator a payable address, then transfer the value
        address(uint160(accountCreator)).transfer(msg.value);

        return _createAccount(
            operationId,
            hederaPublicKey
        );
    }

    // contract creates record and emits
    event CreateAccountRequest(
        string operationId, 
        address requestor, 
        string hederaPublicKey
    );
    // request is created with status Requested
    
    // Bridge program sees HederaAccountRequest
    // Tries to create a hedera account using the oracle, 
    // and if successful, should call
    function createAccountSuccess(
        string calldata operationId, 
        string calldata hederaAccountId
    ) external returns (bool) {
        require(
            msg.sender == accountCreator,
            "Only the account creator can call this function"
        );

        bytes32 operationIdHash = operationId.toHash();
        AccountRequest storage request = requests[operationIdHash];
        
        require(
            request.status == RequestStatus.Requested, 
            "Account Request must have status Requested to be set to status Confirmed"
        );
        
        request.status = RequestStatus.Confirmed;

        emit CreateAccountSuccess(
            operationId,
            request.requestor,
            request.hederaPublicKey,
            hederaAccountId
        );

        return true;
    }

    //which emits
    event CreateAccountSuccess(
        string operationId, 
        address requestor, 
        string hederaPublicKey, 
        string hederaAccountId
    );
    // request has status Confirmed

    // if Hedera account creation fails, bridge program should call
    function createAccountFail(
        string calldata operationId, 
        string calldata reason
    ) external returns (bool) {
        require(
            msg.sender == accountCreator,
            "Only the account creator can call this function"
        );

        bytes32 operationIdHash = operationId.toHash();
        AccountRequest storage request = requests[operationIdHash];
        
        require(
            request.status == RequestStatus.Requested, 
            "Account Request must have status Requested to be set to status Failed"
        );
        
        request.status = RequestStatus.Failed;

        emit CreateAccountFail(
            operationId,
            request.requestor,
            request.hederaPublicKey,
            request.paid,
            reason
        );

        return true;
    }
    
    // which emits
    event CreateAccountFail(
        string operationId,
        address requestor,
        string hederaPublicKey,
        uint256 amount,
        string reason
    );
    // request has status Failed

    // Set to Refunded for confirmation
    function createAccountRefund(
        string calldata operationId
    ) external returns (bool) {
        require(
            msg.sender == accountCreator,
            "Only the account creator can call this function"
        );

        bytes32 operationIdHash = operationId.toHash();
        AccountRequest storage request = requests[operationIdHash];

        require(
            request.status == RequestStatus.Failed,
            "Account Request must have status Failed to be refunded"
        );

        request.status = RequestStatus.Refunded;

        emit CreateAccountRefund(operationId, request.requestor, request.paid);
        return true;
    }

    // emits
    event CreateAccountRefund(
        string id, 
        address requestor, 
        uint256 refundAmountWei
    );
}

// File: eip2021/contracts/IPayoutable.sol

pragma solidity ^0.5.0;

interface IPayoutable {
    enum PayoutStatusCode {
        Nonexistent,
        Ordered,
        InProcess,
        FundsInSuspense,
        Executed,
        Rejected,
        Cancelled
    }

    function orderPayout(string calldata operationId, uint256 value, string calldata instructions) external returns (bool);
    function orderPayoutFrom(
        string calldata operationId,
        address walletToBePaidOut,
        uint256 value,
        string calldata instructions
    ) external returns (bool);
    function cancelPayout(string calldata operationId) external returns (bool);
    function processPayout(string calldata operationId) external returns (bool);
    function putFundsInSuspenseInPayout(string calldata operationId) external returns (bool);
    function executePayout(string calldata operationId) external returns (bool);
    function rejectPayout(string calldata operationId, string calldata reason) external returns (bool);
    function retrievePayoutData(string calldata operationId) external view returns (
        address walletToDebit,
        uint256 value,
        string memory instructions,
        PayoutStatusCode status
    );

    function authorizePayoutOperator(address operator) external returns (bool);
    function revokePayoutOperator(address operator) external returns (bool);
    function isPayoutOperatorFor(address operator, address from) external view returns (bool);

    event PayoutOrdered(address indexed orderer, string operationId, address indexed walletToDebit, uint256 value, string instructions);
    event PayoutInProcess(address indexed orderer, string operationId);
    event PayoutFundsInSuspense(address indexed orderer, string operationId);
    event PayoutExecuted(address indexed orderer, string operationId);
    event PayoutRejected(address indexed orderer, string operationId, string reason);
    event PayoutCancelled(address indexed orderer, string operationId);
    event AuthorizedPayoutOperator(address indexed operator, address indexed account);
    event RevokedPayoutOperator(address indexed operator, address indexed account);
}

// File: openzeppelin-solidity/contracts/GSN/Context.sol

pragma solidity ^0.5.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

pragma solidity ^0.5.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20Mintable}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

// File: eip1996/contracts/IHoldable.sol

pragma solidity ^0.5.0;

interface IHoldable {
    enum HoldStatusCode {
        Nonexistent,
        Ordered,
        Executed,
        ExecutedAndKeptOpen,
        ReleasedByNotary,
        ReleasedByPayee,
        ReleasedOnExpiration
    }

    function hold(
        string calldata operationId,
        address to,
        address notary,
        uint256 value,
        uint256 timeToExpiration
    ) external returns (bool);
    function holdFrom(
        string calldata operationId,
        address from,
        address to,
        address notary,
        uint256 value,
        uint256 timeToExpiration
    ) external returns (bool);
    function releaseHold(string calldata operationId) external returns (bool);
    function executeHold(string calldata operationId, uint256 value) external returns (bool);
    function executeHoldAndKeepOpen(string calldata operationId, uint256 value) external returns (bool);
    function renewHold(string calldata operationId, uint256 timeToExpiration) external returns (bool);
    function retrieveHoldData(string calldata operationId) external view returns (
        address from,
        address to,
        address notary,
        uint256 value,
        uint256 expiration,
        HoldStatusCode status
    );

    function balanceOnHold(address account) external view returns (uint256);
    function netBalanceOf(address account) external view returns (uint256);
    function totalSupplyOnHold() external view returns (uint256);

    function authorizeHoldOperator(address operator) external returns (bool);
    function revokeHoldOperator(address operator) external returns (bool);
    function isHoldOperatorFor(address operator, address from) external view returns (bool);

    event HoldCreated(
        address indexed holdIssuer,
        string  operationId,
        address from,
        address to,
        address indexed notary,
        uint256 value,
        uint256 expiration
    );
    event HoldExecuted(address indexed holdIssuer, string operationId, address indexed notary, uint256 heldValue, uint256 transferredValue);
    event HoldExecutedAndKeptOpen(address indexed holdIssuer, string operationId, address indexed notary, uint256 heldValue,
    uint256 transferredValue);
    event HoldReleased(address indexed holdIssuer, string operationId, HoldStatusCode status);
    event HoldRenewed(address indexed holdIssuer, string operationId, uint256 oldExpiration, uint256 newExpiration);
    event AuthorizedHoldOperator(address indexed operator, address indexed account);
    event RevokedHoldOperator(address indexed operator, address indexed account);
}

// File: eip1996/contracts/Holdable.sol

pragma solidity ^0.5.0;





contract Holdable is IHoldable, ERC20 {

    using SafeMath for uint256;
    using StringUtil for string;

    struct Hold {
        address issuer;
        address origin;
        address target;
        address notary;
        uint256 expiration;
        uint256 value;
        HoldStatusCode status;
    }

    mapping(bytes32 => Hold) internal holds;
    mapping(address => uint256) private heldBalance;
    mapping(address => mapping(address => bool)) private operators;

    uint256 private _totalHeldBalance;

    function hold(
        string memory operationId,
        address to,
        address notary,
        uint256 value,
        uint256 timeToExpiration
    ) public returns (bool)
    {
        require(to != address(0), "Payee address must not be zero address");

        emit HoldCreated(
            msg.sender,
            operationId,
            msg.sender,
            to,
            notary,
            value,
            timeToExpiration
        );

        return _hold(
            operationId,
            msg.sender,
            msg.sender,
            to,
            notary,
            value,
            timeToExpiration
        );
    }

    function holdFrom(
        string memory operationId,
        address from,
        address to,
        address notary,
        uint256 value,
        uint256 timeToExpiration
    ) public returns (bool)
    {
        require(to != address(0), "Payee address must not be zero address");
        require(from != address(0), "Payer address must not be zero address");
        require(operators[from][msg.sender], "This operator is not authorized");

        emit HoldCreated(
            msg.sender,
            operationId,
            from,
            to,
            notary,
            value,
            timeToExpiration
        );

        return _hold(
            operationId,
            msg.sender,
            from,
            to,
            notary,
            value,
            timeToExpiration
        );
    }

    function releaseHold(string memory operationId) public returns (bool) {
        Hold storage releasableHold = holds[operationId.toHash()];

        require(releasableHold.status == HoldStatusCode.Ordered || releasableHold.status == HoldStatusCode.ExecutedAndKeptOpen,"A hold can only be released in status Ordered or ExecutedAndKeptOpen");
        require(
            _isExpired(releasableHold.expiration) ||
            (msg.sender == releasableHold.notary) ||
            (msg.sender == releasableHold.target),
            "A not expired hold can only be released by the notary or the payee"
        );

        _releaseHold(operationId);

        emit HoldReleased(releasableHold.issuer, operationId, releasableHold.status);

        return true;
    }

    function executeHold(string memory operationId, uint256 value) public returns (bool) { 
        return _executeHold(operationId, value, false);
    }

    function executeHoldAndKeepOpen(string memory operationId, uint256 value) public returns (bool) {
        return _executeHold(operationId, value, true);
    }


    function _executeHold(string memory operationId, uint256 value, bool keepOpenIfHoldHasBalance) internal returns (bool) {

        Hold storage executableHold = holds[operationId.toHash()];

        require(executableHold.status == HoldStatusCode.Ordered || executableHold.status == HoldStatusCode.ExecutedAndKeptOpen,"A hold can only be executed in status Ordered or ExecutedAndKeptOpen");
        require(value != 0, "Value must be greater than zero");
        require(executableHold.notary == msg.sender, "The hold can only be executed by the notary");
        require(!_isExpired(executableHold.expiration), "The hold has already expired");
        require(value <= executableHold.value, "The value should be equal or less than the held amount");


        if (keepOpenIfHoldHasBalance && ((executableHold.value - value) > 0)) {
            _decreaseHeldBalance(operationId, value);
            _setHoldToExecutedAndKeptOpen(operationId, value); 
        }else {
            _decreaseHeldBalance(operationId, executableHold.value);
            _setHoldToExecuted(operationId, value);
        }
        
  
        

        _transfer(executableHold.origin, executableHold.target, value);

        return true;
    }


    function renewHold(string memory operationId, uint256 timeToExpiration) public returns (bool) {
        Hold storage renewableHold = holds[operationId.toHash()];

        require(renewableHold.status == HoldStatusCode.Ordered, "A hold can only be renewed in status Ordered");
        require(!_isExpired(renewableHold.expiration), "An expired hold can not be renewed");
        require(
            renewableHold.origin == msg.sender || renewableHold.issuer == msg.sender,
            "The hold can only be renewed by the issuer or the payer"
        );

        uint256 oldExpiration = renewableHold.expiration;

        if (timeToExpiration == 0) {
            renewableHold.expiration = 0;
        } else {
            /* solium-disable-next-line security/no-block-members */
            renewableHold.expiration = now.add(timeToExpiration);
        }

        emit HoldRenewed(
            renewableHold.issuer,
            operationId,
            oldExpiration,
            renewableHold.expiration
        );

        return true;
    }

    function retrieveHoldData(string memory operationId) public view returns (
        address from,
        address to,
        address notary,
        uint256 value,
        uint256 expiration,
        HoldStatusCode status)
    {
        Hold storage retrievedHold = holds[operationId.toHash()];
        return (
            retrievedHold.origin,
            retrievedHold.target,
            retrievedHold.notary,
            retrievedHold.value,
            retrievedHold.expiration,
            retrievedHold.status
        );
    }

    function balanceOnHold(address account) public view returns (uint256) {
        return heldBalance[account];
    }

    function netBalanceOf(address account) public view returns (uint256) {
        return super.balanceOf(account);
    }

    function totalSupplyOnHold() public view returns (uint256) {
        return _totalHeldBalance;
    }

    function isHoldOperatorFor(address operator, address from) public view returns (bool) {
        return operators[from][operator];
    }

    function authorizeHoldOperator(address operator) public returns (bool) {
        require (operators[msg.sender][operator] == false, "The operator is already authorized");

        operators[msg.sender][operator] = true;
        emit AuthorizedHoldOperator(operator, msg.sender);
        return true;
    }

    function revokeHoldOperator(address operator) public returns (bool) {
        require (operators[msg.sender][operator] == true, "The operator is already not authorized");

        operators[msg.sender][operator] = false;
        emit RevokedHoldOperator(operator, msg.sender);
        return true;
    }

    /// @notice Retrieve the erc20.balanceOf(account) - heldBalance(account)
    function balanceOf(address account) public view returns (uint256) {
        return super.balanceOf(account).sub(heldBalance[account]);
    }

    function transfer(address _to, uint256 _value) public returns (bool) {
        require(balanceOf(msg.sender) >= _value, "Not enough available balance");
        return super.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(balanceOf(_from) >= _value, "Not enough available balance");
        return super.transferFrom(_from, _to, _value);
    }

    function _isExpired(uint256 expiration) internal view returns (bool) {
        /* solium-disable-next-line security/no-block-members */
        return expiration != 0 && (now >= expiration);
    }

    function _hold(
        string memory operationId,
        address issuer,
        address from,
        address to,
        address notary,
        uint256 value,
        uint256 timeToExpiration
    ) internal returns (bool)
    {
        Hold storage newHold = holds[operationId.toHash()];

        require(!operationId.isEmpty(), "Operation ID must not be empty");
        require(value != 0, "Value must be greater than zero");
        require(newHold.value == 0, "This operationId already exists");
        require(notary != address(0), "Notary address must not be zero address");
        require(value <= balanceOf(from), "Amount of the hold can't be greater than the balance of the origin");

        newHold.issuer = issuer;
        newHold.origin = from;
        newHold.target = to;
        newHold.notary = notary;
        newHold.value = value;
        newHold.status = HoldStatusCode.Ordered;

        if (timeToExpiration != 0) {
            /* solium-disable-next-line security/no-block-members */
            newHold.expiration = now.add(timeToExpiration);
        }

        heldBalance[from] = heldBalance[from].add(value);
        _totalHeldBalance = _totalHeldBalance.add(value);

        return true;
    }

    function _releaseHold(string memory operationId) internal returns (bool) {
        Hold storage releasableHold = holds[operationId.toHash()];

        if (_isExpired(releasableHold.expiration)) {
            releasableHold.status = HoldStatusCode.ReleasedOnExpiration;
        } else {
            if (releasableHold.notary == msg.sender) {
                releasableHold.status = HoldStatusCode.ReleasedByNotary;
            } else {
                releasableHold.status = HoldStatusCode.ReleasedByPayee;
            }
        }

        heldBalance[releasableHold.origin] = heldBalance[releasableHold.origin].sub(releasableHold.value);
        _totalHeldBalance = _totalHeldBalance.sub(releasableHold.value);

        return true;
    }

    function _setHoldToExecuted(string memory operationId, uint256 value) internal {
        Hold storage executableHold = holds[operationId.toHash()];
        executableHold.status = HoldStatusCode.Executed;

        emit HoldExecuted(
            executableHold.issuer, 
            operationId,
            executableHold.notary,
            executableHold.value,
            value
        );
    }

    function _setHoldToExecutedAndKeptOpen(string memory operationId, uint256 value) internal {
        Hold storage executableHold = holds[operationId.toHash()];
        executableHold.status = HoldStatusCode.ExecutedAndKeptOpen;
        executableHold.value = executableHold.value.sub(value);

        emit HoldExecutedAndKeptOpen(
            executableHold.issuer,
            operationId,
            executableHold.notary,
            executableHold.value,
            value
            );
    }

    function _decreaseHeldBalance(string memory operationId, uint256 value) internal {
        Hold storage executableHold = holds[operationId.toHash()];
        heldBalance[executableHold.origin] = heldBalance[executableHold.origin].sub(value);
        _totalHeldBalance = _totalHeldBalance.sub(value);
    }
}

// File: contracts/Payoutable.sol
pragma solidity >=0.5.0;



// modification: allow Suspense --> User
contract Payoutable is IPayoutable, Holdable {

    struct OrderedPayout {
        string instructions;
        PayoutStatusCode status;
    }

    mapping(bytes32 => OrderedPayout) private orderedPayouts;
    mapping(address => mapping(address => bool)) private payoutOperators;
    address public payoutAgent;
    address public suspenseAccount;

    constructor(address _suspenseAccount) public {
        require(_suspenseAccount != address(0), "Suspense account must not be the zero address");
        suspenseAccount = _suspenseAccount;

        payoutAgent = _suspenseAccount;
    }

    function orderPayout(string calldata operationId, uint256 value, string calldata instructions) external returns (bool) {
        _orderPayout(
            msg.sender,
            operationId,
            msg.sender,
            value,
            instructions
        );

        emit PayoutOrdered(
            msg.sender,
            operationId,
            msg.sender,
            value,
            instructions
        );

        return true;
    }

    function orderPayoutFrom(
        string calldata operationId,
        address walletToBePaidOut,
        uint256 value,
        string calldata instructions
    ) external returns (bool)
    {
        require(walletToBePaidOut != address(0), "walletToBePaidOut address must not be zero address");
        require(payoutOperators[walletToBePaidOut][msg.sender], "This operator is not authorized");

        emit PayoutOrdered(
            msg.sender,
            operationId,
            walletToBePaidOut,
            value,
            instructions
        );

        return _orderPayout(
            msg.sender,
            operationId,
            walletToBePaidOut,
            value,
            instructions
        );
    }

    function cancelPayout(string calldata operationId) external returns (bool) {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage cancelablePayout = orderedPayouts[operationIdHash];
        Hold storage cancelableHold = holds[operationIdHash];

        require(cancelablePayout.status == PayoutStatusCode.Ordered, "A payout can only be cancelled in status Ordered");
        require(
            msg.sender == cancelableHold.issuer || msg.sender == cancelableHold.origin,
            "A payout can only be cancelled by the orderer or the walletToBePaidOut"
        );

        _releaseHold(operationId);

        cancelablePayout.status = PayoutStatusCode.Cancelled;

        emit PayoutCancelled(
            cancelableHold.issuer,
            operationId
        );

        return true;
    }

    function processPayout(string calldata operationId) external returns (bool) {
        revert("Function not supported in this implementation");
    }

    function putFundsInSuspenseInPayout(string calldata operationId) external returns (bool) {
        revert("Function not supported in this implementation");
    }

    event PayoutFundsReady(string operationId, uint256 amount, string instructions);
    function transferPayoutToSuspenseAccount(string calldata operationId) external returns (bool) {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage inSuspensePayout = orderedPayouts[operationIdHash];

        require(inSuspensePayout.status == PayoutStatusCode.Ordered, "A payout can only be set to FundsInSuspense from status Ordered");
        require(msg.sender == payoutAgent, "A payout can only be set to in suspense by the payout agent");

        Hold storage inSuspenseHold = holds[operationIdHash];

        super._transfer(inSuspenseHold.origin, inSuspenseHold.target, inSuspenseHold.value);
        super._setHoldToExecuted(operationId, inSuspenseHold.value);

        _releaseHold(operationId);
        inSuspensePayout.status = PayoutStatusCode.FundsInSuspense;

        emit PayoutFundsInSuspense(
            inSuspenseHold.issuer,
            operationId
        );

        emit PayoutFundsReady(
            operationId,
            inSuspenseHold.value,
            inSuspensePayout.instructions
        );

        return true;
    }

    // New
    event PayoutFundsReturned(string operationId);
    function returnPayoutFromSuspenseAccount(string calldata operationId) external returns (bool) {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage inSuspensePayout = orderedPayouts[operationIdHash];

        require(inSuspensePayout.status == PayoutStatusCode.FundsInSuspense, "A payout can only be set back to Ordered from status FundsInSuspense");
        require(msg.sender == payoutAgent, "A payout can only be set back to Ordered by the payout agent");

        Hold storage inSuspenseHold = holds[operationIdHash];

        super._transfer(inSuspenseHold.target, inSuspenseHold.origin, inSuspenseHold.value);

        inSuspensePayout.status = PayoutStatusCode.Ordered;

        emit PayoutFundsReturned(
            operationId
        );

        return true;
    }

    function executePayout(string calldata operationId) external returns (bool) {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage executedPayout = orderedPayouts[operationIdHash];

        require(executedPayout.status == PayoutStatusCode.FundsInSuspense, "A payout can only be executed from status FundsInSuspense");
        require(msg.sender == payoutAgent, "A payout can only be executed by the payout agent");

        Hold storage executedHold = holds[operationIdHash];

        _burn(executedHold.target, executedHold.value);

        executedPayout.status = PayoutStatusCode.Executed;

        emit PayoutExecuted(
            executedHold.issuer,
            operationId
        );

        return true;
    }

    function rejectPayout(string calldata operationId, string calldata reason) external returns (bool) {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage rejectedPayout = orderedPayouts[operationIdHash];

        require(rejectedPayout.status == PayoutStatusCode.Ordered, "A payout can only be rejected from status Ordered");
        require(msg.sender == payoutAgent, "A payout can only be rejected by the payout agent");

        Hold storage rejectedHold = holds[operationIdHash];

        rejectedPayout.status = PayoutStatusCode.Rejected;

        emit PayoutRejected(
            rejectedHold.issuer,
            operationId,
            reason
        );

        return true;
    }

    function retrievePayoutData(string calldata operationId) external view returns (
        address walletToDebit,
        uint256 value,
        string memory instructions,
        PayoutStatusCode status
    )
    {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage retrievedPayout = orderedPayouts[operationIdHash];
        Hold storage retrievedHold = holds[operationIdHash];

        return (
            retrievedHold.origin,
            retrievedHold.value,
            retrievedPayout.instructions,
            retrievedPayout.status
        );
    }

    function isPayoutOperatorFor(address operator, address from) external view returns (bool) {
        return payoutOperators[from][operator];
    }

    function authorizePayoutOperator(address operator) external returns (bool) {
        require(payoutOperators[msg.sender][operator] == false, "The operator is already authorized");

        payoutOperators[msg.sender][operator] = true;
        emit AuthorizedPayoutOperator(operator, msg.sender);
        return true;
    }

    function revokePayoutOperator(address operator) external returns (bool) {
        require(payoutOperators[msg.sender][operator], "The operator is already not authorized");

        payoutOperators[msg.sender][operator] = false;
        emit RevokedPayoutOperator(operator, msg.sender);
        return true;
    }

    function _orderPayout(
        address orderer,
        string memory operationId,
        address walletToBePaidOut,
        uint256 value,
        string memory instructions
    ) internal returns (bool)
    {
        OrderedPayout storage newPayout = orderedPayouts[operationId.toHash()];

        require(!instructions.isEmpty(), "Instructions must not be empty");

        newPayout.instructions = instructions;
        newPayout.status = PayoutStatusCode.Ordered;

        return _hold(
            operationId,
            orderer,
            walletToBePaidOut,
            suspenseAccount,
            payoutAgent,
            value,
            0
        );
    }
}

// File: contracts/Token.sol
pragma solidity >=0.5.0;



contract wHBAR is Payoutable, AccountCreator {
    string _name;
    string _symbol;
    uint8 _decimals;

    address _owner;

    uint256 _accountCreateFee;
    
    constructor(
        string memory __name,
        string memory __symbol,
        uint8 __decimals,
        address __customOwner

    )
    public
    Payoutable(__customOwner) 
    AccountCreator(__customOwner, 50000000000000) 
    { // AccountCreator ERC20 Holdable SafeMath, 50k gwei hedera account creation fee
        _name = __name;
        _symbol = __symbol;
        _decimals = __decimals;
        _owner = __customOwner;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function owner() public view returns (address) {
        return _owner;
    }

    function mint(address to, uint256 amount) public returns (bool) {
        require(_msgSender() == _owner, "unauthorized");
        super._mint(to, amount);
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"__name","type":"string"},{"internalType":"string","name":"__symbol","type":"string"},{"internalType":"uint8","name":"__decimals","type":"uint8"},{"internalType":"address","name":"__customOwner","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AuthorizedHoldOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AuthorizedPayoutOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"string","name":"hederaPublicKey","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"CreateAccountFail","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"id","type":"string"},{"indexed":false,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"uint256","name":"refundAmountWei","type":"uint256"}],"name":"CreateAccountRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"string","name":"hederaPublicKey","type":"string"}],"name":"CreateAccountRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"string","name":"hederaPublicKey","type":"string"},{"indexed":false,"internalType":"string","name":"hederaAccountId","type":"string"}],"name":"CreateAccountSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holdIssuer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"notary","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"HoldCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holdIssuer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":true,"internalType":"address","name":"notary","type":"address"},{"indexed":false,"internalType":"uint256","name":"heldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferredValue","type":"uint256"}],"name":"HoldExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holdIssuer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":true,"internalType":"address","name":"notary","type":"address"},{"indexed":false,"internalType":"uint256","name":"heldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferredValue","type":"uint256"}],"name":"HoldExecutedAndKeptOpen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holdIssuer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"enum IHoldable.HoldStatusCode","name":"status","type":"uint8"}],"name":"HoldReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holdIssuer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"uint256","name":"oldExpiration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newExpiration","type":"uint256"}],"name":"HoldRenewed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"}],"name":"PayoutCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"}],"name":"PayoutExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"}],"name":"PayoutFundsInSuspense","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"instructions","type":"string"}],"name":"PayoutFundsReady","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"operationId","type":"string"}],"name":"PayoutFundsReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"}],"name":"PayoutInProcess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":true,"internalType":"address","name":"walletToDebit","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"instructions","type":"string"}],"name":"PayoutOrdered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"PayoutRejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RevokedHoldOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RevokedPayoutOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"accountCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"authorizeHoldOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"authorizePayoutOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOnHold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"cancelPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"string","name":"hederaPublicKey","type":"string"}],"name":"createAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"string","name":"reason","type":"string"}],"name":"createAccountFail","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"createAccountRefund","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"string","name":"hederaAccountId","type":"string"}],"name":"createAccountSuccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"executeHold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"executeHoldAndKeepOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"executePayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAccountCreationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAccountCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"notary","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"timeToExpiration","type":"uint256"}],"name":"hold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"notary","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"timeToExpiration","type":"uint256"}],"name":"holdFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"}],"name":"isHoldOperatorFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"}],"name":"isPayoutOperatorFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"netBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"instructions","type":"string"}],"name":"orderPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"address","name":"walletToBePaidOut","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"instructions","type":"string"}],"name":"orderPayoutFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"payoutAgent","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"processPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"putFundsInSuspenseInPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"string","name":"reason","type":"string"}],"name":"rejectPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"releaseHold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"uint256","name":"timeToExpiration","type":"uint256"}],"name":"renewHold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"retrieveHoldData","outputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"notary","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"enum IHoldable.HoldStatusCode","name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"retrievePayoutData","outputs":[{"internalType":"address","name":"walletToDebit","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"instructions","type":"string"},{"internalType":"enum IPayoutable.PayoutStatusCode","name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"returnPayoutFromSuspenseAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"revokeHoldOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"revokePayoutOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"setAccountCreationFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"suspenseAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyOnHold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"transferPayoutToSuspenseAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620058ac380380620058ac833981810160405260808110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060409081526020820151910151909250905080652d79883d2000816001600160a01b038116620001fb5760405162461bcd60e51b815260040180806020018281038252602d8152602001806200587f602d913960400191505060405180910390fd5b600a80546001600160a01b039283166001600160a01b03199182168117909255600980548216909217909155600c805494909216931692909217909155600d5583516200025090600e906020870190620002a3565b5082516200026690600f906020860190620002a3565b50601080546001600160a01b0390921661010002610100600160a81b031960ff90941660ff19909316929092179290921617905550620003489050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002e657805160ff191683800117855562000316565b8280016001018555821562000316579182015b8281111562000316578251825591602001919060010190620002f9565b506200032492915062000328565b5090565b6200034591905b808211156200032457600081556001016200032f565b90565b61552780620003586000396000f3fe60806040526004361061022e5760003560e01c806306fdde0314610233578063095ea7b3146102bd5780630ab5555d1461030a5780630b986a50146103345780630cd6300614610379578063174d988a146103ac57806318160ddd146103dd57806319289287146103f257806323b872dd146104b057806324cc7076146104f3578063264b44d51461056e57806330dfa9d5146105e9578063313ce5671461061c57806336c8773f14610647578063395093511461067a57806340c10f19146106b3578063473dbde8146106ec5780634cb0267f146107015780634f6c0edf1461082f57806351bfb9611461090f578063604015811461092457806367bf10301461095f5780636ce4814d1461097457806370a08231146109ef57806373fb44c614610a225780637649c6d114610a9d5780637840499914610ad05780638da5cb5b14610b9e5780638e4a5a9214610bb357806395d89b4114610c64578063a457c2d714610c79578063a9059cbb14610cb2578063abb80b4214610ceb578063abd3bd1914610d9e578063b03a635f14610e69578063b1a1322c14610ee4578063b39832d414610faf578063b89b204e1461107e578063c2ac5b5c14611149578063c5a468c614611184578063c5b670f0146111b7578063d7faaf5c1461128e578063da7d3d0414611309578063da84e00014610a22578063dd62ed3e146113bc578063e83c4671146113f7578063ec38b2291461151f578063f124f7f4146115d2578063fa62edc1146115e7575b600080fd5b34801561023f57600080fd5b506102486115fc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028257818101518382015260200161026a565b50505050905090810190601f1680156102af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c957600080fd5b506102f6600480360360408110156102e057600080fd5b506001600160a01b038135169060200135611693565b604080519115158252519081900360200190f35b34801561031657600080fd5b506102f66004803603602081101561032d57600080fd5b50356116b0565b34801561034057600080fd5b506103676004803603602081101561035757600080fd5b50356001600160a01b0316611705565b60408051918252519081900360200190f35b34801561038557600080fd5b506102f66004803603602081101561039c57600080fd5b50356001600160a01b0316611716565b3480156103b857600080fd5b506103c16117d2565b604080516001600160a01b039092168252519081900360200190f35b3480156103e957600080fd5b506103676117e1565b6102f66004803603604081101561040857600080fd5b810190602081018135600160201b81111561042257600080fd5b82018360208201111561043457600080fd5b803590602001918460018302840111600160201b8311171561045557600080fd5b919390929091602081019035600160201b81111561047257600080fd5b82018360208201111561048457600080fd5b803590602001918460018302840111600160201b831117156104a557600080fd5b5090925090506117e7565b3480156104bc57600080fd5b506102f6600480360360608110156104d357600080fd5b506001600160a01b038135811691602081013590911690604001356118df565b3480156104ff57600080fd5b506102f66004803603602081101561051657600080fd5b810190602081018135600160201b81111561053057600080fd5b82018360208201111561054257600080fd5b803590602001918460018302840111600160201b8311171561056357600080fd5b509092509050611950565b34801561057a57600080fd5b506102f66004803603602081101561059157600080fd5b810190602081018135600160201b8111156105ab57600080fd5b8201836020820111156105bd57600080fd5b803590602001918460018302840111600160201b831117156105de57600080fd5b509092509050611c62565b3480156105f557600080fd5b506102f66004803603602081101561060c57600080fd5b50356001600160a01b0316611e38565b34801561062857600080fd5b50610631611ef8565b6040805160ff9092168252519081900360200190f35b34801561065357600080fd5b506102f66004803603602081101561066a57600080fd5b50356001600160a01b0316611f01565b34801561068657600080fd5b506102f66004803603604081101561069d57600080fd5b506001600160a01b038135169060200135611fc2565b3480156106bf57600080fd5b506102f6600480360360408110156106d657600080fd5b506001600160a01b03813516906020013561201b565b3480156106f857600080fd5b506103c161208b565b34801561070d57600080fd5b506107b26004803603602081101561072457600080fd5b810190602081018135600160201b81111561073e57600080fd5b82018360208201111561075057600080fd5b803590602001918460018302840111600160201b8311171561077157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061209a945050505050565b60405180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200182600681111561081657fe5b60ff168152602001965050505050505060405180910390f35b34801561083b57600080fd5b506102f66004803603608081101561085257600080fd5b810190602081018135600160201b81111561086c57600080fd5b82018360208201111561087e57600080fd5b803590602001918460018302840111600160201b8311171561089f57600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b8111156108d157600080fd5b8201836020820111156108e357600080fd5b803590602001918460018302840111600160201b8311171561090457600080fd5b509092509050612108565b34801561091b57600080fd5b506103676122ce565b34801561093057600080fd5b506102f66004803603604081101561094757600080fd5b506001600160a01b03813581169160200135166122d4565b34801561096b57600080fd5b506103c1612303565b34801561098057600080fd5b506102f66004803603602081101561099757600080fd5b810190602081018135600160201b8111156109b157600080fd5b8201836020820111156109c357600080fd5b803590602001918460018302840111600160201b831117156109e457600080fd5b509092509050612312565b3480156109fb57600080fd5b5061036760048036036020811015610a1257600080fd5b50356001600160a01b03166124ae565b348015610a2e57600080fd5b506102f660048036036020811015610a4557600080fd5b810190602081018135600160201b811115610a5f57600080fd5b820183602082011115610a7157600080fd5b803590602001918460018302840111600160201b83111715610a9257600080fd5b5090925090506124e0565b348015610aa957600080fd5b506102f660048036036020811015610ac057600080fd5b50356001600160a01b0316612519565b348015610adc57600080fd5b506102f6600480360360a0811015610af357600080fd5b810190602081018135600160201b811115610b0d57600080fd5b820183602082011115610b1f57600080fd5b803590602001918460018302840111600160201b83111715610b4057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401351692604081013592506060013590506125d9565b348015610baa57600080fd5b506103c1612718565b348015610bbf57600080fd5b506102f660048036036020811015610bd657600080fd5b810190602081018135600160201b811115610bf057600080fd5b820183602082011115610c0257600080fd5b803590602001918460018302840111600160201b83111715610c2357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061272c945050505050565b348015610c7057600080fd5b5061024861290f565b348015610c8557600080fd5b506102f660048036036040811015610c9c57600080fd5b506001600160a01b038135169060200135612970565b348015610cbe57600080fd5b506102f660048036036040811015610cd557600080fd5b506001600160a01b0381351690602001356129de565b348015610cf757600080fd5b506102f660048036036040811015610d0e57600080fd5b810190602081018135600160201b811115610d2857600080fd5b820183602082011115610d3a57600080fd5b803590602001918460018302840111600160201b83111715610d5b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250612a4d915050565b348015610daa57600080fd5b506102f660048036036040811015610dc157600080fd5b810190602081018135600160201b811115610ddb57600080fd5b820183602082011115610ded57600080fd5b803590602001918460018302840111600160201b83111715610e0e57600080fd5b919390929091602081019035600160201b811115610e2b57600080fd5b820183602082011115610e3d57600080fd5b803590602001918460018302840111600160201b83111715610e5e57600080fd5b509092509050612a5b565b348015610e7557600080fd5b506102f660048036036020811015610e8c57600080fd5b810190602081018135600160201b811115610ea657600080fd5b820183602082011115610eb857600080fd5b803590602001918460018302840111600160201b83111715610ed957600080fd5b509092509050612c87565b348015610ef057600080fd5b506102f660048036036040811015610f0757600080fd5b810190602081018135600160201b811115610f2157600080fd5b820183602082011115610f3357600080fd5b803590602001918460018302840111600160201b83111715610f5457600080fd5b919390929091602081019035600160201b811115610f7157600080fd5b820183602082011115610f8357600080fd5b803590602001918460018302840111600160201b83111715610fa457600080fd5b509092509050612e27565b348015610fbb57600080fd5b506102f660048036036060811015610fd257600080fd5b810190602081018135600160201b811115610fec57600080fd5b820183602082011115610ffe57600080fd5b803590602001918460018302840111600160201b8311171561101f57600080fd5b91939092823592604081019060200135600160201b81111561104057600080fd5b82018360208201111561105257600080fd5b803590602001918460018302840111600160201b8311171561107357600080fd5b509092509050612fdd565b34801561108a57600080fd5b506102f6600480360360408110156110a157600080fd5b810190602081018135600160201b8111156110bb57600080fd5b8201836020820111156110cd57600080fd5b803590602001918460018302840111600160201b831117156110ee57600080fd5b919390929091602081019035600160201b81111561110b57600080fd5b82018360208201111561111d57600080fd5b803590602001918460018302840111600160201b8311171561113e57600080fd5b5090925090506130fa565b34801561115557600080fd5b506102f66004803603604081101561116c57600080fd5b506001600160a01b0381358116916020013516613334565b34801561119057600080fd5b50610367600480360360208110156111a757600080fd5b50356001600160a01b0316613363565b3480156111c357600080fd5b506102f6600480360360c08110156111da57600080fd5b810190602081018135600160201b8111156111f457600080fd5b82018360208201111561120657600080fd5b803590602001918460018302840111600160201b8311171561122757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b03833581169450602084013581169360408101359091169250606081013591506080013561337e565b34801561129a57600080fd5b506102f6600480360360208110156112b157600080fd5b810190602081018135600160201b8111156112cb57600080fd5b8201836020820111156112dd57600080fd5b803590602001918460018302840111600160201b831117156112fe57600080fd5b50909250905061355e565b34801561131557600080fd5b506102f66004803603604081101561132c57600080fd5b810190602081018135600160201b81111561134657600080fd5b82018360208201111561135857600080fd5b803590602001918460018302840111600160201b8311171561137957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506136eb915050565b3480156113c857600080fd5b50610367600480360360408110156113df57600080fd5b506001600160a01b03813581169160200135166136f9565b34801561140357600080fd5b506114726004803603602081101561141a57600080fd5b810190602081018135600160201b81111561143457600080fd5b82018360208201111561144657600080fd5b803590602001918460018302840111600160201b8311171561146757600080fd5b509092509050613724565b60405180856001600160a01b03166001600160a01b03168152602001848152602001806020018360068111156114a457fe5b60ff168152602001828103825284818151815260200191508051906020019080838360005b838110156114e15781810151838201526020016114c9565b50505050905090810190601f16801561150e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561152b57600080fd5b506102f66004803603604081101561154257600080fd5b810190602081018135600160201b81111561155c57600080fd5b82018360208201111561156e57600080fd5b803590602001918460018302840111600160201b8311171561158f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061384d915050565b3480156115de57600080fd5b506103c1613a5e565b3480156115f357600080fd5b50610367613a6d565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116885780601f1061165d57610100808354040283529160200191611688565b820191906000526020600020905b81548152906001019060200180831161166b57829003601f168201915b505050505090505b90565b60006116a76116a0613a73565b8484613a77565b50600192915050565b600c546000906001600160a01b031633146116fc5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b50600d55600190565b600061171082613b63565b92915050565b3360009081526008602090815260408083206001600160a01b038516845290915281205460ff166117785760405162461bcd60e51b81526004018080602001828103825260268152602001806150af6026913960400191505060405180910390fd5b3360008181526008602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917f310d4cbf7ddcbf3169fb9371662fdfdfd6be42d3c1faed93bb0ec2f5173ce9b791a3506001919050565b600c546001600160a01b031690565b60025490565b6000600d5434146118295760405162461bcd60e51b81526004018080602001828103825260308152602001806153316030913960400191505060405180910390fd5b600c546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611862573d6000803e3d6000fd5b506118d685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092019190915250613b7e92505050565b95945050505050565b6000816118eb856124ae565b101561193d576040805162461bcd60e51b815260206004820152601c60248201527b4e6f7420656e6f75676820617661696c61626c652062616c616e636560201b604482015290519081900360640190fd5b611948848484613d73565b949350505050565b60008061199284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020526040902090915060018082015460ff1660068111156119b757fe5b146119f35760405162461bcd60e51b815260040180806020018281038252603f815260200180614e44603f913960400191505060405180910390fd5b6009546001600160a01b03163314611a3c5760405162461bcd60e51b815260040180806020018281038252603b81526020018061543b603b913960400191505060405180910390fd5b6000828152600360205260409020600181015460028201546005830154611a70926001600160a01b03908116921690613e8d565b611ab386868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506005830154613fd7565b611af286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140dc92505050565b5060018201805460ff19166003179055805460408051602080825281018890526001600160a01b03909216917f451f61007271790232845a513d5966bccacab4d17e29a9995c7ccbaa940e6fc5918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a27f085d7f4eb5ec120940eff725bef88dceeb82326ffedf842de5b4cc0b3697cd1b86868360050154856000016040518080602001848152602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528554600260001961010060018416150201909116048082526020909101915085908015611c445780601f10611c1957610100808354040283529160200191611c44565b820191906000526020600020905b815481529060010190602001808311611c2757829003601f168201915b5050965050505050505060405180910390a150600195945050505050565b600080611ca484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020908152604080832060039092529091209192509060018083015460ff166006811115611cd557fe5b14611d115760405162461bcd60e51b8152600401808060200182810382526030815260200180614ef76030913960400191505060405180910390fd5b80546001600160a01b0316331480611d35575060018101546001600160a01b031633145b611d705760405162461bcd60e51b8152600401808060200182810382526046815260200180614d2a6046913960600191505060405180910390fd5b611daf86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140dc92505050565b5060018201805460ff19166006179055805460408051602080825281018890526001600160a01b03909216917f6ef2e76d8eadaf1eadb34e35d630315078941cb5ae013c870d1268c0fb67ff92918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a250600195945050505050565b3360009081526008602090815260408083206001600160a01b038516845290915281205460ff1615611e9b5760405162461bcd60e51b81526004018080602001828103825260228152602001806150d56022913960400191505060405180910390fd5b3360008181526008602090815260408083206001600160a01b0387168085529252808320805460ff191660011790555190917ffe9272e2e39a0471797d14bdcbd79ab868dd481d19256b15a886c1213b983ddf91a3506001919050565b60105460ff1690565b3360009081526005602090815260408083206001600160a01b038516845290915281205460ff161515600114611f685760405162461bcd60e51b81526004018080602001828103825260268152602001806150af6026913960400191505060405180910390fd5b3360008181526005602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917f2e96d672cd86b559c08b9503df494f90c7766b7804ed5c650d0adde07cdf483f91a3506001919050565b60006116a7611fcf613a73565b846120168560016000611fe0613a73565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6141d316565b613a77565b60105460009061010090046001600160a01b0316612037613a73565b6001600160a01b031614612081576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6116a7838361422b565b600a546001600160a01b031681565b6000806000806000806000600360006120b28a613dfb565b81526020810191909152604001600020600181015460028201546003830154600584015460048501546006909501546001600160a01b039485169e9385169d50939091169a50985091965060ff16945092505050565b60006001600160a01b03851661214f5760405162461bcd60e51b815260040180806020018281038252603281526020018061512d6032913960400191505060405180910390fd5b6001600160a01b038516600090815260086020908152604080832033845290915290205460ff166121b5576040805162461bcd60e51b815260206004820152601f60248201526000805160206153e5833981519152604482015290519081900360640190fd5b846001600160a01b0316336001600160a01b031660008051602061508f83398151915289898888886040518080602001858152602001806020018381038352888882818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f1916909201829003995090975050505050505050a36122c33388888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528b93508a925090899089908190840183828082843760009201919091525061430992505050565b979650505050505050565b60065490565b6001600160a01b0380821660009081526008602090815260408083209386168352929052205460ff1692915050565b6009546001600160a01b031681565b60008061235484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b60008181526007602052604090209091506003600182015460ff16600681111561237a57fe5b146123b65760405162461bcd60e51b815260040180806020018281038252604481526020018061501a6044913960600191505060405180910390fd5b6009546001600160a01b031633146123ff5760405162461bcd60e51b815260040180806020018281038252603c81526020018061515f603c913960400191505060405180910390fd5b6000828152600360205260409020600281015460018201546005830154612433926001600160a01b03908116921690613e8d565b6001828101805460ff1916909117905560408051602080825281018790527f766abd3a64bee5c3f0dd407ddcbc2bbcbb99100d725a88cb1ac43b962d41ce80918891889181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a150600195945050505050565b6001600160a01b038116600090815260046020526040812054611710906124d484613b63565b9063ffffffff6143cc16565b600060405162461bcd60e51b815260040180806020018281038252602d815260200180614e83602d913960400191505060405180910390fd5b3360009081526005602090815260408083206001600160a01b038516845290915281205460ff161561257c5760405162461bcd60e51b81526004018080602001828103825260228152602001806150d56022913960400191505060405180910390fd5b3360008181526005602090815260408083206001600160a01b0387168085529252808320805460ff191660011790555190917fbb785bb78fa937a58ce1ce2c3a4bfdaf457b51bdedc3944e94c26d6777c7214a91a3506001919050565b60006001600160a01b0385166126205760405162461bcd60e51b8152600401808060200182810382526026815260200180614f916026913960400191505060405180910390fd5b836001600160a01b0316336001600160a01b03166000805160206152ef83398151915288338988886040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156126c15781810151838201526020016126a9565b50505050905090810190601f1680156126ee5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a361270e8633338888888861440e565b9695505050505050565b60105461010090046001600160a01b031690565b6000806003600061273c85613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561276357fe5b14806127815750600360068083015460ff169081111561277f57fe5b145b6127bc5760405162461bcd60e51b8152600401808060200182810382526044815260200180614cc46044913960600191505060405180910390fd5b6127c98160040154614694565b806127e0575060038101546001600160a01b031633145b806127f7575060028101546001600160a01b031633145b6128325760405162461bcd60e51b81526004018080602001828103825260428152602001806152046042913960600191505060405180910390fd5b61283b836140dc565b5080546006808301546040516001600160a01b03909316927f4e48b247593fd0b3174316619f9274ea86db0ed03e691c2f8c4e0400e923375e92879260ff16919081906020820190849081111561288e57fe5b60ff168152602001828103825284818151815260200191508051906020019080838360005b838110156128cb5781810151838201526020016128b3565b50505050905090810190601f1680156128f85780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250600192915050565b600f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116885780601f1061165d57610100808354040283529160200191611688565b60006116a761297d613a73565b846120168560405180606001604052806025815260200161549d60259139600160006129a7613a73565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6146a716565b6000816129ea336124ae565b1015612a3c576040805162461bcd60e51b815260206004820152601c60248201527b4e6f7420656e6f75676820617661696c61626c652062616c616e636560201b604482015290519081900360640190fd5b612a46838361473e565b9392505050565b6000612a4683836001614752565b600c546000906001600160a01b03163314612aa75760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b6000612ae886868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b602052604090209091506001600382015460ff166004811115612b0e57fe5b14612b4a5760405162461bcd60e51b8152600401808060200182810382526048815260200180614db86048913960600191505060405180910390fd5b60038101805460ff191660021790556001810154604080516001600160a01b0390921660208301819052608080845283018990527f1578cd46dfc61f5ed64ae02780d7de11d318753ba429fd6abcec24e5a56cddee928a928a929186918b918b91819081016060820160a083018a8a80828437600083820152601f01601f191690910185810384528854600260001961010060018416150201909116048082526020909101915088908015612c405780601f10612c1557610100808354040283529160200191612c40565b820191906000526020600020905b815481529060010190602001808311612c2357829003601f168201915b50508481038252858152602001868680828437600083820152604051601f909101601f19169092018290039b50909950505050505050505050a15060019695505050505050565b600080612cc984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b60008181526007602052604090209091506003600182015460ff166006811115612cef57fe5b14612d2b5760405162461bcd60e51b81526004018080602001828103825260398152602001806153ac6039913960400191505060405180910390fd5b6009546001600160a01b03163314612d745760405162461bcd60e51b815260040180806020018281038252603181526020018061505e6031913960400191505060405180910390fd5b600082815260036020526040902060028101546005820154612d9f916001600160a01b031690614983565b60018201805460ff19166004179055805460408051602080825281018890526001600160a01b03909216917fae582f187de7234ff4da256268de739cdf3e9c284298c66f0b5b5712da128da5918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a250600195945050505050565b600080612e6986868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020526040902090915060018082015460ff166006811115612e8e57fe5b14612eca5760405162461bcd60e51b815260040180806020018281038252603181526020018061526b6031913960400191505060405180910390fd5b6009546001600160a01b03163314612f135760405162461bcd60e51b81526004018080602001828103825260318152602001806154c26031913960400191505060405180910390fd5b60008281526003602090815260409182902060018401805460ff19166005179055805483518481529384018a905290926001600160a01b03909116917f84992793c2d54d037b0e705937a2a092a41c7e9018a78da2195ca589cd5860fc918b918b918b918b91908190810160608201878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a2506001979650505050505050565b60006130573387878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881523393508a925090899089908190840183828082843760009201919091525061430992505050565b50336001600160a01b0316336001600160a01b031660008051602061508f83398151915288888888886040518080602001858152602001806020018381038352888882818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f1916909201829003995090975050505050505050a350600195945050505050565b600c546000906001600160a01b031633146131465760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b600061318786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b602052604090209091506001600382015460ff1660048111156131ad57fe5b146131e95760405162461bcd60e51b8152600401808060200182810382526045815260200180614f276045913960600191505060405180910390fd5b6003818101805460ff1916909117905560018101546002820154604080516001600160a01b03909316602084018190526060840183905260a080855284018a90527f75a18f738a9a0c8b27f2fbf44c649f80dc607d0f394cf294aad2e0bb76f72b3c938b938b9387928c918c9190819081016080820160c083018b8b80828437600083820152601f01601f1916909101858103845289546002600019610100600184161502019091160480825260209091019150899080156132ec5780601f106132c1576101008083540402835291602001916132ec565b820191906000526020600020905b8154815290600101906020018083116132cf57829003601f168201915b50508481038252858152602001868680828437600083820152604051601f909101601f19169092018290039c50909a5050505050505050505050a15060019695505050505050565b6001600160a01b0380821660009081526005602090815260408083209386168352929052205460ff1692915050565b6001600160a01b031660009081526004602052604090205490565b60006001600160a01b0385166133c55760405162461bcd60e51b8152600401808060200182810382526026815260200180614f916026913960400191505060405180910390fd5b6001600160a01b03861661340a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614d926026913960400191505060405180910390fd5b6001600160a01b038616600090815260056020908152604080832033845290915290205460ff16613470576040805162461bcd60e51b815260206004820152601f60248201526000805160206153e5833981519152604482015290519081900360640190fd5b836001600160a01b0316336001600160a01b03166000805160206152ef83398151915289898988886040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156135115781810151838201526020016134f9565b50505050905090810190601f16801561353e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a36122c38733888888888861440e565b600c546000906001600160a01b031633146135aa5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b60006135eb84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b6020526040902090915060038082015460ff16600481111561361057fe5b1461364c5760405162461bcd60e51b81526004018080602001828103825260368152602001806154056036913960400191505060405180910390fd5b60038101805460ff1916600417905560018101546002820154604080516001600160a01b0390931660208401819052908301829052606080845283018790527f43af5daa4dba8ba628232d5a7a61ccf585df7a4d3298358cd2786456264c6d969288928892918060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a1506001949350505050565b6000612a4683836000614752565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600080606060008061376b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600760209081526040808320600383529281902060018082015460058301548287015487548651600261010096831615969096026000190190911694909404601f8101889004880285018801909652858452979850959692956001600160a01b03909116949093879360ff1692918491908301828280156138325780601f1061380757610100808354040283529160200191613832565b820191906000526020600020905b81548152906001019060200180831161381557829003601f168201915b50505050509150965096509650965050505092959194509250565b6000806003600061385d86613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561388457fe5b146138c05760405162461bcd60e51b815260040180806020018281038252602c815260200180614fb7602c913960400191505060405180910390fd5b6138cd8160040154614694565b156139095760405162461bcd60e51b815260040180806020018281038252602281526020018061530f6022913960400191505060405180910390fd5b60018101546001600160a01b031633148061392d575080546001600160a01b031633145b6139685760405162461bcd60e51b8152600401808060200182810382526037815260200180614fe36037913960400191505060405180910390fd5b60048101548361397e5760006004830155613994565b61398e428563ffffffff6141d316565b60048301555b81546004830154604080516020808201869052918101839052606080825289519082015288516001600160a01b03909416937fab224ddedc192922a9caa9c23294ca7c6c25bd489024c2d08e16b8aaffce2486938a9387939192829160808301919087019080838360005b83811015613a175781810151838201526020016139ff565b50505050905090810190601f168015613a445780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2506001949350505050565b600c546001600160a01b031681565b600d5490565b3390565b6001600160a01b038316613abc5760405162461bcd60e51b815260040180806020018281038252602481526020018061529c6024913960400191505060405180910390fd5b6001600160a01b038216613b015760405162461bcd60e51b8152600401808060200182810382526022815260200180614d706022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b031660009081526020819052604090205490565b600080613b8a84613dfb565b6000818152600b60205260409020909150613ba484614a6d565b15613be05760405162461bcd60e51b8152600401808060200182810382526021815260200180614ed66021913960400191505060405180910390fd5b600281015415613c215760405162461bcd60e51b8152600401808060200182810382526025815260200180614f6c6025913960400191505060405180910390fd5b6001810180546001600160a01b031916331790558351613c479082906020870190614bc6565b5060038101805460ff1916600117905534600282015560408051336020808301829052606080845289519084015288517fbd4815905cf0865b10d3cf5d5a792b1063072ca973863448e47b3e7b209a5629948a948a939092839283019160808401919088019080838360005b83811015613ccb578181015183820152602001613cb3565b50505050905090810190601f168015613cf85780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015613d2b578181015183820152602001613d13565b50505050905090810190601f168015613d585780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1506001949350505050565b6000613d80848484613e8d565b613df184613d8c613a73565b6120168560405180606001604052806028815260200161519b602891396001600160a01b038a16600090815260016020526040812090613dca613a73565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6146a716565b5060019392505050565b6000816040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015613e3e578181015183820152602001613e26565b50505050905090810190601f168015613e6b5780820380516001836020036101000a031916815260200191505b5092505050604051602081830303815290604052805190602001209050919050565b6001600160a01b038316613ed25760405162461bcd60e51b81526004018080602001828103825260258152602001806152466025913960400191505060405180910390fd5b6001600160a01b038216613f175760405162461bcd60e51b8152600401808060200182810382526023815260200180614c5f6023913960400191505060405180910390fd5b613f5a81604051806060016040528060268152602001614eb0602691396001600160a01b038616600090815260208190526040902054919063ffffffff6146a716565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613f8f908263ffffffff6141d316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716926000805160206151c383398151915292918290030190a3505050565b600060036000613fe685613dfb565b8152602081019190915260400160002060068101805491925060029160ff19166001830217905550600381015481546005830154604080516020808201849052918101879052606080825288519082015287516001600160a01b0395861695909416937f5c325a8e2c888924f4a27940863613323b3a56cfbbbf8ee144e180ab228e104c9389939092899290918291608083019187019080838360005b8381101561409b578181015183820152602001614083565b50505050905090810190601f1680156140c85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050565b600080600360006140ec85613dfb565b815260200190815260200160002090506141098160040154614694565b15614127576006818101805460ff19166001835b0217905550614162565b60038101546001600160a01b0316331415614152576006810180546004919060ff191660018361411d565b60068101805460ff191660051790555b600581015460018201546001600160a01b03166000908152600460205260409020546141939163ffffffff6143cc16565b60018201546001600160a01b031660009081526004602052604090205560058101546006546141c79163ffffffff6143cc16565b60065550600192915050565b600082820183811015612a46576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b6001600160a01b038216614286576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254614299908263ffffffff6141d316565b6002556001600160a01b0382166000908152602081905260409020546142c5908263ffffffff6141d316565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391926000805160206151c38339815191529281900390910190a35050565b6000806007600061431988613dfb565b8152602001908152602001600020905061433283614a6d565b15614384576040805162461bcd60e51b815260206004820152601e60248201527f496e737472756374696f6e73206d757374206e6f7420626520656d7074790000604482015290519081900360640190fd5b82516143969082906020860190614bc6565b506001818101805460ff19169091179055600a546009546122c39188918a9189916001600160a01b03918216911689600061440e565b6000612a4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506146a7565b6000806003600061441e8b613dfb565b8152602001908152602001600020905061443789614a6d565b15614489576040805162461bcd60e51b815260206004820152601e60248201527f4f7065726174696f6e204944206d757374206e6f7420626520656d7074790000604482015290519081900360640190fd5b836144c9576040805162461bcd60e51b815260206004820152601f6024820152600080516020615361833981519152604482015290519081900360640190fd5b600581015415614520576040805162461bcd60e51b815260206004820152601f60248201527f54686973206f7065726174696f6e496420616c72656164792065786973747300604482015290519081900360640190fd5b6001600160a01b0385166145655760405162461bcd60e51b81526004018080602001828103825260278152602001806154766027913960400191505060405180910390fd5b61456e876124ae565b8411156145ac5760405162461bcd60e51b8152600401808060200182810382526042815260200180614c826042913960600191505060405180910390fd5b80546001600160a01b03199081166001600160a01b038a81169190911783556001808401805484168b841617905560028401805484168a8416179055600384018054909316918816919091179091556005820185905560068201805460ff19169091179055821561462d57614627428463ffffffff6141d316565b60048201555b6001600160a01b038716600090815260046020526040902054614656908563ffffffff6141d316565b6001600160a01b038816600090815260046020526040902055600654614682908563ffffffff6141d316565b60065550600198975050505050505050565b6000811580159061171057505042101590565b600081848411156147365760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156146fb5781810151838201526020016146e3565b50505050905090810190601f1680156147285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006116a761474b613a73565b8484613e8d565b6000806003600061476287613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561478957fe5b14806147a75750600360068083015460ff16908111156147a557fe5b145b6147e25760405162461bcd60e51b8152600401808060200182810382526044815260200180614e006044913960600191505060405180910390fd5b83614822576040805162461bcd60e51b815260206004820152601f6024820152600080516020615361833981519152604482015290519081900360640190fd5b60038101546001600160a01b0316331461486d5760405162461bcd60e51b815260040180806020018281038252602b815260200180615381602b913960400191505060405180910390fd5b61487a8160040154614694565b156148cb576040805162461bcd60e51b815260206004820152601c60248201527b151a19481a1bdb19081a185cc8185b1c9958591e48195e1c1a5c995960221b604482015290519081900360640190fd5b806005015484111561490e5760405162461bcd60e51b81526004018080602001828103825260368152602001806150f76036913960400191505060405180910390fd5b8280156149215750600084826005015403115b1561493f576149308585614a72565b61493a8585614af8565b614957565b61494d858260050154614a72565b6149578585613fd7565b60018101546002820154614978916001600160a01b03908116911686613e8d565b506001949350505050565b6001600160a01b0382166149c85760405162461bcd60e51b81526004018080602001828103825260218152602001806151e36021913960400191505060405180910390fd5b614a0b81604051806060016040528060228152602001614d08602291396001600160a01b038516600090815260208190526040902054919063ffffffff6146a716565b6001600160a01b038316600090815260208190526040902055600254614a37908263ffffffff6143cc16565b6002556040805182815290516000916001600160a01b038516916000805160206151c38339815191529181900360200190a35050565b511590565b600060036000614a8185613dfb565b81526020808201929092526040908101600090812060018101546001600160a01b0316825260049093522054909150614ac0908363ffffffff6143cc16565b60018201546001600160a01b0316600090815260046020526040902055600654614af0908363ffffffff6143cc16565b600655505050565b600060036000614b0785613dfb565b8152602081019190915260400160002060068101805460ff191660031790556005810154909150614b3890836143cc565b6005820181905560038201548254604080516020808201869052918101879052606080825288519082015287516001600160a01b039485169594909316937f580d13b8c7eed8e88f52fc61856554268aa83422271759f5af5af20268411e4693899391928992909182916080830191908701908083836000831561409b578181015183820152602001614083565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614c0757805160ff1916838001178555614c34565b82800160010185558215614c34579182015b82811115614c34578251825591602001919060010190614c19565b50614c40929150614c44565b5090565b61169091905b80821115614c405760008155600101614c4a56fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206f662074686520686f6c642063616e27742062652067726561746572207468616e207468652062616c616e6365206f6620746865206f726967696e4120686f6c642063616e206f6e6c792062652072656c656173656420696e20737461747573204f726465726564206f72204578656375746564416e644b6570744f70656e45524332303a206275726e20616d6f756e7420657863656564732062616c616e636541207061796f75742063616e206f6e6c792062652063616e63656c6c656420627920746865206f726465726572206f72207468652077616c6c6574546f4265506169644f757445524332303a20617070726f766520746f20746865207a65726f206164647265737350617965722061646472657373206d757374206e6f74206265207a65726f20616464726573734163636f756e742052657175657374206d7573742068617665207374617475732052657175657374656420746f2062652073657420746f2073746174757320436f6e6669726d65644120686f6c642063616e206f6e6c7920626520657865637574656420696e20737461747573204f726465726564206f72204578656375746564416e644b6570744f70656e41207061796f75742063616e206f6e6c792062652073657420746f2046756e6473496e53757370656e73652066726f6d20737461747573204f72646572656446756e6374696f6e206e6f7420737570706f7274656420696e207468697320696d706c656d656e746174696f6e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365486564657261205075626c6963204b65792063616e6e6f7420626520656d70747941207061796f75742063616e206f6e6c792062652063616e63656c6c656420696e20737461747573204f7264657265644163636f756e742052657175657374206d7573742068617665207374617475732052657175657374656420746f2062652073657420746f20737461747573204661696c65644120726571756573742077697468207468697320696420616c72656164792065786973747350617965652061646472657373206d757374206e6f74206265207a65726f20616464726573734120686f6c642063616e206f6e6c792062652072656e6577656420696e20737461747573204f72646572656454686520686f6c642063616e206f6e6c792062652072656e657765642062792074686520697373756572206f722074686520706179657241207061796f75742063616e206f6e6c7920626520736574206261636b20746f204f7264657265642066726f6d207374617475732046756e6473496e53757370656e736541207061796f75742063616e206f6e6c7920626520657865637574656420627920746865207061796f7574206167656e74dede0d220fbab7cb612b269ed216c1532317ffc2614e8965592747ec49087b70546865206f70657261746f7220697320616c7265616479206e6f7420617574686f72697a6564546865206f70657261746f7220697320616c726561647920617574686f72697a65645468652076616c75652073686f756c6420626520657175616c206f72206c657373207468616e207468652068656c6420616d6f756e7477616c6c6574546f4265506169644f75742061646472657373206d757374206e6f74206265207a65726f206164647265737341207061796f75742063616e206f6e6c7920626520736574206261636b20746f204f72646572656420627920746865207061796f7574206167656e7445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737341206e6f74206578706972656420686f6c642063616e206f6e6c792062652072656c656173656420627920746865206e6f74617279206f722074686520706179656545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737341207061796f75742063616e206f6e6c792062652072656a65637465642066726f6d20737461747573204f72646572656445524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734f6e6c7920746865206163636f756e742063726561746f722063616e2063616c6c20746869732066756e6374696f6e8a1d1765ef42a1fb3d5b0e12ba4b1083e020407cb5ba8e07aaaacf610624aec9416e206578706972656420686f6c642063616e206e6f742062652072656e65776564496e636f72726563742066656520616d6f756e742c2063616c6c206765744163636f756e744372656174696f6e46656556616c7565206d7573742062652067726561746572207468616e207a65726f0054686520686f6c642063616e206f6e6c7920626520657865637574656420627920746865206e6f7461727941207061796f75742063616e206f6e6c792062652065786563757465642066726f6d207374617475732046756e6473496e53757370656e736554686973206f70657261746f72206973206e6f7420617574686f72697a6564004163636f756e742052657175657374206d757374206861766520737461747573204661696c656420746f20626520726566756e64656441207061796f75742063616e206f6e6c792062652073657420746f20696e2073757370656e736520627920746865207061796f7574206167656e744e6f746172792061646472657373206d757374206e6f74206265207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f41207061796f75742063616e206f6e6c792062652072656a656374656420627920746865207061796f7574206167656e74a265627a7a72315820b0301d4465a561932901711da016e59c1b9e6f1d27164d3e537971db839bedb464736f6c634300050f003253757370656e7365206163636f756e74206d757374206e6f7420626520746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000e824424ee4022cd6bc408249f924a6e3bda035c9000000000000000000000000000000000000000000000000000000000000000c577261707065642048626172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057748424152000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061022e5760003560e01c806306fdde0314610233578063095ea7b3146102bd5780630ab5555d1461030a5780630b986a50146103345780630cd6300614610379578063174d988a146103ac57806318160ddd146103dd57806319289287146103f257806323b872dd146104b057806324cc7076146104f3578063264b44d51461056e57806330dfa9d5146105e9578063313ce5671461061c57806336c8773f14610647578063395093511461067a57806340c10f19146106b3578063473dbde8146106ec5780634cb0267f146107015780634f6c0edf1461082f57806351bfb9611461090f578063604015811461092457806367bf10301461095f5780636ce4814d1461097457806370a08231146109ef57806373fb44c614610a225780637649c6d114610a9d5780637840499914610ad05780638da5cb5b14610b9e5780638e4a5a9214610bb357806395d89b4114610c64578063a457c2d714610c79578063a9059cbb14610cb2578063abb80b4214610ceb578063abd3bd1914610d9e578063b03a635f14610e69578063b1a1322c14610ee4578063b39832d414610faf578063b89b204e1461107e578063c2ac5b5c14611149578063c5a468c614611184578063c5b670f0146111b7578063d7faaf5c1461128e578063da7d3d0414611309578063da84e00014610a22578063dd62ed3e146113bc578063e83c4671146113f7578063ec38b2291461151f578063f124f7f4146115d2578063fa62edc1146115e7575b600080fd5b34801561023f57600080fd5b506102486115fc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028257818101518382015260200161026a565b50505050905090810190601f1680156102af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c957600080fd5b506102f6600480360360408110156102e057600080fd5b506001600160a01b038135169060200135611693565b604080519115158252519081900360200190f35b34801561031657600080fd5b506102f66004803603602081101561032d57600080fd5b50356116b0565b34801561034057600080fd5b506103676004803603602081101561035757600080fd5b50356001600160a01b0316611705565b60408051918252519081900360200190f35b34801561038557600080fd5b506102f66004803603602081101561039c57600080fd5b50356001600160a01b0316611716565b3480156103b857600080fd5b506103c16117d2565b604080516001600160a01b039092168252519081900360200190f35b3480156103e957600080fd5b506103676117e1565b6102f66004803603604081101561040857600080fd5b810190602081018135600160201b81111561042257600080fd5b82018360208201111561043457600080fd5b803590602001918460018302840111600160201b8311171561045557600080fd5b919390929091602081019035600160201b81111561047257600080fd5b82018360208201111561048457600080fd5b803590602001918460018302840111600160201b831117156104a557600080fd5b5090925090506117e7565b3480156104bc57600080fd5b506102f6600480360360608110156104d357600080fd5b506001600160a01b038135811691602081013590911690604001356118df565b3480156104ff57600080fd5b506102f66004803603602081101561051657600080fd5b810190602081018135600160201b81111561053057600080fd5b82018360208201111561054257600080fd5b803590602001918460018302840111600160201b8311171561056357600080fd5b509092509050611950565b34801561057a57600080fd5b506102f66004803603602081101561059157600080fd5b810190602081018135600160201b8111156105ab57600080fd5b8201836020820111156105bd57600080fd5b803590602001918460018302840111600160201b831117156105de57600080fd5b509092509050611c62565b3480156105f557600080fd5b506102f66004803603602081101561060c57600080fd5b50356001600160a01b0316611e38565b34801561062857600080fd5b50610631611ef8565b6040805160ff9092168252519081900360200190f35b34801561065357600080fd5b506102f66004803603602081101561066a57600080fd5b50356001600160a01b0316611f01565b34801561068657600080fd5b506102f66004803603604081101561069d57600080fd5b506001600160a01b038135169060200135611fc2565b3480156106bf57600080fd5b506102f6600480360360408110156106d657600080fd5b506001600160a01b03813516906020013561201b565b3480156106f857600080fd5b506103c161208b565b34801561070d57600080fd5b506107b26004803603602081101561072457600080fd5b810190602081018135600160201b81111561073e57600080fd5b82018360208201111561075057600080fd5b803590602001918460018302840111600160201b8311171561077157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061209a945050505050565b60405180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200182600681111561081657fe5b60ff168152602001965050505050505060405180910390f35b34801561083b57600080fd5b506102f66004803603608081101561085257600080fd5b810190602081018135600160201b81111561086c57600080fd5b82018360208201111561087e57600080fd5b803590602001918460018302840111600160201b8311171561089f57600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b8111156108d157600080fd5b8201836020820111156108e357600080fd5b803590602001918460018302840111600160201b8311171561090457600080fd5b509092509050612108565b34801561091b57600080fd5b506103676122ce565b34801561093057600080fd5b506102f66004803603604081101561094757600080fd5b506001600160a01b03813581169160200135166122d4565b34801561096b57600080fd5b506103c1612303565b34801561098057600080fd5b506102f66004803603602081101561099757600080fd5b810190602081018135600160201b8111156109b157600080fd5b8201836020820111156109c357600080fd5b803590602001918460018302840111600160201b831117156109e457600080fd5b509092509050612312565b3480156109fb57600080fd5b5061036760048036036020811015610a1257600080fd5b50356001600160a01b03166124ae565b348015610a2e57600080fd5b506102f660048036036020811015610a4557600080fd5b810190602081018135600160201b811115610a5f57600080fd5b820183602082011115610a7157600080fd5b803590602001918460018302840111600160201b83111715610a9257600080fd5b5090925090506124e0565b348015610aa957600080fd5b506102f660048036036020811015610ac057600080fd5b50356001600160a01b0316612519565b348015610adc57600080fd5b506102f6600480360360a0811015610af357600080fd5b810190602081018135600160201b811115610b0d57600080fd5b820183602082011115610b1f57600080fd5b803590602001918460018302840111600160201b83111715610b4057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401351692604081013592506060013590506125d9565b348015610baa57600080fd5b506103c1612718565b348015610bbf57600080fd5b506102f660048036036020811015610bd657600080fd5b810190602081018135600160201b811115610bf057600080fd5b820183602082011115610c0257600080fd5b803590602001918460018302840111600160201b83111715610c2357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061272c945050505050565b348015610c7057600080fd5b5061024861290f565b348015610c8557600080fd5b506102f660048036036040811015610c9c57600080fd5b506001600160a01b038135169060200135612970565b348015610cbe57600080fd5b506102f660048036036040811015610cd557600080fd5b506001600160a01b0381351690602001356129de565b348015610cf757600080fd5b506102f660048036036040811015610d0e57600080fd5b810190602081018135600160201b811115610d2857600080fd5b820183602082011115610d3a57600080fd5b803590602001918460018302840111600160201b83111715610d5b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250612a4d915050565b348015610daa57600080fd5b506102f660048036036040811015610dc157600080fd5b810190602081018135600160201b811115610ddb57600080fd5b820183602082011115610ded57600080fd5b803590602001918460018302840111600160201b83111715610e0e57600080fd5b919390929091602081019035600160201b811115610e2b57600080fd5b820183602082011115610e3d57600080fd5b803590602001918460018302840111600160201b83111715610e5e57600080fd5b509092509050612a5b565b348015610e7557600080fd5b506102f660048036036020811015610e8c57600080fd5b810190602081018135600160201b811115610ea657600080fd5b820183602082011115610eb857600080fd5b803590602001918460018302840111600160201b83111715610ed957600080fd5b509092509050612c87565b348015610ef057600080fd5b506102f660048036036040811015610f0757600080fd5b810190602081018135600160201b811115610f2157600080fd5b820183602082011115610f3357600080fd5b803590602001918460018302840111600160201b83111715610f5457600080fd5b919390929091602081019035600160201b811115610f7157600080fd5b820183602082011115610f8357600080fd5b803590602001918460018302840111600160201b83111715610fa457600080fd5b509092509050612e27565b348015610fbb57600080fd5b506102f660048036036060811015610fd257600080fd5b810190602081018135600160201b811115610fec57600080fd5b820183602082011115610ffe57600080fd5b803590602001918460018302840111600160201b8311171561101f57600080fd5b91939092823592604081019060200135600160201b81111561104057600080fd5b82018360208201111561105257600080fd5b803590602001918460018302840111600160201b8311171561107357600080fd5b509092509050612fdd565b34801561108a57600080fd5b506102f6600480360360408110156110a157600080fd5b810190602081018135600160201b8111156110bb57600080fd5b8201836020820111156110cd57600080fd5b803590602001918460018302840111600160201b831117156110ee57600080fd5b919390929091602081019035600160201b81111561110b57600080fd5b82018360208201111561111d57600080fd5b803590602001918460018302840111600160201b8311171561113e57600080fd5b5090925090506130fa565b34801561115557600080fd5b506102f66004803603604081101561116c57600080fd5b506001600160a01b0381358116916020013516613334565b34801561119057600080fd5b50610367600480360360208110156111a757600080fd5b50356001600160a01b0316613363565b3480156111c357600080fd5b506102f6600480360360c08110156111da57600080fd5b810190602081018135600160201b8111156111f457600080fd5b82018360208201111561120657600080fd5b803590602001918460018302840111600160201b8311171561122757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b03833581169450602084013581169360408101359091169250606081013591506080013561337e565b34801561129a57600080fd5b506102f6600480360360208110156112b157600080fd5b810190602081018135600160201b8111156112cb57600080fd5b8201836020820111156112dd57600080fd5b803590602001918460018302840111600160201b831117156112fe57600080fd5b50909250905061355e565b34801561131557600080fd5b506102f66004803603604081101561132c57600080fd5b810190602081018135600160201b81111561134657600080fd5b82018360208201111561135857600080fd5b803590602001918460018302840111600160201b8311171561137957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506136eb915050565b3480156113c857600080fd5b50610367600480360360408110156113df57600080fd5b506001600160a01b03813581169160200135166136f9565b34801561140357600080fd5b506114726004803603602081101561141a57600080fd5b810190602081018135600160201b81111561143457600080fd5b82018360208201111561144657600080fd5b803590602001918460018302840111600160201b8311171561146757600080fd5b509092509050613724565b60405180856001600160a01b03166001600160a01b03168152602001848152602001806020018360068111156114a457fe5b60ff168152602001828103825284818151815260200191508051906020019080838360005b838110156114e15781810151838201526020016114c9565b50505050905090810190601f16801561150e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561152b57600080fd5b506102f66004803603604081101561154257600080fd5b810190602081018135600160201b81111561155c57600080fd5b82018360208201111561156e57600080fd5b803590602001918460018302840111600160201b8311171561158f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061384d915050565b3480156115de57600080fd5b506103c1613a5e565b3480156115f357600080fd5b50610367613a6d565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116885780601f1061165d57610100808354040283529160200191611688565b820191906000526020600020905b81548152906001019060200180831161166b57829003601f168201915b505050505090505b90565b60006116a76116a0613a73565b8484613a77565b50600192915050565b600c546000906001600160a01b031633146116fc5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b50600d55600190565b600061171082613b63565b92915050565b3360009081526008602090815260408083206001600160a01b038516845290915281205460ff166117785760405162461bcd60e51b81526004018080602001828103825260268152602001806150af6026913960400191505060405180910390fd5b3360008181526008602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917f310d4cbf7ddcbf3169fb9371662fdfdfd6be42d3c1faed93bb0ec2f5173ce9b791a3506001919050565b600c546001600160a01b031690565b60025490565b6000600d5434146118295760405162461bcd60e51b81526004018080602001828103825260308152602001806153316030913960400191505060405180910390fd5b600c546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611862573d6000803e3d6000fd5b506118d685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092019190915250613b7e92505050565b95945050505050565b6000816118eb856124ae565b101561193d576040805162461bcd60e51b815260206004820152601c60248201527b4e6f7420656e6f75676820617661696c61626c652062616c616e636560201b604482015290519081900360640190fd5b611948848484613d73565b949350505050565b60008061199284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020526040902090915060018082015460ff1660068111156119b757fe5b146119f35760405162461bcd60e51b815260040180806020018281038252603f815260200180614e44603f913960400191505060405180910390fd5b6009546001600160a01b03163314611a3c5760405162461bcd60e51b815260040180806020018281038252603b81526020018061543b603b913960400191505060405180910390fd5b6000828152600360205260409020600181015460028201546005830154611a70926001600160a01b03908116921690613e8d565b611ab386868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506005830154613fd7565b611af286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140dc92505050565b5060018201805460ff19166003179055805460408051602080825281018890526001600160a01b03909216917f451f61007271790232845a513d5966bccacab4d17e29a9995c7ccbaa940e6fc5918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a27f085d7f4eb5ec120940eff725bef88dceeb82326ffedf842de5b4cc0b3697cd1b86868360050154856000016040518080602001848152602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528554600260001961010060018416150201909116048082526020909101915085908015611c445780601f10611c1957610100808354040283529160200191611c44565b820191906000526020600020905b815481529060010190602001808311611c2757829003601f168201915b5050965050505050505060405180910390a150600195945050505050565b600080611ca484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020908152604080832060039092529091209192509060018083015460ff166006811115611cd557fe5b14611d115760405162461bcd60e51b8152600401808060200182810382526030815260200180614ef76030913960400191505060405180910390fd5b80546001600160a01b0316331480611d35575060018101546001600160a01b031633145b611d705760405162461bcd60e51b8152600401808060200182810382526046815260200180614d2a6046913960600191505060405180910390fd5b611daf86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140dc92505050565b5060018201805460ff19166006179055805460408051602080825281018890526001600160a01b03909216917f6ef2e76d8eadaf1eadb34e35d630315078941cb5ae013c870d1268c0fb67ff92918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a250600195945050505050565b3360009081526008602090815260408083206001600160a01b038516845290915281205460ff1615611e9b5760405162461bcd60e51b81526004018080602001828103825260228152602001806150d56022913960400191505060405180910390fd5b3360008181526008602090815260408083206001600160a01b0387168085529252808320805460ff191660011790555190917ffe9272e2e39a0471797d14bdcbd79ab868dd481d19256b15a886c1213b983ddf91a3506001919050565b60105460ff1690565b3360009081526005602090815260408083206001600160a01b038516845290915281205460ff161515600114611f685760405162461bcd60e51b81526004018080602001828103825260268152602001806150af6026913960400191505060405180910390fd5b3360008181526005602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917f2e96d672cd86b559c08b9503df494f90c7766b7804ed5c650d0adde07cdf483f91a3506001919050565b60006116a7611fcf613a73565b846120168560016000611fe0613a73565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6141d316565b613a77565b60105460009061010090046001600160a01b0316612037613a73565b6001600160a01b031614612081576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6116a7838361422b565b600a546001600160a01b031681565b6000806000806000806000600360006120b28a613dfb565b81526020810191909152604001600020600181015460028201546003830154600584015460048501546006909501546001600160a01b039485169e9385169d50939091169a50985091965060ff16945092505050565b60006001600160a01b03851661214f5760405162461bcd60e51b815260040180806020018281038252603281526020018061512d6032913960400191505060405180910390fd5b6001600160a01b038516600090815260086020908152604080832033845290915290205460ff166121b5576040805162461bcd60e51b815260206004820152601f60248201526000805160206153e5833981519152604482015290519081900360640190fd5b846001600160a01b0316336001600160a01b031660008051602061508f83398151915289898888886040518080602001858152602001806020018381038352888882818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f1916909201829003995090975050505050505050a36122c33388888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528b93508a925090899089908190840183828082843760009201919091525061430992505050565b979650505050505050565b60065490565b6001600160a01b0380821660009081526008602090815260408083209386168352929052205460ff1692915050565b6009546001600160a01b031681565b60008061235484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b60008181526007602052604090209091506003600182015460ff16600681111561237a57fe5b146123b65760405162461bcd60e51b815260040180806020018281038252604481526020018061501a6044913960600191505060405180910390fd5b6009546001600160a01b031633146123ff5760405162461bcd60e51b815260040180806020018281038252603c81526020018061515f603c913960400191505060405180910390fd5b6000828152600360205260409020600281015460018201546005830154612433926001600160a01b03908116921690613e8d565b6001828101805460ff1916909117905560408051602080825281018790527f766abd3a64bee5c3f0dd407ddcbc2bbcbb99100d725a88cb1ac43b962d41ce80918891889181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a150600195945050505050565b6001600160a01b038116600090815260046020526040812054611710906124d484613b63565b9063ffffffff6143cc16565b600060405162461bcd60e51b815260040180806020018281038252602d815260200180614e83602d913960400191505060405180910390fd5b3360009081526005602090815260408083206001600160a01b038516845290915281205460ff161561257c5760405162461bcd60e51b81526004018080602001828103825260228152602001806150d56022913960400191505060405180910390fd5b3360008181526005602090815260408083206001600160a01b0387168085529252808320805460ff191660011790555190917fbb785bb78fa937a58ce1ce2c3a4bfdaf457b51bdedc3944e94c26d6777c7214a91a3506001919050565b60006001600160a01b0385166126205760405162461bcd60e51b8152600401808060200182810382526026815260200180614f916026913960400191505060405180910390fd5b836001600160a01b0316336001600160a01b03166000805160206152ef83398151915288338988886040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156126c15781810151838201526020016126a9565b50505050905090810190601f1680156126ee5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a361270e8633338888888861440e565b9695505050505050565b60105461010090046001600160a01b031690565b6000806003600061273c85613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561276357fe5b14806127815750600360068083015460ff169081111561277f57fe5b145b6127bc5760405162461bcd60e51b8152600401808060200182810382526044815260200180614cc46044913960600191505060405180910390fd5b6127c98160040154614694565b806127e0575060038101546001600160a01b031633145b806127f7575060028101546001600160a01b031633145b6128325760405162461bcd60e51b81526004018080602001828103825260428152602001806152046042913960600191505060405180910390fd5b61283b836140dc565b5080546006808301546040516001600160a01b03909316927f4e48b247593fd0b3174316619f9274ea86db0ed03e691c2f8c4e0400e923375e92879260ff16919081906020820190849081111561288e57fe5b60ff168152602001828103825284818151815260200191508051906020019080838360005b838110156128cb5781810151838201526020016128b3565b50505050905090810190601f1680156128f85780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250600192915050565b600f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116885780601f1061165d57610100808354040283529160200191611688565b60006116a761297d613a73565b846120168560405180606001604052806025815260200161549d60259139600160006129a7613a73565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6146a716565b6000816129ea336124ae565b1015612a3c576040805162461bcd60e51b815260206004820152601c60248201527b4e6f7420656e6f75676820617661696c61626c652062616c616e636560201b604482015290519081900360640190fd5b612a46838361473e565b9392505050565b6000612a4683836001614752565b600c546000906001600160a01b03163314612aa75760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b6000612ae886868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b602052604090209091506001600382015460ff166004811115612b0e57fe5b14612b4a5760405162461bcd60e51b8152600401808060200182810382526048815260200180614db86048913960600191505060405180910390fd5b60038101805460ff191660021790556001810154604080516001600160a01b0390921660208301819052608080845283018990527f1578cd46dfc61f5ed64ae02780d7de11d318753ba429fd6abcec24e5a56cddee928a928a929186918b918b91819081016060820160a083018a8a80828437600083820152601f01601f191690910185810384528854600260001961010060018416150201909116048082526020909101915088908015612c405780601f10612c1557610100808354040283529160200191612c40565b820191906000526020600020905b815481529060010190602001808311612c2357829003601f168201915b50508481038252858152602001868680828437600083820152604051601f909101601f19169092018290039b50909950505050505050505050a15060019695505050505050565b600080612cc984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b60008181526007602052604090209091506003600182015460ff166006811115612cef57fe5b14612d2b5760405162461bcd60e51b81526004018080602001828103825260398152602001806153ac6039913960400191505060405180910390fd5b6009546001600160a01b03163314612d745760405162461bcd60e51b815260040180806020018281038252603181526020018061505e6031913960400191505060405180910390fd5b600082815260036020526040902060028101546005820154612d9f916001600160a01b031690614983565b60018201805460ff19166004179055805460408051602080825281018890526001600160a01b03909216917fae582f187de7234ff4da256268de739cdf3e9c284298c66f0b5b5712da128da5918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a250600195945050505050565b600080612e6986868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020526040902090915060018082015460ff166006811115612e8e57fe5b14612eca5760405162461bcd60e51b815260040180806020018281038252603181526020018061526b6031913960400191505060405180910390fd5b6009546001600160a01b03163314612f135760405162461bcd60e51b81526004018080602001828103825260318152602001806154c26031913960400191505060405180910390fd5b60008281526003602090815260409182902060018401805460ff19166005179055805483518481529384018a905290926001600160a01b03909116917f84992793c2d54d037b0e705937a2a092a41c7e9018a78da2195ca589cd5860fc918b918b918b918b91908190810160608201878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a2506001979650505050505050565b60006130573387878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881523393508a925090899089908190840183828082843760009201919091525061430992505050565b50336001600160a01b0316336001600160a01b031660008051602061508f83398151915288888888886040518080602001858152602001806020018381038352888882818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f1916909201829003995090975050505050505050a350600195945050505050565b600c546000906001600160a01b031633146131465760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b600061318786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b602052604090209091506001600382015460ff1660048111156131ad57fe5b146131e95760405162461bcd60e51b8152600401808060200182810382526045815260200180614f276045913960600191505060405180910390fd5b6003818101805460ff1916909117905560018101546002820154604080516001600160a01b03909316602084018190526060840183905260a080855284018a90527f75a18f738a9a0c8b27f2fbf44c649f80dc607d0f394cf294aad2e0bb76f72b3c938b938b9387928c918c9190819081016080820160c083018b8b80828437600083820152601f01601f1916909101858103845289546002600019610100600184161502019091160480825260209091019150899080156132ec5780601f106132c1576101008083540402835291602001916132ec565b820191906000526020600020905b8154815290600101906020018083116132cf57829003601f168201915b50508481038252858152602001868680828437600083820152604051601f909101601f19169092018290039c50909a5050505050505050505050a15060019695505050505050565b6001600160a01b0380821660009081526005602090815260408083209386168352929052205460ff1692915050565b6001600160a01b031660009081526004602052604090205490565b60006001600160a01b0385166133c55760405162461bcd60e51b8152600401808060200182810382526026815260200180614f916026913960400191505060405180910390fd5b6001600160a01b03861661340a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614d926026913960400191505060405180910390fd5b6001600160a01b038616600090815260056020908152604080832033845290915290205460ff16613470576040805162461bcd60e51b815260206004820152601f60248201526000805160206153e5833981519152604482015290519081900360640190fd5b836001600160a01b0316336001600160a01b03166000805160206152ef83398151915289898988886040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156135115781810151838201526020016134f9565b50505050905090810190601f16801561353e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a36122c38733888888888861440e565b600c546000906001600160a01b031633146135aa5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b60006135eb84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b6020526040902090915060038082015460ff16600481111561361057fe5b1461364c5760405162461bcd60e51b81526004018080602001828103825260368152602001806154056036913960400191505060405180910390fd5b60038101805460ff1916600417905560018101546002820154604080516001600160a01b0390931660208401819052908301829052606080845283018790527f43af5daa4dba8ba628232d5a7a61ccf585df7a4d3298358cd2786456264c6d969288928892918060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a1506001949350505050565b6000612a4683836000614752565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600080606060008061376b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600760209081526040808320600383529281902060018082015460058301548287015487548651600261010096831615969096026000190190911694909404601f8101889004880285018801909652858452979850959692956001600160a01b03909116949093879360ff1692918491908301828280156138325780601f1061380757610100808354040283529160200191613832565b820191906000526020600020905b81548152906001019060200180831161381557829003601f168201915b50505050509150965096509650965050505092959194509250565b6000806003600061385d86613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561388457fe5b146138c05760405162461bcd60e51b815260040180806020018281038252602c815260200180614fb7602c913960400191505060405180910390fd5b6138cd8160040154614694565b156139095760405162461bcd60e51b815260040180806020018281038252602281526020018061530f6022913960400191505060405180910390fd5b60018101546001600160a01b031633148061392d575080546001600160a01b031633145b6139685760405162461bcd60e51b8152600401808060200182810382526037815260200180614fe36037913960400191505060405180910390fd5b60048101548361397e5760006004830155613994565b61398e428563ffffffff6141d316565b60048301555b81546004830154604080516020808201869052918101839052606080825289519082015288516001600160a01b03909416937fab224ddedc192922a9caa9c23294ca7c6c25bd489024c2d08e16b8aaffce2486938a9387939192829160808301919087019080838360005b83811015613a175781810151838201526020016139ff565b50505050905090810190601f168015613a445780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2506001949350505050565b600c546001600160a01b031681565b600d5490565b3390565b6001600160a01b038316613abc5760405162461bcd60e51b815260040180806020018281038252602481526020018061529c6024913960400191505060405180910390fd5b6001600160a01b038216613b015760405162461bcd60e51b8152600401808060200182810382526022815260200180614d706022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b031660009081526020819052604090205490565b600080613b8a84613dfb565b6000818152600b60205260409020909150613ba484614a6d565b15613be05760405162461bcd60e51b8152600401808060200182810382526021815260200180614ed66021913960400191505060405180910390fd5b600281015415613c215760405162461bcd60e51b8152600401808060200182810382526025815260200180614f6c6025913960400191505060405180910390fd5b6001810180546001600160a01b031916331790558351613c479082906020870190614bc6565b5060038101805460ff1916600117905534600282015560408051336020808301829052606080845289519084015288517fbd4815905cf0865b10d3cf5d5a792b1063072ca973863448e47b3e7b209a5629948a948a939092839283019160808401919088019080838360005b83811015613ccb578181015183820152602001613cb3565b50505050905090810190601f168015613cf85780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015613d2b578181015183820152602001613d13565b50505050905090810190601f168015613d585780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1506001949350505050565b6000613d80848484613e8d565b613df184613d8c613a73565b6120168560405180606001604052806028815260200161519b602891396001600160a01b038a16600090815260016020526040812090613dca613a73565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6146a716565b5060019392505050565b6000816040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015613e3e578181015183820152602001613e26565b50505050905090810190601f168015613e6b5780820380516001836020036101000a031916815260200191505b5092505050604051602081830303815290604052805190602001209050919050565b6001600160a01b038316613ed25760405162461bcd60e51b81526004018080602001828103825260258152602001806152466025913960400191505060405180910390fd5b6001600160a01b038216613f175760405162461bcd60e51b8152600401808060200182810382526023815260200180614c5f6023913960400191505060405180910390fd5b613f5a81604051806060016040528060268152602001614eb0602691396001600160a01b038616600090815260208190526040902054919063ffffffff6146a716565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613f8f908263ffffffff6141d316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716926000805160206151c383398151915292918290030190a3505050565b600060036000613fe685613dfb565b8152602081019190915260400160002060068101805491925060029160ff19166001830217905550600381015481546005830154604080516020808201849052918101879052606080825288519082015287516001600160a01b0395861695909416937f5c325a8e2c888924f4a27940863613323b3a56cfbbbf8ee144e180ab228e104c9389939092899290918291608083019187019080838360005b8381101561409b578181015183820152602001614083565b50505050905090810190601f1680156140c85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050565b600080600360006140ec85613dfb565b815260200190815260200160002090506141098160040154614694565b15614127576006818101805460ff19166001835b0217905550614162565b60038101546001600160a01b0316331415614152576006810180546004919060ff191660018361411d565b60068101805460ff191660051790555b600581015460018201546001600160a01b03166000908152600460205260409020546141939163ffffffff6143cc16565b60018201546001600160a01b031660009081526004602052604090205560058101546006546141c79163ffffffff6143cc16565b60065550600192915050565b600082820183811015612a46576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b6001600160a01b038216614286576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254614299908263ffffffff6141d316565b6002556001600160a01b0382166000908152602081905260409020546142c5908263ffffffff6141d316565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391926000805160206151c38339815191529281900390910190a35050565b6000806007600061431988613dfb565b8152602001908152602001600020905061433283614a6d565b15614384576040805162461bcd60e51b815260206004820152601e60248201527f496e737472756374696f6e73206d757374206e6f7420626520656d7074790000604482015290519081900360640190fd5b82516143969082906020860190614bc6565b506001818101805460ff19169091179055600a546009546122c39188918a9189916001600160a01b03918216911689600061440e565b6000612a4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506146a7565b6000806003600061441e8b613dfb565b8152602001908152602001600020905061443789614a6d565b15614489576040805162461bcd60e51b815260206004820152601e60248201527f4f7065726174696f6e204944206d757374206e6f7420626520656d7074790000604482015290519081900360640190fd5b836144c9576040805162461bcd60e51b815260206004820152601f6024820152600080516020615361833981519152604482015290519081900360640190fd5b600581015415614520576040805162461bcd60e51b815260206004820152601f60248201527f54686973206f7065726174696f6e496420616c72656164792065786973747300604482015290519081900360640190fd5b6001600160a01b0385166145655760405162461bcd60e51b81526004018080602001828103825260278152602001806154766027913960400191505060405180910390fd5b61456e876124ae565b8411156145ac5760405162461bcd60e51b8152600401808060200182810382526042815260200180614c826042913960600191505060405180910390fd5b80546001600160a01b03199081166001600160a01b038a81169190911783556001808401805484168b841617905560028401805484168a8416179055600384018054909316918816919091179091556005820185905560068201805460ff19169091179055821561462d57614627428463ffffffff6141d316565b60048201555b6001600160a01b038716600090815260046020526040902054614656908563ffffffff6141d316565b6001600160a01b038816600090815260046020526040902055600654614682908563ffffffff6141d316565b60065550600198975050505050505050565b6000811580159061171057505042101590565b600081848411156147365760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156146fb5781810151838201526020016146e3565b50505050905090810190601f1680156147285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006116a761474b613a73565b8484613e8d565b6000806003600061476287613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561478957fe5b14806147a75750600360068083015460ff16908111156147a557fe5b145b6147e25760405162461bcd60e51b8152600401808060200182810382526044815260200180614e006044913960600191505060405180910390fd5b83614822576040805162461bcd60e51b815260206004820152601f6024820152600080516020615361833981519152604482015290519081900360640190fd5b60038101546001600160a01b0316331461486d5760405162461bcd60e51b815260040180806020018281038252602b815260200180615381602b913960400191505060405180910390fd5b61487a8160040154614694565b156148cb576040805162461bcd60e51b815260206004820152601c60248201527b151a19481a1bdb19081a185cc8185b1c9958591e48195e1c1a5c995960221b604482015290519081900360640190fd5b806005015484111561490e5760405162461bcd60e51b81526004018080602001828103825260368152602001806150f76036913960400191505060405180910390fd5b8280156149215750600084826005015403115b1561493f576149308585614a72565b61493a8585614af8565b614957565b61494d858260050154614a72565b6149578585613fd7565b60018101546002820154614978916001600160a01b03908116911686613e8d565b506001949350505050565b6001600160a01b0382166149c85760405162461bcd60e51b81526004018080602001828103825260218152602001806151e36021913960400191505060405180910390fd5b614a0b81604051806060016040528060228152602001614d08602291396001600160a01b038516600090815260208190526040902054919063ffffffff6146a716565b6001600160a01b038316600090815260208190526040902055600254614a37908263ffffffff6143cc16565b6002556040805182815290516000916001600160a01b038516916000805160206151c38339815191529181900360200190a35050565b511590565b600060036000614a8185613dfb565b81526020808201929092526040908101600090812060018101546001600160a01b0316825260049093522054909150614ac0908363ffffffff6143cc16565b60018201546001600160a01b0316600090815260046020526040902055600654614af0908363ffffffff6143cc16565b600655505050565b600060036000614b0785613dfb565b8152602081019190915260400160002060068101805460ff191660031790556005810154909150614b3890836143cc565b6005820181905560038201548254604080516020808201869052918101879052606080825288519082015287516001600160a01b039485169594909316937f580d13b8c7eed8e88f52fc61856554268aa83422271759f5af5af20268411e4693899391928992909182916080830191908701908083836000831561409b578181015183820152602001614083565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614c0757805160ff1916838001178555614c34565b82800160010185558215614c34579182015b82811115614c34578251825591602001919060010190614c19565b50614c40929150614c44565b5090565b61169091905b80821115614c405760008155600101614c4a56fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206f662074686520686f6c642063616e27742062652067726561746572207468616e207468652062616c616e6365206f6620746865206f726967696e4120686f6c642063616e206f6e6c792062652072656c656173656420696e20737461747573204f726465726564206f72204578656375746564416e644b6570744f70656e45524332303a206275726e20616d6f756e7420657863656564732062616c616e636541207061796f75742063616e206f6e6c792062652063616e63656c6c656420627920746865206f726465726572206f72207468652077616c6c6574546f4265506169644f757445524332303a20617070726f766520746f20746865207a65726f206164647265737350617965722061646472657373206d757374206e6f74206265207a65726f20616464726573734163636f756e742052657175657374206d7573742068617665207374617475732052657175657374656420746f2062652073657420746f2073746174757320436f6e6669726d65644120686f6c642063616e206f6e6c7920626520657865637574656420696e20737461747573204f726465726564206f72204578656375746564416e644b6570744f70656e41207061796f75742063616e206f6e6c792062652073657420746f2046756e6473496e53757370656e73652066726f6d20737461747573204f72646572656446756e6374696f6e206e6f7420737570706f7274656420696e207468697320696d706c656d656e746174696f6e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365486564657261205075626c6963204b65792063616e6e6f7420626520656d70747941207061796f75742063616e206f6e6c792062652063616e63656c6c656420696e20737461747573204f7264657265644163636f756e742052657175657374206d7573742068617665207374617475732052657175657374656420746f2062652073657420746f20737461747573204661696c65644120726571756573742077697468207468697320696420616c72656164792065786973747350617965652061646472657373206d757374206e6f74206265207a65726f20616464726573734120686f6c642063616e206f6e6c792062652072656e6577656420696e20737461747573204f72646572656454686520686f6c642063616e206f6e6c792062652072656e657765642062792074686520697373756572206f722074686520706179657241207061796f75742063616e206f6e6c7920626520736574206261636b20746f204f7264657265642066726f6d207374617475732046756e6473496e53757370656e736541207061796f75742063616e206f6e6c7920626520657865637574656420627920746865207061796f7574206167656e74dede0d220fbab7cb612b269ed216c1532317ffc2614e8965592747ec49087b70546865206f70657261746f7220697320616c7265616479206e6f7420617574686f72697a6564546865206f70657261746f7220697320616c726561647920617574686f72697a65645468652076616c75652073686f756c6420626520657175616c206f72206c657373207468616e207468652068656c6420616d6f756e7477616c6c6574546f4265506169644f75742061646472657373206d757374206e6f74206265207a65726f206164647265737341207061796f75742063616e206f6e6c7920626520736574206261636b20746f204f72646572656420627920746865207061796f7574206167656e7445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737341206e6f74206578706972656420686f6c642063616e206f6e6c792062652072656c656173656420627920746865206e6f74617279206f722074686520706179656545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737341207061796f75742063616e206f6e6c792062652072656a65637465642066726f6d20737461747573204f72646572656445524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734f6e6c7920746865206163636f756e742063726561746f722063616e2063616c6c20746869732066756e6374696f6e8a1d1765ef42a1fb3d5b0e12ba4b1083e020407cb5ba8e07aaaacf610624aec9416e206578706972656420686f6c642063616e206e6f742062652072656e65776564496e636f72726563742066656520616d6f756e742c2063616c6c206765744163636f756e744372656174696f6e46656556616c7565206d7573742062652067726561746572207468616e207a65726f0054686520686f6c642063616e206f6e6c7920626520657865637574656420627920746865206e6f7461727941207061796f75742063616e206f6e6c792062652065786563757465642066726f6d207374617475732046756e6473496e53757370656e736554686973206f70657261746f72206973206e6f7420617574686f72697a6564004163636f756e742052657175657374206d757374206861766520737461747573204661696c656420746f20626520726566756e64656441207061796f75742063616e206f6e6c792062652073657420746f20696e2073757370656e736520627920746865207061796f7574206167656e744e6f746172792061646472657373206d757374206e6f74206265207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f41207061796f75742063616e206f6e6c792062652072656a656374656420627920746865207061796f7574206167656e74a265627a7a72315820b0301d4465a561932901711da016e59c1b9e6f1d27164d3e537971db839bedb464736f6c634300050f0032

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000e824424ee4022cd6bc408249f924a6e3bda035c9000000000000000000000000000000000000000000000000000000000000000c577261707065642048626172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057748424152000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : __name (string): Wrapped Hbar
Arg [1] : __symbol (string): wHBAR
Arg [2] : __decimals (uint8): 8
Arg [3] : __customOwner (address): 0xE824424eE4022Cd6bC408249F924A6e3BDA035c9

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [3] : 000000000000000000000000e824424ee4022cd6bc408249f924a6e3bda035c9
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [5] : 5772617070656420486261720000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 7748424152000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

49794:1191:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50432:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50432:83:0;;;:::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;50432:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20827:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20827:152:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20827:152:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1324:264;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1324:264:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1324:264:0;;:::i;35609:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35609:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35609:119:0;-1:-1:-1;;;;;35609:119:0;;:::i;:::-;;;;;;;;;;;;;;;;48702:318;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48702:318:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48702:318:0;-1:-1:-1;;;;;48702:318:0;;:::i;1115:99::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1115:99:0;;;:::i;:::-;;;;-1:-1:-1;;;;;1115:99:0;;;;;;;;;;;;;;19848:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19848:91:0;;;:::i;2400:518::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2400:518:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;2400:518:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2400:518: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;2400:518:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;2400:518:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2400:518: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;2400:518:0;;-1:-1:-1;2400:518:0;-1:-1:-1;2400:518:0;:::i;37068:230::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37068:230:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;37068:230:0;;;;;;;;;;;;;;;;;:::i;44038:1116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44038:1116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44038:1116:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;44038:1116:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;44038:1116: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;44038:1116:0;;-1:-1:-1;44038:1116:0;-1:-1:-1;44038:1116:0;:::i;42764:851::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42764:851:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42764:851:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;42764:851:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42764:851: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;42764:851:0;;-1:-1:-1;42764:851:0;-1:-1:-1;42764:851:0;:::i;48366:328::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48366:328:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48366:328:0;-1:-1:-1;;;;;48366:328:0;;:::i;50618:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50618:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36310:309;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36310:309:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36310:309:0;-1:-1:-1;;;;;36310:309:0;;:::i;22164:210::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22164:210:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22164:210:0;;;;;;;;:::i;50796:186::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50796:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;50796:186:0;;;;;;;;:::i;41231:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41231:30:0;;;:::i;34926:551::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34926:551:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34926:551:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;34926:551:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34926:551: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;34926:551:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34926:551:0;;-1:-1:-1;34926:551:0;;-1:-1:-1;;;;;34926:551:0:i;:::-;;;;;-1:-1:-1;;;;;34926:551:0;-1:-1:-1;;;;;34926:551:0;;;;;;-1:-1:-1;;;;;34926:551:0;-1:-1:-1;;;;;34926:551:0;;;;;;-1:-1:-1;;;;;34926:551:0;-1:-1:-1;;;;;34926:551:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41999:757;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41999:757:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;41999:757:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41999:757:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41999:757: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;41999:757:0;;;;-1:-1:-1;;;;;41999:757:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41999:757:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41999:757: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;41999:757:0;;-1:-1:-1;41999:757:0;-1:-1:-1;41999:757:0;:::i;35736:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35736:102:0;;;:::i;48211:147::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48211:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;48211:147:0;;;;;;;;;;:::i;41198:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41198:26:0;;;:::i;45226:828::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45226:828:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45226:828:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;45226:828:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45226:828: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;45226:828:0;;-1:-1:-1;45226:828:0;-1:-1:-1;45226:828:0;:::i;36705:142::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36705:142:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36705:142:0;-1:-1:-1;;;;;36705:142:0;;:::i;43781:163::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43781:163:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43781:163:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;43781:163:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;43781:163: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;43781:163:0;;-1:-1:-1;43781:163:0;-1:-1:-1;43781:163:0;:::i;35991:311::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35991:311:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35991:311:0;-1:-1:-1;;;;;35991:311:0;;:::i;29931:681::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29931:681:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;29931:681:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;29931:681:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29931:681: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;29931:681:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29931:681:0;;-1:-1:-1;;;;;;;29931:681:0;;;;;-1:-1:-1;29931:681:0;;;;;;;;;;;-1:-1:-1;29931:681:0;;;;-1:-1:-1;29931:681:0;:::i;50709:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50709:79:0;;;:::i;31486:772::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31486:772:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31486:772:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31486:772:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31486:772: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;31486:772:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31486:772:0;;-1:-1:-1;31486:772:0;;-1:-1:-1;;;;;31486:772:0:i;50523:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50523:87:0;;;:::i;22877:261::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22877:261:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22877:261:0;;;;;;;;:::i;36855:205::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36855:205:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;36855:205:0;;;;;;;;:::i;32425:160::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32425:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32425:160:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;32425:160:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;32425:160: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;32425:160:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;32425:160:0;;-1:-1:-1;;32425:160:0;;;-1:-1:-1;32425:160:0;;-1:-1:-1;;32425:160:0:i;3303:859::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3303:859:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3303:859:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;3303:859:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3303:859: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;3303:859:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;3303:859:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3303:859: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;3303:859:0;;-1:-1:-1;3303:859:0;-1:-1:-1;3303:859:0;:::i;46062:773::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46062:773:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46062:773:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;46062:773:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46062:773: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;46062:773:0;;-1:-1:-1;46062:773:0;-1:-1:-1;46062:773:0;:::i;46843:742::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46843:742:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46843:742:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;46843:742:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46843:742: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;46843:742:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;46843:742:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46843:742: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;46843:742:0;;-1:-1:-1;46843:742:0;-1:-1:-1;46843:742:0;:::i;41518:473::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41518:473:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41518:473:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41518:473:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41518:473: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;41518:473:0;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41518:473:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41518:473: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;41518:473:0;;-1:-1:-1;41518:473:0;-1:-1:-1;41518:473:0;:::i;4463:856::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4463:856:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4463:856:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4463:856:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4463:856: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;4463:856:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4463:856:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4463:856: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;4463:856:0;;-1:-1:-1;4463:856:0;-1:-1:-1;4463:856:0;:::i;35846:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35846:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;35846:137:0;;;;;;;;;;:::i;35485:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35485:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35485:116:0;-1:-1:-1;;;;;35485:116:0;;:::i;30620:858::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30620:858:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;30620:858:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;30620:858:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30620:858: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;30620:858:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30620:858:0;;-1:-1:-1;;;;;;;30620:858:0;;;;;-1:-1:-1;30620:858:0;;;;;;;;;;;;;;;-1:-1:-1;30620:858:0;;;;;-1:-1:-1;30620:858:0;;;;:::i;5604:682::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5604:682:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5604:682:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5604:682:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5604:682: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;5604:682:0;;-1:-1:-1;5604:682:0;-1:-1:-1;5604:682:0;:::i;32266:151::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32266:151:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32266:151:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;32266:151:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;32266:151: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;32266:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;32266:151:0;;-1:-1:-1;;32266:151:0;;;-1:-1:-1;32266:151:0;;-1:-1:-1;;32266:151:0:i;20546:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20546:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20546:134:0;;;;;;;;;;:::i;47593:610::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47593:610:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;47593:610:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;47593:610:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;47593:610: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;47593:610:0;;-1:-1:-1;47593:610:0;-1:-1:-1;47593:610:0;:::i;:::-;;;;;-1:-1:-1;;;;;47593:610:0;-1:-1:-1;;;;;47593:610: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;47593:610:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33848:1070;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33848:1070:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33848:1070:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;33848:1070:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33848:1070: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;33848:1070:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33848:1070:0;;-1:-1:-1;;33848:1070:0;;;-1:-1:-1;33848:1070:0;;-1:-1:-1;;33848:1070:0:i;875:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;875:29:0;;;:::i;1222:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1222:94:0;;;:::i;50432:83::-;50502:5;50495:12;;;;;;;;-1:-1:-1;;50495:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50469:13;;50495:12;;50502:5;;50495:12;;50502:5;50495:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50432:83;;:::o;20827:152::-;20893:4;20910:39;20919:12;:10;:12::i;:::-;20933:7;20942:6;20910:8;:39::i;:::-;-1:-1:-1;20967:4:0;20827:152;;;;:::o;1324:264::-;1444:14;;1391:4;;-1:-1:-1;;;;;1444:14:0;1430:10;:28;1408:125;;;;-1:-1:-1;;;1408:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1544:3:0;:14;1576:4;;1324:264::o;35609:119::-;35669:7;35696:24;35712:7;35696:15;:24::i;:::-;35689:31;35609:119;-1:-1:-1;;35609:119:0:o;48702:318::-;48809:10;48768:4;48793:27;;;:15;:27;;;;;;;;-1:-1:-1;;;;;48793:37:0;;;;;;;;;;;;48785:88;;;;-1:-1:-1;;;48785:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48902:10;48926:5;48886:27;;;:15;:27;;;;;;;;-1:-1:-1;;;;;48886:37:0;;;;;;;;;;:45;;-1:-1:-1;;48886:45:0;;;48947:43;48886:37;;48947:43;;;-1:-1:-1;49008:4:0;48702:318;;;:::o;1115:99::-;1192:14;;-1:-1:-1;;;;;1192:14:0;1115:99;:::o;19848:91::-;19919:12;;19848:91;:::o;2400:518::-;2537:4;2589:3;;2576:9;:16;2554:115;;;;-1:-1:-1;;;2554:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2773:14;;2757:52;;-1:-1:-1;;;;;2773:14:0;;;;2799:9;2757:52;;;;;2773:14;2757:52;2773:14;2757:52;2799:9;2773:14;2757:52;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2757:52:0;2829:81;2858:11;;2829:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;2829:81:0;;;;137:4:-1;2829:81:0;;;;;;;;;;;;;;;;;;-1:-1:-1;2884:15:0;;-1:-1:-1;2884:15:0;;;;2829:81;;2884:15;;;;2829:81;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;2829:14:0;;-1:-1:-1;;;2829:81:0:i;:::-;2822:88;2400:518;-1:-1:-1;;;;;2400:518:0:o;37068:230::-;37150:4;37195:6;37175:16;37185:5;37175:9;:16::i;:::-;:26;;37167:67;;;;;-1:-1:-1;;;37167:67:0;;;;;;;;;;;;-1:-1:-1;;;37167:67:0;;;;;;;;;;;;;;;37252:38;37271:5;37278:3;37283:6;37252:18;:38::i;:::-;37245:45;37068:230;-1:-1:-1;;;;37068:230:0:o;44038:1116::-;44126:4;44143:23;44169:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;44169:18:0;;-1:-1:-1;;;44169:20:0:i;:::-;44202:38;44243:31;;;:14;:31;;;;;44143:46;;-1:-1:-1;44322:24:0;44295:23;;;;;;:51;;;;;;;;;44287:127;;;;-1:-1:-1;;;44287:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44447:11;;-1:-1:-1;;;;;44447:11:0;44433:10;:25;44425:97;;;;-1:-1:-1;;;44425:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44535:27;44565:22;;;:5;:22;;;;;44616:21;;;;44639;;;;44662:20;;;;44600:83;;-1:-1:-1;;;;;44616:21:0;;;;44639;;44600:15;:83::i;:::-;44694:59;44719:11;;44694:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;;;44732:20:0;;;;44694:24;:59::i;:::-;44766:25;44779:11;;44766:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;44766:12:0;;-1:-1:-1;;;44766:25:0:i;:::-;-1:-1:-1;44802:23:0;;;:58;;-1:-1:-1;;44802:58:0;44828:32;44802:58;;;44914:21;;44878:94;;;;;;;;;;;;-1:-1:-1;;;;;44914:21:0;;;;44878:94;;44950:11;;44878:94;;;;;;44950:11;44878:94;;44950:11;44878:94;1:33:-1;99:1;81:16;;;74:27;44878:94:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;44878:94:0;;;;-1:-1:-1;44878:94:0;;-1:-1:-1;;;;44878:94:0;44990:132;45021:11;;45047:14;:20;;;45082:16;:29;;44990:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;44990:132:0;;;;;;;;-1:-1:-1;;44990:132:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;44990:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45142:4:0;;44038:1116;-1:-1:-1;;;;;44038:1116:0:o;42764:851::-;42833:4;42850:23;42876:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42876:18:0;;-1:-1:-1;;;42876:20:0:i;:::-;42909:38;42950:31;;;:14;:31;;;;;;;;43022:5;:22;;;;;;42850:46;;-1:-1:-1;42950:31:0;43092:24;43065:23;;;;;;:51;;;;;;;;;43057:112;;;;-1:-1:-1;;;43057:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43216:21;;-1:-1:-1;;;;;43216:21:0;43202:10;:35;;:74;;-1:-1:-1;43255:21:0;;;;-1:-1:-1;;;;;43255:21:0;43241:10;:35;43202:74;43180:194;;;;-1:-1:-1;;;43180:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43387:25;43400:11;;43387:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;43387:12:0;;-1:-1:-1;;;43387:25:0:i;:::-;-1:-1:-1;43425:23:0;;;:52;;-1:-1:-1;;43425:52:0;43451:26;43425:52;;;43525:21;;43495:88;;;;;;;;;;;;-1:-1:-1;;;;;43525:21:0;;;;43495:88;;43561:11;;43495:88;;;;;;43561:11;43495:88;;43561:11;43495:88;1:33:-1;99:1;81:16;;;74:27;43495:88:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;43495:88:0;;;;-1:-1:-1;43495:88:0;;-1:-1:-1;;;;43495:88:0;-1:-1:-1;43603:4:0;;42764:851;-1:-1:-1;;;;;42764:851:0:o;48366:328::-;48476:10;48435:4;48460:27;;;:15;:27;;;;;;;;-1:-1:-1;;;;;48460:37:0;;;;;;;;;;;;:46;48452:93;;;;-1:-1:-1;;;48452:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48574:10;48558:27;;;;:15;:27;;;;;;;;-1:-1:-1;;;;;48558:37:0;;;;;;;;;;:44;;-1:-1:-1;;48558:44:0;48598:4;48558:44;;;48618:46;48558:37;;48618:46;;;-1:-1:-1;48682:4:0;48366:328;;;:::o;50618:83::-;50684:9;;;;50618:83;:::o;36310:309::-;36408:10;36372:4;36398:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;36398:31:0;;;;;;;;;;;;:39;;:31;:39;36389:91;;;;-1:-1:-1;;;36389:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36503:10;36527:5;36493:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;36493:31:0;;;;;;;;;;:39;;-1:-1:-1;;36493:39:0;;;36548:41;36493:31;;36548:41;;;-1:-1:-1;36607:4:0;36310:309;;;:::o;22164:210::-;22244:4;22261:83;22270:12;:10;:12::i;:::-;22284:7;22293:50;22332:10;22293:11;:25;22305:12;:10;:12::i;:::-;-1:-1:-1;;;;;22293:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;22293:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;:::-;22261:8;:83::i;50796:186::-;50895:6;;50854:4;;50895:6;;;-1:-1:-1;;;;;50895:6:0;50879:12;:10;:12::i;:::-;-1:-1:-1;;;;;50879:22:0;;50871:47;;;;;-1:-1:-1;;;50871:47:0;;;;;;;;;;;;-1:-1:-1;;;50871:47:0;;;;;;;;;;;;;;;50929:23;50941:2;50945:6;50929:11;:23::i;41231:30::-;;;-1:-1:-1;;;;;41231:30:0;;:::o;34926:551::-;35010:12;35033:10;35054:14;35079:13;35103:18;35132:21;35171:26;35200:5;:27;35206:20;:11;:18;:20::i;:::-;35200:27;;;;;;;;;;;-1:-1:-1;35200:27:0;35260:20;;;;35295;;;;35330;;;;35365:19;;;;35399:24;;;;35438:20;;;;;-1:-1:-1;;;;;35260:20:0;;;;35295;;;;-1:-1:-1;35330:20:0;;;;;-1:-1:-1;35365:19:0;-1:-1:-1;35399:24:0;;-1:-1:-1;35438:20:0;;;-1:-1:-1;34926:551:0;-1:-1:-1;;;34926:551:0:o;41999:757::-;42186:4;-1:-1:-1;;;;;42216:31:0;;42208:94;;;;-1:-1:-1;;;42208:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42321:34:0;;;;;;:15;:34;;;;;;;;42356:10;42321:46;;;;;;;;;;42313:90;;;;;-1:-1:-1;;;42313:90:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;42313:90:0;;;;;;;;;;;;;;;42500:17;-1:-1:-1;;;;;42421:154:0;42449:10;-1:-1:-1;;;;;42421:154:0;-1:-1:-1;;;;;;;;;;;42474:11:0;;42532:5;42552:12;;42421:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;42421:154:0;;;;;;;;;;;-1:-1:-1;42421:154:0;;;;;1:33:-1;99:1;81:16;;;74:27;42421:154:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;42421:154:0;;;;-1:-1:-1;42421:154:0;;-1:-1:-1;;;;;;;;42421:154:0;42595:153;42622:10;42647:11;;42595:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;42595:153:0;;;;137:4:-1;42595:153:0;;;;;;;;;;;;;;;;;42673:17;;-1:-1:-1;42705:5:0;;-1:-1:-1;42595:153:0;42725:12;;;;;;42595:153;;42725:12;;;;42595:153;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;42595:12:0;;-1:-1:-1;;;42595:153:0:i;:::-;42588:160;41999:757;-1:-1:-1;;;;;;;41999:757:0:o;35736:102::-;35813:17;;35736:102;:::o;48211:147::-;-1:-1:-1;;;;;48319:21:0;;;48295:4;48319:21;;;:15;:21;;;;;;;;:31;;;;;;;;;;;;48211:147;;;;:::o;41198:26::-;;;-1:-1:-1;;;;;41198:26:0;;:::o;45226:828::-;45314:4;45331:23;45357:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;45357:18:0;;-1:-1:-1;;;45357:20:0:i;:::-;45390:38;45431:31;;;:14;:31;;;;;45331:46;;-1:-1:-1;45510:32:0;45483:23;;;;;;:59;;;;;;;;;45475:140;;;;-1:-1:-1;;;45475:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45648:11;;-1:-1:-1;;;;;45648:11:0;45634:10;:25;45626:98;;;;-1:-1:-1;;;45626:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45737:27;45767:22;;;:5;:22;;;;;45818:21;;;;;45841;;;45864:20;;;;45802:83;;-1:-1:-1;;;;;45818:21:0;;;;45841;;45802:15;:83::i;:::-;45924:24;45898:23;;;:50;;-1:-1:-1;;45898:50:0;;;;;;45966:56;;;;;;;;;;;;;;46000:11;;;;45966:56;;;;46000:11;;;;45966:56;1:33:-1;99:1;81:16;;;74:27;45966:56:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;45966:56:0;;;;-1:-1:-1;45966:56:0;;-1:-1:-1;;;;45966:56:0;-1:-1:-1;46042:4:0;;45226:828;-1:-1:-1;;;;;45226:828:0:o;36705:142::-;-1:-1:-1;;;;;36818:20:0;;36762:7;36818:20;;;:11;:20;;;;;;36789:50;;:24;36830:7;36789:15;:24::i;:::-;:28;:50;:28;:50;:::i;43781:163::-;43864:4;43881:55;;-1:-1:-1;;;43881:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35991:311;36092:10;36056:4;36082:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;36082:31:0;;;;;;;;;;;;:40;36073:88;;;;-1:-1:-1;;;36073:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36184:10;36174:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;36174:31:0;;;;;;;;;;:38;;-1:-1:-1;;36174:38:0;36208:4;36174:38;;;36228:44;36174:31;;36228:44;;;-1:-1:-1;36290:4:0;35991:311;;;:::o;29931:681::-;30109:4;-1:-1:-1;;;;;30139:16:0;;30131:67;;;;-1:-1:-1;;;30131:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30335:6;-1:-1:-1;;;;;30216:187:0;30242:10;-1:-1:-1;;;;;30216:187:0;-1:-1:-1;;;;;;;;;;;30267:11:0;30293:10;30318:2;30356:5;30376:16;30216:187;;;;;;;-1:-1:-1;;;;;30216:187:0;-1:-1:-1;;;;;30216:187:0;;;;;;-1:-1:-1;;;;;30216:187:0;-1:-1:-1;;;;;30216:187: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;30216:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30423:181;30443:11;30469:10;30494;30519:2;30536:6;30557:5;30577:16;30423:5;:181::i;:::-;30416:188;29931:681;-1:-1:-1;;;;;;29931:681:0:o;50709:79::-;50774:6;;;;;-1:-1:-1;;;;;50774:6:0;;50709:79::o;31486:772::-;31550:4;31567:27;31597:5;:27;31603:20;:11;:18;:20::i;:::-;31597:27;;;;;;;;;;;-1:-1:-1;31597:27:0;;-1:-1:-1;31670:22:0;31645:21;;;;;;;;:47;;;;;;;;:110;;;-1:-1:-1;31721:34:0;31696:21;;;;;;;;:59;;;;;;;;31645:110;31637:190;;;;-1:-1:-1;;;31637:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31860:37;31871:14;:25;;;31860:10;:37::i;:::-;:91;;;-1:-1:-1;31929:21:0;;;;-1:-1:-1;;;;;31929:21:0;31915:10;:35;31860:91;:145;;;-1:-1:-1;31983:21:0;;;;-1:-1:-1;;;;;31983:21:0;31969:10;:35;31860:145;31838:261;;;;-1:-1:-1;;;31838:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32112:25;32125:11;32112:12;:25::i;:::-;-1:-1:-1;32168:21:0;;32204;;;;;32155:71;;-1:-1:-1;;;;;32168:21:0;;;;32155:71;;32191:11;;32204:21;;;32155:71;;;;;;;32204:21;;32155:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;32155:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32246:4:0;;31486:772;-1:-1:-1;;31486:772:0:o;50523:87::-;50595:7;50588:14;;;;;;;;-1:-1:-1;;50588:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50562:13;;50588:14;;50595:7;;50588:14;;50595:7;50588:14;;;;;;;;;;;;;;;;;;;;;;;;22877:261;22962:4;22979:129;22988:12;:10;:12::i;:::-;23002:7;23011:96;23050:15;23011:96;;;;;;;;;;;;;;;;;:11;:25;23023:12;:10;:12::i;:::-;-1:-1:-1;;;;;23011:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;23011:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;36855:205::-;36918:4;36968:6;36943:21;36953:10;36943:9;:21::i;:::-;:31;;36935:72;;;;;-1:-1:-1;;;36935:72:0;;;;;;;;;;;;-1:-1:-1;;;36935:72:0;;;;;;;;;;;;;;;37025:27;37040:3;37045:6;37025:14;:27::i;:::-;37018:34;36855:205;-1:-1:-1;;;36855:205:0:o;32425:160::-;32515:4;32539:38;32552:11;32565:5;32572:4;32539:12;:38::i;3303:859::-;3492:14;;3439:4;;-1:-1:-1;;;;;3492:14:0;3478:10;:28;3456:125;;;;-1:-1:-1;;;3456:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3594:23;3620:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3620:18:0;;-1:-1:-1;;;3620:20:0:i;:::-;3651:30;3684:25;;;:8;:25;;;;;3594:46;;-1:-1:-1;3770:23:0;3752:14;;;;;;:41;;;;;;;;;3730:164;;;;-1:-1:-1;;;3730:164:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3915:14;;;:40;;-1:-1:-1;;3915:40:0;3932:23;3915:40;;;;4034:17;;;3973:157;;;-1:-1:-1;;;;;4034:17:0;;;3973:157;;;;;;;;;;;;;;;;;4008:11;;3973:157;;4034:17;3915:14;;4104:15;;;;3973:157;;;;;;;;;;4008:11;3973:157;;4008:11;3973:157;1:33:-1;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;3973:157:0;;;;;;;;-1:-1:-1;;3973:157:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;3973:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3973:157:0;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;;74:27;3973:157:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;3973:157:0;;;;-1:-1:-1;3973:157:0;;-1:-1:-1;;;;;;;;;;3973:157:0;-1:-1:-1;4150:4:0;;3303:859;-1:-1:-1;;;;;;3303:859:0:o;46062:773::-;46132:4;46149:23;46175:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;46175:18:0;;-1:-1:-1;;;46175:20:0:i;:::-;46208:36;46247:31;;;:14;:31;;;;;46149:46;;-1:-1:-1;46324:32:0;46299:21;;;;;;:57;;;;;;;;;46291:127;;;;-1:-1:-1;;;46291:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46451:11;;-1:-1:-1;;;;;46451:11:0;46437:10;:25;46429:87;;;;-1:-1:-1;;;46429:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46529:25;46557:22;;;:5;:22;;;;;46598:19;;;;46619:18;;;;46592:46;;-1:-1:-1;;;;;46598:19:0;;46592:5;:46::i;:::-;46651:21;;;:49;;-1:-1:-1;;46651:49:0;46675:25;46651:49;;;46747:19;;46718:85;;;;;;;;;;;;-1:-1:-1;;;;;46747:19:0;;;;46718:85;;46781:11;;46718:85;;;;;;46781:11;46718:85;;46781:11;46718:85;1:33:-1;99:1;81:16;;;74:27;46718:85:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;46718:85:0;;;;-1:-1:-1;46718:85:0;;-1:-1:-1;;;;46718:85:0;-1:-1:-1;46823:4:0;;46062:773;-1:-1:-1;;;;;46062:773:0:o;46843:742::-;46936:4;46953:23;46979:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;46979:18:0;;-1:-1:-1;;;46979:20:0:i;:::-;47012:36;47051:31;;;:14;:31;;;;;46953:46;;-1:-1:-1;47128:24:0;47103:21;;;;;;:49;;;;;;;;;47095:111;;;;-1:-1:-1;;;47095:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47239:11;;-1:-1:-1;;;;;47239:11:0;47225:10;:25;47217:87;;;;-1:-1:-1;;;47217:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47317:25;47345:22;;;:5;:22;;;;;;;;;47380:21;;;:49;;-1:-1:-1;;47380:49:0;47404:25;47380:49;;;47476:19;;47447:106;;;;;;;;;;;47345:22;;-1:-1:-1;;;;;47476:19:0;;;;47447:106;;47510:11;;47447:106;;47536:6;;;;47447:106;;;;;;;;47510:11;47447:106;;47510:11;47447:106;1:33:-1;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;47447:106:0;;;;;;;;;;;-1:-1:-1;47447:106:0;;;;;1:33:-1;99:1;81:16;;;74:27;47447:106:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;47447:106:0;;;;-1:-1:-1;47447:106:0;;-1:-1:-1;;;;;;;47447:106:0;-1:-1:-1;47573:4:0;;46843:742;-1:-1:-1;;;;;;;46843:742:0:o;41518:473::-;41631:4;41648:146;41675:10;41700:11;;41648:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;41648:146:0;;;;137:4:-1;41648:146:0;;;;;;;;;;;;;;;;;41726:10;;-1:-1:-1;41751:5:0;;-1:-1:-1;41648:146:0;41771:12;;;;;;41648:146;;41771:12;;;;41648:146;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;41648:12:0;;-1:-1:-1;;;41648:146:0:i;:::-;;41891:10;-1:-1:-1;;;;;41812:147:0;41840:10;-1:-1:-1;;;;;41812:147:0;-1:-1:-1;;;;;;;;;;;41865:11:0;;41916:5;41936:12;;41812:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;41812:147:0;;;;;;;;;;;-1:-1:-1;41812:147:0;;;;;1:33:-1;99:1;81:16;;;74:27;41812:147:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;41812:147:0;;;;-1:-1:-1;41812:147:0;;-1:-1:-1;;;;;;;;41812:147:0;-1:-1:-1;41979:4:0;41518:473;;;;;;;:::o;4463:856::-;4640:14;;4587:4;;-1:-1:-1;;;;;4640:14:0;4626:10;:28;4604:125;;;;-1:-1:-1;;;4604:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4742:23;4768:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4768:18:0;;-1:-1:-1;;;4768:20:0:i;:::-;4799:30;4832:25;;;:8;:25;;;;;4742:46;;-1:-1:-1;4918:23:0;4900:14;;;;;;:41;;;;;;;;;4878:161;;;;-1:-1:-1;;;4878:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5077:20;5060:14;;;:37;;-1:-1:-1;;5060:37:0;;;;;;;5173:17;;;5243:12;;;;5115:172;;;-1:-1:-1;;;;;5173:17:0;;;5115:172;;;;;;;;;;;;;;;;;;;;;;;5147:11;;5115:172;;5060:14;;5270:6;;;;5115:172;;;;;;;;;;;5147:11;5115:172;;5147:11;5115:172;1:33:-1;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;5115:172:0;;;;;;;;-1:-1:-1;;5115:172:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;5115:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5115:172:0;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;;74:27;5115:172:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;5115:172:0;;;;-1:-1:-1;5115:172:0;;-1:-1:-1;;;;;;;;;;;5115:172:0;-1:-1:-1;5307:4:0;;4463:856;-1:-1:-1;;;;;;4463:856:0:o;35846:137::-;-1:-1:-1;;;;;35950:15:0;;;35926:4;35950:15;;;:9;:15;;;;;;;;:25;;;;;;;;;;;;35846:137;;;;:::o;35485:116::-;-1:-1:-1;;;;;35573:20:0;35546:7;35573:20;;;:11;:20;;;;;;;35485:116::o;30620:858::-;30825:4;-1:-1:-1;;;;;30855:16:0;;30847:67;;;;-1:-1:-1;;;30847:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30933:18:0;;30925:69;;;;-1:-1:-1;;;30925:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31013:15:0;;;;;;:9;:15;;;;;;;;31029:10;31013:27;;;;;;;;;;31005:71;;;;;-1:-1:-1;;;31005:71:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31005:71:0;;;;;;;;;;;;;;;31207:6;-1:-1:-1;;;;;31094:181:0;31120:10;-1:-1:-1;;;;;31094:181:0;-1:-1:-1;;;;;;;;;;;31145:11:0;31171:4;31190:2;31228:5;31248:16;31094:181;;;;;;;-1:-1:-1;;;;;31094:181:0;-1:-1:-1;;;;;31094:181:0;;;;;;-1:-1:-1;;;;;31094:181:0;-1:-1:-1;;;;;31094:181: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;31094:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31295:175;31315:11;31341:10;31366:4;31385:2;31402:6;31423:5;31443:16;31295:5;:175::i;5604:682::-;5749:14;;5696:4;;-1:-1:-1;;;;;5749:14:0;5735:10;:28;5713:125;;;;-1:-1:-1;;;5713:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5851:23;5877:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;5877:18:0;;-1:-1:-1;;;5877:20:0:i;:::-;5908:30;5941:25;;;:8;:25;;;;;5851:46;;-1:-1:-1;6019:20:0;6001:14;;;;;;:38;;;;;;;;;5979:142;;;;-1:-1:-1;;;5979:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6134:14;;;:39;;-1:-1:-1;;6134:39:0;6151:22;6134:39;;;;6224:17;;;6243:12;;;;6191:65;;;-1:-1:-1;;;;;6224:17:0;;;6191:65;;;;;;;;;;;;;;;;;;;;;;;6211:11;;6191:65;;6224:17;6191:65;;;;6211:11;6191:65;;6211:11;6191:65;1:33:-1;99:1;81:16;;;74:27;6191:65:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;6191:65:0;;;;-1:-1:-1;6191:65:0;;-1:-1:-1;;;;;;6191:65:0;-1:-1:-1;6274:4:0;;5604:682;-1:-1:-1;;;;5604:682:0:o;32266:151::-;32345:4;32370:39;32383:11;32396:5;32403;32370:12;:39::i;20546:134::-;-1:-1:-1;;;;;20645:18:0;;;20618:7;20645:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20546:134::o;47593:610::-;47683:21;47715:13;47739:26;47776:23;47823;47849:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;47849:18:0;;-1:-1:-1;;;47849:20:0:i;:::-;47882:37;47922:31;;;:14;:31;;;;;;;;47993:5;:22;;;;;;48050:20;;;;;48085:19;;;;48162:22;;;;48028:167;;;;;48050:20;48028:167;;;;;;;;-1:-1:-1;;48028:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;47922:31;;-1:-1:-1;47922:31:0;;47993:22;;-1:-1:-1;;;;;48050:20:0;;;;48085:19;;47922:31;;48162:22;;;48028:167;47922:31;;48028:167;;;47922:31;48028:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47593:610;;;;;;;:::o;33848:1070::-;33936:4;33953:26;33982:5;:27;33988:20;:11;:18;:20::i;:::-;33982:27;;;;;;;;;;;-1:-1:-1;33982:27:0;;-1:-1:-1;34054:22:0;34030:20;;;;;;;;:46;;;;;;;;34022:103;;;;-1:-1:-1;;;34022:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34145:36;34156:13;:24;;;34145:10;:36::i;:::-;34144:37;34136:84;;;;-1:-1:-1;;;34136:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34253:20;;;;-1:-1:-1;;;;;34253:20:0;34277:10;34253:34;;:72;;-1:-1:-1;34291:20:0;;-1:-1:-1;;;;;34291:20:0;34315:10;34291:34;34253:72;34231:177;;;;-1:-1:-1;;;34231:177:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34445:24;;;;34486:21;34482:237;;34551:1;34524:24;;;:28;34482:237;;;34682:25;:3;34690:16;34682:25;:7;:25;:::i;:::-;34655:24;;;:52;34482:237;34762:20;;34851:24;;;;34736:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34762:20:0;;;;34736:150;;34797:11;;34823:13;;34851:24;;34736:150;;;;;;;;;;;;;34762:20;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;34736:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34906:4:0;;33848:1070;-1:-1:-1;;;;33848:1070:0:o;875:29::-;;;-1:-1:-1;;;;;875:29:0;;:::o;1222:94::-;1305:3;;1222:94;:::o;9525:98::-;9605:10;9525:98;:::o;25808:338::-;-1:-1:-1;;;;;25902:19:0;;25894:68;;;;-1:-1:-1;;;25894:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25981:21:0;;25973:68;;;;-1:-1:-1;;;25973:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26054:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26106:32;;;;;;;;;;;;;;;;;25808:338;;;:::o;20002:110::-;-1:-1:-1;;;;;20086:18:0;20059:7;20086:18;;;;;;;;;;;;20002:110::o;1629:763::-;1754:4;1771:23;1797:20;:11;:18;:20::i;:::-;1828:30;1861:25;;;:8;:25;;;;;1771:46;;-1:-1:-1;1908:25:0;:15;:23;:25::i;:::-;1907:26;1899:72;;;;-1:-1:-1;;;1899:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1990:12;;;;:17;1982:67;;;;-1:-1:-1;;;1982:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2062:17;;;:30;;-1:-1:-1;;;;;;2062:30:0;2082:10;2062:30;;;2103:41;;;;2062:7;;2103:41;;;;;:::i;:::-;-1:-1:-1;2155:14:0;;;:40;;-1:-1:-1;;2155:40:0;2172:23;2155:40;;;2221:9;2206:12;;;:24;2248:112;;;2309:10;2248:112;;;;;;;;;;;;;;;;;;;;;;;2334:15;;2248:112;;;;;;;;;;;;;;;;;;-1:-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;2248:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2248:112: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;2248:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2380:4:0;;1629:763;-1:-1:-1;;;;1629:763:0:o;21451:304::-;21540:4;21557:36;21567:6;21575:9;21586:6;21557:9;:36::i;:::-;21604:121;21613:6;21621:12;:10;:12::i;:::-;21635:89;21673:6;21635:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21635:19:0;;;;;;:11;:19;;;;;;21655:12;:10;:12::i;:::-;-1:-1:-1;;;;;21635:33:0;;;;;;;;;;;;-1:-1:-1;21635:33:0;;;:89;;:37;:89;:::i;21604:121::-;-1:-1:-1;21743:4:0;21451:304;;;;;:::o;110:117::-;167:7;215:2;204:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;204::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;204:14:0;;;194:25;;;;;;187:32;;110:117;;;:::o;23628:471::-;-1:-1:-1;;;;;23726:20:0;;23718:70;;;;-1:-1:-1;;;23718:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23807:23:0;;23799:71;;;;-1:-1:-1;;;23799:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23903;23925:6;23903:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23903:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;23883:17:0;;;:9;:17;;;;;;;;;;;:91;;;;24008:20;;;;;;;:32;;24033:6;24008:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;23985:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;24056:35;;;;;;;23985:20;;24056:35;;;;-1:-1:-1;;;;;;;;;;;24056:35:0;;;;;;;;23628:471;;;:::o;39547:408::-;39637:27;39667:5;:27;39673:20;:11;:18;:20::i;:::-;39667:27;;;;;;;;;;;-1:-1:-1;39667:27:0;39705:21;;;:47;;39667:27;;-1:-1:-1;39729:23:0;;-1:-1:-1;;39705:47:0;;39729:23;39705:47;;;;-1:-1:-1;39860:21:0;;;;39797;;39896:20;;;;39770:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39860:21:0;;;;39797;;;;39770:177;;;;39896:20;;39770:177;;;;;;;;;;;;;;;;-1:-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;39770:177:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39547:408;;;:::o;38783:756::-;38850:4;38867:27;38897:5;:27;38903:20;:11;:18;:20::i;:::-;38897:27;;;;;;;;;;;38867:57;;38941:37;38952:14;:25;;;38941:10;:37::i;:::-;38937:387;;;39019:35;38995:21;;;:59;;-1:-1:-1;;38995:59:0;;39019:35;38995:59;;;;;;38937:387;;;39091:21;;;;-1:-1:-1;;;;;39091:21:0;39116:10;39091:35;39087:226;;;39147:21;;;:55;;39171:31;;39147:21;-1:-1:-1;;39147:55:0;;39171:31;39147:55;;39087:226;39243:21;;;:54;;-1:-1:-1;;39243:54:0;39267:30;39243:54;;;39087:226;39412:20;;;;39385:21;;;;-1:-1:-1;;;;;39385:21:0;39373:34;;;;:11;:34;;;;;;:60;;;:38;:60;:::i;:::-;39348:21;;;;-1:-1:-1;;;;;39348:21:0;39336:34;;;;:11;:34;;;;;:97;39486:20;;;;39464:17;;:43;;;:21;:43;:::i;:::-;39444:17;:63;-1:-1:-1;39527:4:0;;38783:756;-1:-1:-1;;38783:756:0:o;13672:181::-;13730:7;13762:5;;;13786:6;;;;13778:46;;;;;-1:-1:-1;;;13778:46:0;;;;;;;;;;;;-1:-1:-1;;;13778:46:0;;;;;;;;;;;;;;24380:308;-1:-1:-1;;;;;24456:21:0;;24448:65;;;;;-1:-1:-1;;;24448:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24541:12;;:24;;24558:6;24541:24;:16;:24;:::i;:::-;24526:12;:39;-1:-1:-1;;;;;24597:18:0;;:9;:18;;;;;;;;;;;:30;;24620:6;24597:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;24576:18:0;;:9;:18;;;;;;;;;;;:51;;;;24643:37;;;;;;;24576:18;;:9;;-1:-1:-1;;;;;;;;;;;24643:37:0;;;;;;;;;24380:308;;:::o;49028:697::-;49234:4;49256:31;49290:14;:36;49305:20;:11;:18;:20::i;:::-;49290:36;;;;;;;;;;;49256:70;;49348:22;:12;:20;:22::i;:::-;49347:23;49339:66;;;;;-1:-1:-1;;;49339:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;49418:37;;;;:9;;:37;;;;;:::i;:::-;-1:-1:-1;49485:24:0;49466:16;;;:43;;-1:-1:-1;;49466:43:0;;;;;;49629:15;;49659:11;;49529:188;;49549:11;;49575:7;;49597:17;;-1:-1:-1;;;;;49629:15:0;;;;49659:11;49685:5;-1:-1:-1;49529:5:0;:188::i;14128:136::-;14186:7;14213:43;14217:1;14220;14213:43;;;;;;;;;;;;;;;;;:3;:43::i;37513:1262::-;37742:4;37764:20;37787:5;:27;37793:20;:11;:18;:20::i;:::-;37787:27;;;;;;;;;;;37764:50;;37836:21;:11;:19;:21::i;:::-;37835:22;37827:65;;;;;-1:-1:-1;;;37827:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37911:10;37903:54;;;;;-1:-1:-1;;;37903:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37903:54:0;;;;;;;;;;;;;;;37976:13;;;;:18;37968:62;;;;;-1:-1:-1;;;37968:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38049:20:0;;38041:72;;;;-1:-1:-1;;;38041:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38141:15;38151:4;38141:9;:15::i;:::-;38132:5;:24;;38124:103;;;;-1:-1:-1;;;38124:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38240:23;;-1:-1:-1;;;;;;38240:23:0;;;-1:-1:-1;;;;;38240:23:0;;;;;;;;;-1:-1:-1;38274:14:0;;;:21;;;;;;;;;;38306:14;;;:19;;;;;;;;;;38336:14;;;:23;;;;;;;;;;;;;;;38370:13;;;:21;;;38402:14;;;:39;;-1:-1:-1;;38402:39:0;;;;;;38458:21;;38454:170;;38587:25;:3;38595:16;38587:25;:7;:25;:::i;:::-;38566:18;;;:46;38454:170;-1:-1:-1;;;;;38656:17:0;;;;;;:11;:17;;;;;;:28;;38678:5;38656:28;:21;:28;:::i;:::-;-1:-1:-1;;;;;38636:17:0;;;;;;:11;:17;;;;;:48;38715:17;;:28;;38737:5;38715:28;:21;:28;:::i;:::-;38695:17;:48;-1:-1:-1;38763:4:0;;37513:1262;-1:-1:-1;;;;;;;;37513:1262:0:o;37306:199::-;37369:4;37459:15;;;;;:38;;-1:-1:-1;;37479:3:0;:17;;;37306:199::o;14601:192::-;14687:7;14723:12;14715:6;;;;14707:29;;;;-1:-1:-1;;;14707:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14707:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14759:5:0;;;14601:192::o;20325:158::-;20394:4;20411:42;20421:12;:10;:12::i;:::-;20435:9;20446:6;20411:9;:42::i;32595:1243::-;32708:4;32727:27;32757:5;:27;32763:20;:11;:18;:20::i;:::-;32757:27;;;;;;;;;;;-1:-1:-1;32757:27:0;;-1:-1:-1;32830:22:0;32805:21;;;;;;;;:47;;;;;;;;:110;;;-1:-1:-1;32881:34:0;32856:21;;;;;;;;:59;;;;;;;;32805:110;32797:190;;;;-1:-1:-1;;;32797:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33006:10;32998:54;;;;;-1:-1:-1;;;32998:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32998:54:0;;;;;;;;;;;;;;;33071:21;;;;-1:-1:-1;;;;;33071:21:0;33096:10;33071:35;33063:91;;;;-1:-1:-1;;;33063:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33174:37;33185:14;:25;;;33174:10;:37::i;:::-;33173:38;33165:79;;;;;-1:-1:-1;;;33165:79:0;;;;;;;;;;;;-1:-1:-1;;;33165:79:0;;;;;;;;;;;;;;;33272:14;:20;;;33263:5;:29;;33255:96;;;;-1:-1:-1;;;33255:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33370:24;:64;;;;;33432:1;33423:5;33400:14;:20;;;:28;33399:34;33370:64;33366:342;;;33451:40;33472:11;33485:5;33451:20;:40::i;:::-;33506:49;33536:11;33549:5;33506:29;:49::i;:::-;33366:342;;;33588:55;33609:11;33622:14;:20;;;33588;:55::i;:::-;33658:38;33677:11;33690:5;33658:18;:38::i;:::-;33754:21;;;;33777;;;;33744:62;;-1:-1:-1;;;;;33754:21:0;;;;33777;33800:5;33744:9;:62::i;:::-;-1:-1:-1;33826:4:0;;32595:1243;-1:-1:-1;;;;32595:1243:0:o;25020:348::-;-1:-1:-1;;;;;25096:21:0;;25088:67;;;;-1:-1:-1;;;25088:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25189:68;25212:6;25189:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25189:18:0;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;25168:18:0;;:9;:18;;;;;;;;;;:89;25283:12;;:24;;25300:6;25283:24;:16;:24;:::i;:::-;25268:12;:39;25323:37;;;;;;;;25349:1;;-1:-1:-1;;;;;25323:37:0;;;-1:-1:-1;;;;;;;;;;;25323:37:0;;;;;;;;25020:348;;:::o;235:111::-;317:16;:21;;235:111::o;40480:309::-;40572:27;40602:5;:27;40608:20;:11;:18;:20::i;:::-;40602:27;;;;;;;;;;;;;;-1:-1:-1;40602:27:0;;;40689:21;;;;-1:-1:-1;;;;;40689:21:0;40677:34;;:11;:34;;;;;40602:27;;-1:-1:-1;40677:45:0;;40716:5;40677:45;:38;:45;:::i;:::-;40652:21;;;;-1:-1:-1;;;;;40652:21:0;40640:34;;;;:11;:34;;;;;:82;40753:17;;:28;;40775:5;40753:28;:21;:28;:::i;:::-;40733:17;:48;-1:-1:-1;;;40480:309:0:o;39963:509::-;40064:27;40094:5;:27;40100:20;:11;:18;:20::i;:::-;40094:27;;;;;;;;;;;-1:-1:-1;40094:27:0;40132:21;;;:58;;-1:-1:-1;;40132:58:0;40156:34;40132:58;;;40224:20;;;;40094:27;;-1:-1:-1;40224:31:0;;40249:5;40224:24;:31::i;:::-;40201:20;;;:54;;;40373:21;;;;40311;;40273:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40373:21:0;;;;40311;;;;;40273:191;;;;40201:54;;40273:191;;;;;;;;;;;;;;;;;-1:-1:-1;27:10;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;49794:1191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49794:1191:0;;;-1:-1:-1;49794:1191:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://b0301d4465a561932901711da016e59c1b9e6f1d27164d3e537971db839bedb4
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.