ETH Price: $2,622.17 (-0.63%)

Contract

0x9c39efA16715856b58B61901dBeFc13be461B303
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenManagerDelegate

Compiler Version
v0.4.26+commit.4563c3fc

Optimization Enabled:
Yes with 200 runs

Other Settings:
byzantium EvmVersion, MIT license

Contract Source Code (Solidity)

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

// File: contracts/components/Owned.sol

/*

  Copyright 2019 Wanchain Foundation.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

//                            _           _           _
//  __      ____ _ _ __   ___| |__   __ _(_)_ __   __| | _____   __
//  \ \ /\ / / _` | '_ \ / __| '_ \ / _` | | '_ \@/ _` |/ _ \ \ / /
//   \ V  V / (_| | | | | (__| | | | (_| | | | | | (_| |  __/\ V /
//    \_/\_/ \__,_|_| |_|\___|_| |_|\__,_|_|_| |_|\__,_|\___| \_/
//
//

pragma solidity ^0.4.24;

/// @dev `Owned` is a base level contract that assigns an `owner` that can be
///  later changed
contract Owned {

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @dev `owner` is the only address that can call a function with this
    /// modifier
    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }

    address public owner;

    /// @notice The Constructor assigns the message sender to be `owner`
    constructor() public {
        owner = msg.sender;
    }

    address public newOwner;

    function transferOwner(address _newOwner) public onlyOwner {
        require(_newOwner != address(0), "New owner is the zero address");
        emit OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }

    /// @notice `owner` can step down and assign some other address to this role
    /// @param _newOwner The address of the new owner. 0x0 can be used to create
    ///  an unowned neutral vault, however that cannot be undone
    function changeOwner(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }

    function acceptOwnership() public {
        if (msg.sender == newOwner) {
            owner = newOwner;
        }
    }

    function renounceOwnership() public onlyOwner {
        owner = address(0);
    }
}

// File: contracts/components/Admin.sol

pragma solidity 0.4.26;


contract Admin is Owned {
    mapping(address => bool) public mapAdmin;

    event AddAdmin(address admin);
    event RemoveAdmin(address admin);

    modifier onlyAdmin() {
        require(mapAdmin[msg.sender], "not admin");
        _;
    }

    function addAdmin(
        address admin
    )
        external
        onlyOwner
    {
        mapAdmin[admin] = true;

        emit AddAdmin(admin);
    }

    function removeAdmin(
        address admin
    )
        external
        onlyOwner
    {
        delete mapAdmin[admin];

        emit RemoveAdmin(admin);
    }
}

// File: contracts/lib/BasicStorageLib.sol

pragma solidity ^0.4.24;

library BasicStorageLib {

    struct UintData {
        mapping(bytes => mapping(bytes => uint))           _storage;
    }

    struct BoolData {
        mapping(bytes => mapping(bytes => bool))           _storage;
    }

    struct AddressData {
        mapping(bytes => mapping(bytes => address))        _storage;
    }

    struct BytesData {
        mapping(bytes => mapping(bytes => bytes))          _storage;
    }

    struct StringData {
        mapping(bytes => mapping(bytes => string))         _storage;
    }

    /* uintStorage */

    function setStorage(UintData storage self, bytes memory key, bytes memory innerKey, uint value) internal {
        self._storage[key][innerKey] = value;
    }

    function getStorage(UintData storage self, bytes memory key, bytes memory innerKey) internal view returns (uint) {
        return self._storage[key][innerKey];
    }

    function delStorage(UintData storage self, bytes memory key, bytes memory innerKey) internal {
        delete self._storage[key][innerKey];
    }

    /* boolStorage */

    function setStorage(BoolData storage self, bytes memory key, bytes memory innerKey, bool value) internal {
        self._storage[key][innerKey] = value;
    }

    function getStorage(BoolData storage self, bytes memory key, bytes memory innerKey) internal view returns (bool) {
        return self._storage[key][innerKey];
    }

    function delStorage(BoolData storage self, bytes memory key, bytes memory innerKey) internal {
        delete self._storage[key][innerKey];
    }

    /* addressStorage */

    function setStorage(AddressData storage self, bytes memory key, bytes memory innerKey, address value) internal {
        self._storage[key][innerKey] = value;
    }

    function getStorage(AddressData storage self, bytes memory key, bytes memory innerKey) internal view returns (address) {
        return self._storage[key][innerKey];
    }

    function delStorage(AddressData storage self, bytes memory key, bytes memory innerKey) internal {
        delete self._storage[key][innerKey];
    }

    /* bytesStorage */

    function setStorage(BytesData storage self, bytes memory key, bytes memory innerKey, bytes memory value) internal {
        self._storage[key][innerKey] = value;
    }

    function getStorage(BytesData storage self, bytes memory key, bytes memory innerKey) internal view returns (bytes memory) {
        return self._storage[key][innerKey];
    }

    function delStorage(BytesData storage self, bytes memory key, bytes memory innerKey) internal {
        delete self._storage[key][innerKey];
    }

    /* stringStorage */

    function setStorage(StringData storage self, bytes memory key, bytes memory innerKey, string memory value) internal {
        self._storage[key][innerKey] = value;
    }

    function getStorage(StringData storage self, bytes memory key, bytes memory innerKey) internal view returns (string memory) {
        return self._storage[key][innerKey];
    }

    function delStorage(StringData storage self, bytes memory key, bytes memory innerKey) internal {
        delete self._storage[key][innerKey];
    }

}

// File: contracts/components/BasicStorage.sol

pragma solidity ^0.4.24;


contract BasicStorage {
    /************************************************************
     **
     ** VARIABLES
     **
     ************************************************************/

    //// basic variables
    using BasicStorageLib for BasicStorageLib.UintData;
    using BasicStorageLib for BasicStorageLib.BoolData;
    using BasicStorageLib for BasicStorageLib.AddressData;
    using BasicStorageLib for BasicStorageLib.BytesData;
    using BasicStorageLib for BasicStorageLib.StringData;

    BasicStorageLib.UintData    internal uintData;
    BasicStorageLib.BoolData    internal boolData;
    BasicStorageLib.AddressData internal addressData;
    BasicStorageLib.BytesData   internal bytesData;
    BasicStorageLib.StringData  internal stringData;
}

// File: contracts/tokenManager/TokenManagerStorage.sol

/*

  Copyright 2019 Wanchain Foundation.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

//                            _           _           _
//  __      ____ _ _ __   ___| |__   __ _(_)_ __   __| | _____   __
//  \ \ /\ / / _` | '_ \ / __| '_ \ / _` | | '_ \@/ _` |/ _ \ \ / /
//   \ V  V / (_| | | | | (__| | | | (_| | | | | | (_| |  __/\ V /
//    \_/\_/ \__,_|_| |_|\___|_| |_|\__,_|_|_| |_|\__,_|\___| \_/
//
//

pragma solidity 0.4.26;


contract TokenManagerStorage is BasicStorage {
    /************************************************************
     **
     ** STRUCTURE DEFINATIONS
     **
     ************************************************************/

    struct AncestorInfo {
      bytes   account;
      string  name;
      string  symbol;
      uint8   decimals;
      uint    chainID;
    }

    struct TokenPairInfo {
      AncestorInfo aInfo;               /// TODO:
      uint      fromChainID;            /// index in coinType.txt; e.g. eth=60, etc=61, wan=5718350
      bytes     fromAccount;            /// from address
      uint      toChainID;              ///
      bytes     toAccount;              /// to token address
    }
    
    struct TokenPairInfoFull {
      uint      id;
      AncestorInfo aInfo;
      uint      fromChainID;
      bytes     fromAccount;
      uint      toChainID;
      bytes     toAccount;
    }


    /************************************************************
     **
     ** VARIABLES
     **
     ************************************************************/

    /// total amount of TokenPair instance
    uint public totalTokenPairs = 0;

    /// a map from a sequence ID to token pair
    mapping(uint => TokenPairInfo) public mapTokenPairInfo;
    // index -> tokenPairId
    mapping(uint => uint) public mapTokenPairIndex;
}

// File: contracts/components/WRC20Protocol.sol

pragma solidity 0.4.26;

contract WRC20Protocol {
    /* This is a slight change to the ERC20 base standard.
    function totalSupply() constant returns (uint supply);
    is replaced with:
    uint public totalSupply;
    This automatically creates a getter function for the totalSupply.
    This is moved to the base contract since public getter functions are not
    currently recognised as an implementation of the matching abstract
    function by the compiler.
    */

    /**************************************
     **
     ** VARIABLES
     **
     **************************************/

    string public name;
    string public symbol;
    uint8 public decimals;
    mapping (address => uint) balances;
    mapping (address => mapping (address => uint)) allowed;

    /// total amount of tokens
    uint public totalSupply;

    /// @param _owner The address from which the balance will be retrieved
    /// @return The balance
    function balanceOf(address _owner) public view returns (uint balance);

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint _value) public returns (bool success);

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
    /// @param _from The address of the sender
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address _from, address _to, uint _value) public returns (bool success);

    /// @notice `msg.sender` approves `_spender` to spend `_value` tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address _spender, uint _value) public returns (bool success);

    /// @param _owner The address of the account owning tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address _owner, address _spender) public view returns (uint remaining);

    event Transfer(address indexed _from, address indexed _to, uint _value);
    event Approval(address indexed _owner, address indexed _spender, uint _value);
}

// File: contracts/lib/SafeMath.sol

pragma solidity ^0.4.24;

/**
 * Math operations with safety checks
 */
library SafeMath {

    /**
    * @dev Multiplies two numbers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

        return c;
    }

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

        return c;
    }

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

        return c;
    }

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

// File: contracts/components/StandardToken.sol

/*

  Copyright 2019 Wanchain Foundation.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

//                            _           _           _
//  __      ____ _ _ __   ___| |__   __ _(_)_ __   __| | _____   __
//  \ \ /\ / / _` | '_ \ / __| '_ \ / _` | | '_ \@/ _` |/ _ \ \ / /
//   \ V  V / (_| | | | | (__| | | | (_| | | | | | (_| |  __/\ V /
//    \_/\_/ \__,_|_| |_|\___|_| |_|\__,_|_|_| |_|\__,_|\___| \_/
//
//


pragma solidity 0.4.26;



contract StandardToken is WRC20Protocol {
    using SafeMath for uint;

    /**
    * @dev Fix for the ERC20 short address attack.
    */
    modifier onlyPayloadSize(uint size) {
        require(msg.data.length >= size + 4, "Payload size is incorrect");
        _;
    }

    function transfer(address _to, uint _value) public onlyPayloadSize(2 * 32) returns (bool success) {
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint _value) public onlyPayloadSize(3 * 32) returns (bool success) {
        balances[_to] = balances[_to].add(_value);
        balances[_from] = balances[_from].sub(_value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        emit Transfer(_from, _to, _value);
        return true;
    }

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

    function approve(address _spender, uint _value) public onlyPayloadSize(2 * 32) returns (bool success) {
        //  To change the approve amount you first have to reduce the addresses`
        //  allowance to zero by calling `approve(_spender, 0)` if it is not
        //  already 0 to mitigate the race condition described here:
        //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
        require((_value == 0) || (allowed[msg.sender][_spender] == 0), "Not permitted");

        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public view returns (uint remaining) {
      return allowed[_owner][_spender];
    }
}

// File: contracts/tokenManager/MappingToken.sol

/*

  Copyright 2019 Wanchain Foundation.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

//                            _           _           _
//  __      ____ _ _ __   ___| |__   __ _(_)_ __   __| | _____   __
//  \ \ /\ / / _` | '_ \ / __| '_ \ / _` | | '_ \@/ _` |/ _ \ \ / /
//   \ V  V / (_| | | | | (__| | | | (_| | | | | | (_| |  __/\ V /
//    \_/\_/ \__,_|_| |_|\___|_| |_|\__,_|_|_| |_|\__,_|\___| \_/
//
//

pragma solidity 0.4.26;



contract MappingToken is StandardToken, Owned {
    using SafeMath for uint;
    /****************************************************************************
     **
     ** MODIFIERS
     **
     ****************************************************************************/
    modifier onlyMeaningfulValue(uint value) {
        require(value > 0, "Value is null");
        _;
    }

    /****************************************************************************
     **
     ** EVENTS
     **
     ****************************************************************************/

    ///@notice Initialize the TokenManager address
    ///@dev Initialize the TokenManager address
    ///@param tokenName The token name to be used
    ///@param tokenSymbol The token symbol to be used
    ///@param tokenDecimal The token decimals to be used
    constructor(string tokenName, string tokenSymbol, uint8 tokenDecimal)
        public
    {
        name = tokenName;
        symbol = tokenSymbol;
        decimals = tokenDecimal;
    }

    /****************************************************************************
     **
     ** MANIPULATIONS
     **
     ****************************************************************************/

    /// @notice Create token
    /// @dev Create token
    /// @param account Address will receive token
    /// @param value Amount of token to be minted
    function mint(address account, uint value)
        external
        onlyOwner
        onlyMeaningfulValue(value)
    {
        balances[account] = balances[account].add(value);
        totalSupply = totalSupply.add(value);

        emit Transfer(address(0), account, value);
    }

    /// @notice Burn token
    /// @dev Burn token
    /// @param account Address of whose token will be burnt
    /// @param value Amount of token to be burnt
    function burn(address account, uint value)
        external
        onlyOwner
        onlyMeaningfulValue(value)
    {
        balances[account] = balances[account].sub(value);
        totalSupply = totalSupply.sub(value);

        emit Transfer(account, address(0), value);
    }

    /// @notice update token name, symbol
    /// @dev update token name, symbol
    /// @param _name token new name
    /// @param _symbol token new symbol
    function update(string _name, string _symbol)
        external
        onlyOwner
    {
        name = _name;
        symbol = _symbol;
    }
}

// File: contracts/tokenManager/IMappingToken.sol

/*

  Copyright 2019 Wanchain Foundation.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

//                            _           _           _
//  __      ____ _ _ __   ___| |__   __ _(_)_ __   __| | _____   __
//  \ \ /\ / / _` | '_ \ / __| '_ \ / _` | | '_ \@/ _` |/ _ \ \ / /
//   \ V  V / (_| | | | | (__| | | | (_| | | | | | (_| |  __/\ V /
//    \_/\_/ \__,_|_| |_|\___|_| |_|\__,_|_|_| |_|\__,_|\___| \_/
//
//

pragma solidity 0.4.26;


interface IMappingToken {
    function changeOwner(address _newOwner) external;
    function acceptOwnership() external;
    function transferOwner(address) external;
    function name() external view returns (string);
    function symbol() external view returns (string);
    function decimals() external view returns (uint8);
    function mint(address, uint) external;
    function burn(address, uint) external;
    function update(string, string) external;
}

// File: contracts/tokenManager/TokenManagerDelegate.sol

/*

  Copyright 2019 Wanchain Foundation.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

//                            _           _           _
//  __      ____ _ _ __   ___| |__   __ _(_)_ __   __| | _____   __
//  \ \ /\ / / _` | '_ \ / __| '_ \ / _` | | '_ \@/ _` |/ _ \ \ / /
//   \ V  V / (_| | | | | (__| | | | (_| | | | | | (_| |  __/\ V /
//    \_/\_/ \__,_|_| |_|\___|_| |_|\__,_|_|_| |_|\__,_|\___| \_/
//
//

pragma solidity 0.4.26;
pragma experimental ABIEncoderV2;

/**
 * Math operations with safety checks
 */





contract TokenManagerDelegate is TokenManagerStorage, Admin {
    using SafeMath for uint;
    /************************************************************
     **
     ** EVENTS
     **
     ************************************************************/

     event AddToken(address tokenAddress, string name, string symbol, uint8 decimals);
     event AddTokenPair(uint indexed id, uint fromChainID, bytes fromAccount, uint toChainID, bytes toAccount);
     event UpdateTokenPair(uint indexed id, AncestorInfo aInfo, uint fromChainID, bytes fromAccount, uint toChainID, bytes toAccount);
     event RemoveTokenPair(uint indexed id);
     event UpdateToken(address tokenAddress, string name, string symbol);

    /**
     *
     * MODIFIERS
     *
     */

    modifier onlyNotExistID(uint id) {
        require(mapTokenPairInfo[id].fromChainID == 0, "token exist");
        _;
    }

    modifier onlyExistID(uint id) {
        require(mapTokenPairInfo[id].fromChainID > 0, "token not exist");
        _;
    }

    /**
    *
    * MANIPULATIONS
    *
    */
    
    function bytesToAddress(bytes b) internal pure returns (address addr) {
        assembly {
            addr := mload(add(b,20))
        }
    }

    function mintToken(
        address tokenAddress,
        address to,
        uint    value
    )
        external
        onlyAdmin
    {
        IMappingToken(tokenAddress).mint(to, value);
    }

    function burnToken(
        address tokenAddress,
        address from,
        uint    value
    )
        external
        onlyAdmin
    {
        IMappingToken(tokenAddress).burn(from, value);
    }

    function addToken(
        string name,
        string symbol,
        uint8 decimals
    )
        external
        onlyOwner
    {
        address tokenAddress = new MappingToken(name, symbol, decimals);
        
        emit AddToken(tokenAddress, name, symbol, decimals);
    }

    function addTokenPair(
        uint    id,

        AncestorInfo aInfo,

        uint    fromChainID,
        bytes   fromAccount,
        uint    toChainID,
        bytes   toAccount
    )
        public
        onlyOwner
        onlyNotExistID(id)
    {
        // create a new record
        mapTokenPairInfo[id].fromChainID = fromChainID;
        mapTokenPairInfo[id].fromAccount = fromAccount;
        mapTokenPairInfo[id].toChainID = toChainID;
        mapTokenPairInfo[id].toAccount = toAccount;

        mapTokenPairInfo[id].aInfo.account = aInfo.account;
        mapTokenPairInfo[id].aInfo.name = aInfo.name;
        mapTokenPairInfo[id].aInfo.symbol = aInfo.symbol;
        mapTokenPairInfo[id].aInfo.decimals = aInfo.decimals;
        mapTokenPairInfo[id].aInfo.chainID = aInfo.chainID;

        mapTokenPairIndex[totalTokenPairs] = id;
        totalTokenPairs = totalTokenPairs.add(1);

        // fire event
        emit AddTokenPair(id, fromChainID, fromAccount, toChainID, toAccount);
    }

    function updateTokenPair(
        uint    id,

        AncestorInfo aInfo,

        uint    fromChainID,
        bytes   fromAccount,
        uint    toChainID,
        bytes   toAccount
    )
        public
        onlyOwner
        onlyExistID(id)
    {
        mapTokenPairInfo[id].aInfo.account = aInfo.account;
        mapTokenPairInfo[id].aInfo.name = aInfo.name;
        mapTokenPairInfo[id].aInfo.symbol = aInfo.symbol;
        mapTokenPairInfo[id].aInfo.decimals = aInfo.decimals;
        mapTokenPairInfo[id].aInfo.chainID = aInfo.chainID;

        mapTokenPairInfo[id].fromChainID = fromChainID;
        mapTokenPairInfo[id].fromAccount = fromAccount;
        mapTokenPairInfo[id].toChainID = toChainID;
        mapTokenPairInfo[id].toAccount = toAccount;

        emit UpdateTokenPair(id, aInfo, fromChainID, fromAccount, toChainID, toAccount);
    }

    function removeTokenPair(
        uint id
    )
        external
        onlyOwner
        onlyExistID(id)
    {
        for(uint i=0; i<totalTokenPairs; i++) {
            if (id == mapTokenPairIndex[i]) {
                if (i != totalTokenPairs - 1) {
                    mapTokenPairIndex[i] = mapTokenPairIndex[totalTokenPairs - 1];
                }
 
                delete mapTokenPairIndex[totalTokenPairs - 1];
                totalTokenPairs--;
                delete mapTokenPairInfo[id];
                emit RemoveTokenPair(id);
                return;
            }
        }
    }

    function updateToken(address tokenAddress, string name, string symbol)
        external
        onlyOwner
    {
        IMappingToken(tokenAddress).update(name, symbol);

        emit UpdateToken(tokenAddress, name, symbol);
    }

    function changeTokenOwner(address tokenAddress, address _newOwner) external onlyOwner {
        IMappingToken(tokenAddress).changeOwner(_newOwner);
    }

    function acceptTokenOwnership(address tokenAddress) external {
        IMappingToken(tokenAddress).acceptOwnership();
    }

    function transferTokenOwner(address tokenAddress, address _newOwner) external onlyOwner {
        IMappingToken(tokenAddress).transferOwner(_newOwner);
    }

    function getTokenPairInfo(
        uint id
    )
        external
        view
        returns (uint fromChainID, bytes fromAccount, uint toChainID, bytes toAccount)
    {
        fromChainID = mapTokenPairInfo[id].fromChainID;
        fromAccount = mapTokenPairInfo[id].fromAccount;
        toChainID = mapTokenPairInfo[id].toChainID;
        toAccount = mapTokenPairInfo[id].toAccount;
    }

    function getTokenPairInfoSlim(
        uint id
    )
        external
        view
        returns (uint fromChainID, bytes fromAccount, uint toChainID)
    {
        fromChainID = mapTokenPairInfo[id].fromChainID;
        fromAccount = mapTokenPairInfo[id].fromAccount;
        toChainID = mapTokenPairInfo[id].toChainID;
    }

    function getTokenInfo(uint id) external view returns (address addr, string name, string symbol, uint8 decimals) {
        if (mapTokenPairInfo[id].fromChainID == 0) {
            name = '';
            symbol = '';
            decimals = 0;
            addr = address(0);
        } else {
            address instance = bytesToAddress(mapTokenPairInfo[id].toAccount);
            name = IMappingToken(instance).name();
            symbol = IMappingToken(instance).symbol();
            decimals = IMappingToken(instance).decimals();
            addr = instance;
        }
    }

    function getAncestorInfo(uint id) external view returns (bytes account, string name, string symbol, uint8 decimals, uint chainId) {
        account = mapTokenPairInfo[id].aInfo.account;
        name = mapTokenPairInfo[id].aInfo.name;
        symbol = mapTokenPairInfo[id].aInfo.symbol;
        decimals = mapTokenPairInfo[id].aInfo.decimals;
        chainId = mapTokenPairInfo[id].aInfo.chainID;
    }

    function getAncestorSymbol(uint id) external view returns (string symbol, uint8 decimals) {
        symbol = mapTokenPairInfo[id].aInfo.symbol;
        decimals = mapTokenPairInfo[id].aInfo.decimals;
    }

    function getAncestorChainID(uint id) external view returns (uint chainID) {
        chainID = mapTokenPairInfo[id].aInfo.chainID;
    }

    // function getTokenPairsFullFields()
    //     external
    //     view
    //     returns (TokenPairInfoFull[] tokenPairs)
    // {
    //     tokenPairs = new TokenPairInfoFull[](totalTokenPairs);
    //     for (uint i = 0; i < totalTokenPairs; i++) {
    //         uint theId = mapTokenPairIndex[i];
    //         tokenPairs[i].aInfo = mapTokenPairInfo[theId].aInfo;
    //         tokenPairs[i].fromChainID = mapTokenPairInfo[theId].fromChainID;
    //         tokenPairs[i].fromAccount = mapTokenPairInfo[theId].fromAccount;
    //         tokenPairs[i].toChainID = mapTokenPairInfo[theId].toChainID;
    //         tokenPairs[i].toAccount = mapTokenPairInfo[theId].toAccount;
    //         tokenPairs[i].id = theId;
    //     }
    //     return tokenPairs;
    // }

    // function getTokenPairsByChainID2(uint chainID1, uint chainID2)
    //     external
    //     view
    //     returns (TokenPairInfoFull[] tokenPairs)
    // {
    //     uint cnt = 0;
    //     uint i = 0;
    //     uint theId = 0;
    //     uint[] memory id_valid = new uint[](totalTokenPairs);
    //     for (; i < totalTokenPairs; i++ ) {
    //         theId = mapTokenPairIndex[i];
    //         if ((mapTokenPairInfo[theId].fromChainID == chainID1) && (mapTokenPairInfo[theId].toChainID == chainID2) ||
    //         (mapTokenPairInfo[theId].toChainID == chainID1) && (mapTokenPairInfo[theId].fromChainID == chainID2)) {
    //             id_valid[cnt] = theId;
    //             cnt ++;
    //         }
    //     }

    //     tokenPairs = new TokenPairInfoFull[](cnt);
    //     for (i = 0; i < cnt; i++) {
    //         theId = id_valid[i];
    //         tokenPairs[i].aInfo = mapTokenPairInfo[theId].aInfo;
    //         tokenPairs[i].fromChainID = mapTokenPairInfo[theId].fromChainID;
    //         tokenPairs[i].fromAccount = mapTokenPairInfo[theId].fromAccount;
    //         tokenPairs[i].toChainID = mapTokenPairInfo[theId].toChainID;
    //         tokenPairs[i].toAccount = mapTokenPairInfo[theId].toAccount;
    //         tokenPairs[i].id = theId;
    //     }
    // }

    function getTokenPairs()
        external
        view
        returns (uint[] id, uint[] fromChainID, bytes[] fromAccount, uint[] toChainID, bytes[] toAccount,
          string[] ancestorSymbol, uint8[] ancestorDecimals, bytes[] ancestorAccount, string[] ancestorName, uint[] ancestorChainID)
    {
        uint cnt = totalTokenPairs;
        uint theId = 0;
        uint i = 0;

        id = new uint[](cnt);
        fromChainID = new uint[](cnt);
        fromAccount = new bytes[](cnt);
        toChainID = new uint[](cnt);
        toAccount = new bytes[](cnt);

        ancestorSymbol = new string[](cnt);
        ancestorDecimals = new uint8[](cnt);

        ancestorAccount = new bytes[](cnt);
        ancestorName = new string[](cnt);
        ancestorChainID = new uint[](cnt);

        i = 0;
        theId = 0;
        uint j = 0;
        for (; j < totalTokenPairs; j++) {
            theId = mapTokenPairIndex[j];
            id[i] = theId;
            fromChainID[i] = mapTokenPairInfo[theId].fromChainID;
            fromAccount[i] = mapTokenPairInfo[theId].fromAccount;
            toChainID[i] = mapTokenPairInfo[theId].toChainID;
            toAccount[i] = mapTokenPairInfo[theId].toAccount;

            ancestorSymbol[i] = mapTokenPairInfo[theId].aInfo.symbol;
            ancestorDecimals[i] = mapTokenPairInfo[theId].aInfo.decimals;

            ancestorAccount[i] = mapTokenPairInfo[theId].aInfo.account;
            ancestorName[i] = mapTokenPairInfo[theId].aInfo.name;
            ancestorChainID[i] = mapTokenPairInfo[theId].aInfo.chainID;
            i ++;
        }
    }

    function getTokenPairsByChainID(uint chainID1, uint chainID2)
        external
        view
        returns (uint[] id, uint[] fromChainID, bytes[] fromAccount, uint[] toChainID, bytes[] toAccount,
          string[] ancestorSymbol, uint8[] ancestorDecimals, bytes[] ancestorAccount, string[] ancestorName, uint[] ancestorChainID)
    {
        uint cnt = 0;
        uint i = 0;
        uint theId = 0;
        uint[] memory id_valid = new uint[](totalTokenPairs);
        for (; i < totalTokenPairs; i++ ) {
            theId = mapTokenPairIndex[i];
            if ((mapTokenPairInfo[theId].fromChainID == chainID1) && (mapTokenPairInfo[theId].toChainID == chainID2) ||
            (mapTokenPairInfo[theId].toChainID == chainID1) && (mapTokenPairInfo[theId].fromChainID == chainID2)) {
                id_valid[cnt] = theId;
                cnt ++;
            }
        }

        id = new uint[](cnt);
        fromChainID = new uint[](cnt);
        fromAccount = new bytes[](cnt);
        toChainID = new uint[](cnt);
        toAccount = new bytes[](cnt);

        ancestorSymbol = new string[](cnt);
        ancestorDecimals = new uint8[](cnt);

        ancestorAccount = new bytes[](cnt);
        ancestorName = new string[](cnt);
        ancestorChainID = new uint[](cnt);

        for (i = 0; i < cnt; i++) {
            theId = id_valid[i];

            id[i] = theId;
            fromChainID[i] = mapTokenPairInfo[theId].fromChainID;
            fromAccount[i] = mapTokenPairInfo[theId].fromAccount;
            toChainID[i] = mapTokenPairInfo[theId].toChainID;
            toAccount[i] = mapTokenPairInfo[theId].toAccount;

            ancestorSymbol[i] = mapTokenPairInfo[theId].aInfo.symbol;
            ancestorDecimals[i] = mapTokenPairInfo[theId].aInfo.decimals;
            
            ancestorAccount[i] = mapTokenPairInfo[theId].aInfo.account;
            ancestorName[i] = mapTokenPairInfo[theId].aInfo.name;
            ancestorChainID[i] = mapTokenPairInfo[theId].aInfo.chainID;
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"admin","type":"address"}],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"removeTokenPair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"from","type":"address"},{"name":"value","type":"uint256"}],"name":"burnToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getTokenPairInfoSlim","outputs":[{"name":"fromChainID","type":"uint256"},{"name":"fromAccount","type":"bytes"},{"name":"toChainID","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"}],"name":"acceptTokenOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"_newOwner","type":"address"}],"name":"transferTokenOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"_newOwner","type":"address"}],"name":"changeTokenOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"},{"components":[{"name":"account","type":"bytes"},{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"},{"name":"chainID","type":"uint256"}],"name":"aInfo","type":"tuple"},{"name":"fromChainID","type":"uint256"},{"name":"fromAccount","type":"bytes"},{"name":"toChainID","type":"uint256"},{"name":"toAccount","type":"bytes"}],"name":"addTokenPair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"chainID1","type":"uint256"},{"name":"chainID2","type":"uint256"}],"name":"getTokenPairsByChainID","outputs":[{"name":"id","type":"uint256[]"},{"name":"fromChainID","type":"uint256[]"},{"name":"fromAccount","type":"bytes[]"},{"name":"toChainID","type":"uint256[]"},{"name":"toAccount","type":"bytes[]"},{"name":"ancestorSymbol","type":"string[]"},{"name":"ancestorDecimals","type":"uint8[]"},{"name":"ancestorAccount","type":"bytes[]"},{"name":"ancestorName","type":"string[]"},{"name":"ancestorChainID","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"mapTokenPairIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"mapTokenPairInfo","outputs":[{"components":[{"name":"account","type":"bytes"},{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"},{"name":"chainID","type":"uint256"}],"name":"aInfo","type":"tuple"},{"name":"fromChainID","type":"uint256"},{"name":"fromAccount","type":"bytes"},{"name":"toChainID","type":"uint256"},{"name":"toAccount","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"mintToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"},{"components":[{"name":"account","type":"bytes"},{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"},{"name":"chainID","type":"uint256"}],"name":"aInfo","type":"tuple"},{"name":"fromChainID","type":"uint256"},{"name":"fromAccount","type":"bytes"},{"name":"toChainID","type":"uint256"},{"name":"toAccount","type":"bytes"}],"name":"updateTokenPair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"admin","type":"address"}],"name":"addAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getTokenInfo","outputs":[{"name":"addr","type":"address"},{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getAncestorInfo","outputs":[{"name":"account","type":"bytes"},{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"},{"name":"chainId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"name","type":"string"},{"name":"symbol","type":"string"}],"name":"updateToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getTokenPairInfo","outputs":[{"name":"fromChainID","type":"uint256"},{"name":"fromAccount","type":"bytes"},{"name":"toChainID","type":"uint256"},{"name":"toAccount","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokenPairs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"mapAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getAncestorSymbol","outputs":[{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokenPairs","outputs":[{"name":"id","type":"uint256[]"},{"name":"fromChainID","type":"uint256[]"},{"name":"fromAccount","type":"bytes[]"},{"name":"toChainID","type":"uint256[]"},{"name":"toAccount","type":"bytes[]"},{"name":"ancestorSymbol","type":"string[]"},{"name":"ancestorDecimals","type":"uint8[]"},{"name":"ancestorAccount","type":"bytes[]"},{"name":"ancestorName","type":"string[]"},{"name":"ancestorChainID","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"}],"name":"addToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getAncestorChainID","outputs":[{"name":"chainID","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenAddress","type":"address"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"symbol","type":"string"},{"indexed":false,"name":"decimals","type":"uint8"}],"name":"AddToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"fromChainID","type":"uint256"},{"indexed":false,"name":"fromAccount","type":"bytes"},{"indexed":false,"name":"toChainID","type":"uint256"},{"indexed":false,"name":"toAccount","type":"bytes"}],"name":"AddTokenPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"components":[{"name":"account","type":"bytes"},{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"},{"name":"chainID","type":"uint256"}],"indexed":false,"name":"aInfo","type":"tuple"},{"indexed":false,"name":"fromChainID","type":"uint256"},{"indexed":false,"name":"fromAccount","type":"bytes"},{"indexed":false,"name":"toChainID","type":"uint256"},{"indexed":false,"name":"toAccount","type":"bytes"}],"name":"UpdateTokenPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"}],"name":"RemoveTokenPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenAddress","type":"address"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"symbol","type":"string"}],"name":"UpdateToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"admin","type":"address"}],"name":"AddAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"admin","type":"address"}],"name":"RemoveAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6080604052600060055560088054600160a060020a0319163317905561501d8061002a6000396000f300608060405260043610620001855763ffffffff60e060020a6000350416631785f53c81146200018a5780632b56590514620001b15780633416794d14620001d65780633ad8873a14620001fb5780633cc281df146200023a578063408e743d146200025f57806341246e5314620002845780634f600ae814620002a95780634fb2e45d14620002ce578063563cb1ab14620002f357806358a007fb14620003305780635d2e9ead14620003645780636bec32da146200039c5780636c45e2dc14620003c15780637048027514620003e6578063715018a6146200040b57806379ba509714620004235780638c7a63ae146200043b5780638da5cb5b14620004725780639027e6f71462000499578063a6f9dae114620004d1578063af33f17e14620004f6578063b9073276146200051b578063d0ad718d1462000552578063d4ee1d90146200056a578063d51dddd71462000582578063e101d3c114620005b6578063e24e4fdb14620005eb578063f3bdd8631462000603578063f4debe1e1462000628575b600080fd5b3480156200019757600080fd5b50620001af620001a936600462003005565b6200064d565b005b348015620001be57600080fd5b50620001af620001d036600462003219565b620006e3565b348015620001e357600080fd5b50620001af620001f53660046200306d565b6200088b565b3480156200020857600080fd5b50620002206200021a36600462003219565b62000944565b604051620002319392919062003b23565b60405180910390f35b3480156200024757600080fd5b50620001af6200025936600462003005565b62000a05565b3480156200026c57600080fd5b50620001af6200027e3660046200302e565b62000a60565b3480156200029157600080fd5b50620001af620002a33660046200302e565b62000b0f565b348015620002b657600080fd5b50620001af620002c83660046200323a565b62000b86565b348015620002db57600080fd5b50620001af620002ed36600462003005565b62000d72565b3480156200030057600080fd5b50620003186200031236600462003319565b62000e39565b604051620002319a999897969594939291906200385a565b3480156200033d57600080fd5b50620003556200034f36600462003219565b62001623565b60405162000231919062003b13565b3480156200037157600080fd5b50620003896200038336600462003219565b62001635565b6040516200023195949392919062003ab6565b348015620003a957600080fd5b50620001af620003bb3660046200306d565b62001975565b348015620003ce57600080fd5b50620001af620003e03660046200323a565b620019f5565b348015620003f357600080fd5b50620001af6200040536600462003005565b62001b97565b3480156200041857600080fd5b50620001af62001c1c565b3480156200043057600080fd5b50620001af62001c6b565b3480156200044857600080fd5b50620004606200045a36600462003219565b62001cb1565b604051620002319493929190620037e7565b3480156200047f57600080fd5b506200048a62001f31565b6040516200023191906200373d565b348015620004a657600080fd5b50620004be620004b836600462003219565b62001f40565b6040516200023195949392919062003956565b348015620004de57600080fd5b50620001af620004f036600462003005565b6200215a565b3480156200050357600080fd5b50620001af62000515366004620030c1565b620021b9565b3480156200052857600080fd5b50620005406200053a36600462003219565b620022b2565b60405162000231949392919062003b58565b3480156200055f57600080fd5b506200035562002413565b3480156200057757600080fd5b506200048a62002419565b3480156200058f57600080fd5b50620005a7620005a136600462003005565b62002428565b60405162000231919062003946565b348015620005c357600080fd5b50620005db620005d536600462003219565b6200243d565b6040516200023192919062003a26565b348015620005f857600080fd5b506200031862002500565b3480156200061057600080fd5b50620001af6200062236600462003151565b62002bf2565b3480156200063557600080fd5b50620003556200064736600462003219565b62002caf565b600854600160a060020a03163314620006865760405160e560020a62461bcd0281526004016200067d9062003a92565b60405180910390fd5b600160a060020a0381166000908152600a602052604090819020805460ff19169055517f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b90620006d89083906200373d565b60405180910390a150565b600854600090600160a060020a03163314620007165760405160e560020a62461bcd0281526004016200067d9062003a92565b6000828152600660205260408120600501548391106200074d5760405160e560020a62461bcd0281526004016200067d9062003a80565b600091505b60055482101562000886576000828152600760205260409020548314156200087a57600554600019018214620007a05760055460001901600090815260076020526040808220548483529120555b600580546000199081016000908152600760209081526040808320839055845490930190935585815260069092528120908181620007df828262002cfd565b620007ef60018301600062002cfd565b620007ff60028301600062002cfd565b5060038101805460ff1916905560006004909101819055600583018190556200082d90600684019062002cfd565b600782016000905560088201600062000847919062002cfd565b505060405183907fa219112a711e6173c2e8978836823d4e86832d96c0ea2fd05ec77687b7a073ab90600090a262000886565b60019091019062000752565b505050565b336000908152600a602052604090205460ff161515620008c25760405160e560020a62461bcd0281526004016200067d9062003aa4565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152600160a060020a03841690639dc29fac906200090b90859085906004016200383b565b600060405180830381600087803b1580156200092657600080fd5b505af11580156200093b573d6000803e3d6000fd5b50505050505050565b60008181526006602081815260408084206005810154930180548251601f6002600019610100600186161502019093169290920491820185900485028101850190935280835293946060949093830182828015620009e65780601f10620009ba57610100808354040283529160200191620009e6565b820191906000526020600020905b815481529060010190602001808311620009c857829003601f168201915b5050506000968752505060066020526040909420600701549294915050565b80600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801562000a4457600080fd5b505af115801562000a59573d6000803e3d6000fd5b5050505050565b600854600160a060020a0316331462000a905760405160e560020a62461bcd0281526004016200067d9062003a92565b6040517f4fb2e45d000000000000000000000000000000000000000000000000000000008152600160a060020a03831690634fb2e45d9062000ad79084906004016200373d565b600060405180830381600087803b15801562000af257600080fd5b505af115801562000b07573d6000803e3d6000fd5b505050505050565b600854600160a060020a0316331462000b3f5760405160e560020a62461bcd0281526004016200067d9062003a92565b6040517fa6f9dae1000000000000000000000000000000000000000000000000000000008152600160a060020a0383169063a6f9dae19062000ad79084906004016200373d565b600854600160a060020a0316331462000bb65760405160e560020a62461bcd0281526004016200067d9062003a92565b60008681526006602052604090206005015486901562000bed5760405160e560020a62461bcd0281526004016200067d9062003a4a565b600087815260066020818152604090922060058101889055865162000c1b9391909201919087019062002d48565b50600087815260066020908152604090912060078101859055835162000c4a9260089092019185019062002d48565b5085516000888152600660209081526040909120825162000c719391929091019062002d48565b5060208087015160008981526006835260409020815162000c9c936001909201929091019062002d48565b50604080870151600089815260066020908152929020815162000cca93600290920192919091019062002d48565b506060860151600088815260066020908152604080832060038101805460ff191660ff9096169590951790945560808a015160049094019390935560058054835260079091529190208890555462000d2490600162002cc4565b60055560405187907f226f08da880957e11c8affd4d622bb21b058cf67830d2ee56bb82d9b7197e9a79062000d6190889088908890889062003b58565b60405180910390a250505050505050565b600854600160a060020a0316331462000da25760405160e560020a62461bcd0281526004016200067d9062003a92565b600160a060020a038116151562000dd05760405160e560020a62461bcd0281526004016200067d9062003a6e565b600854604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6060806060806060806060806060806000806000606060009350600092506000915060055460405190808252806020026020018201604052801562000e88578160200160208202803883390190505b5090505b60055483101562000f5357600760008481526020019081526020016000205491508f600660008481526020019081526020016000206005015414801562000ee357506000828152600660205260409020600701548f145b8062000f2057508f600660008481526020019081526020016000206007015414801562000f2057506000828152600660205260409020600501548f145b1562000f475781818581518110151562000f3657fe5b602090810290910101526001909301925b60019092019162000e8c565b8360405190808252806020026020018201604052801562000f7e578160200160208202803883390190505b509d508360405190808252806020026020018201604052801562000fac578160200160208202803883390190505b509c508360405190808252806020026020018201604052801562000fe557816020015b606081526020019060019003908162000fcf5790505b509b508360405190808252806020026020018201604052801562001013578160200160208202803883390190505b509a50836040519080825280602002602001820160405280156200104c57816020015b6060815260200190600190039081620010365790505b509950836040519080825280602002602001820160405280156200108557816020015b60608152602001906001900390816200106f5790505b50985083604051908082528060200260200182016040528015620010b3578160200160208202803883390190505b50975083604051908082528060200260200182016040528015620010ec57816020015b6060815260200190600190039081620010d65790505b509650836040519080825280602002602001820160405280156200112557816020015b60608152602001906001900390816200110f5790505b5095508360405190808252806020026020018201604052801562001153578160200160208202803883390190505b509450600092505b83831015620016105780838151811015156200117357fe5b906020019060200201519150818e848151811015156200118f57fe5b60209081029091018101919091526000838152600690915260409020600501548d518e9085908110620011be57fe5b60209081029190910181019190915260008381526006808352604091829020018054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015620012645780601f10620012385761010080835404028352916020019162001264565b820191906000526020600020905b8154815290600101906020018083116200124657829003601f168201915b50505050508c848151811015156200127857fe5b60209081029091018101919091526000838152600690915260409020600701548b518c9085908110620012a757fe5b6020908102919091018101919091526000838152600682526040908190206008018054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156200134e5780601f1062001322576101008083540402835291602001916200134e565b820191906000526020600020905b8154815290600101906020018083116200133057829003601f168201915b50505050508a848151811015156200136257fe5b6020908102909101810191909152600083815260068252604090819020600290810180548351601f600019610100600185161502019092169390930490810185900485028301850190935282825290929091908301828280156200140a5780601f10620013de576101008083540402835291602001916200140a565b820191906000526020600020905b815481529060010190602001808311620013ec57829003601f168201915b505050505089848151811015156200141e57fe5b6020908102909101810191909152600083815260069091526040902060030154885160ff909116908990859081106200145357fe5b60ff909216602092830290910182015260008381526006825260409081902080548251601f600260001961010060018616150201909316929092049182018590048502810185019093528083529192909190830182828015620014fa5780601f10620014ce57610100808354040283529160200191620014fa565b820191906000526020600020905b815481529060010190602001808311620014dc57829003601f168201915b505050505087848151811015156200150e57fe5b602090810291909101810191909152600083815260068252604090819020600190810180548351600293821615610100026000190190911692909204601f81018590048502830185019093528282529092909190830182828015620015b75780601f106200158b57610100808354040283529160200191620015b7565b820191906000526020600020905b8154815290600101906020018083116200159957829003601f168201915b50505050508684815181101515620015cb57fe5b60209081029091018101919091526000838152600690915260409020600401548551869085908110620015fa57fe5b602090810290910101526001909201916200115b565b505050509295989b9194979a5092959850565b60076020526000908152604090205481565b6006602090815260009182526040918290208251815460026001821615610100026000190190911604601f8101849004909302810160c090810190945260a08101838152919390928492849290918491840182828015620016da5780601f10620016ae57610100808354040283529160200191620016da565b820191906000526020600020905b815481529060010190602001808311620016bc57829003601f168201915b50505050508152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620017805780601f10620017545761010080835404028352916020019162001780565b820191906000526020600020905b8154815290600101906020018083116200176257829003601f168201915b5050509183525050600282810180546040805160206001841615610100026000190190931694909404601f81018390048302850183019091528084529381019390830182828015620018165780601f10620017ea5761010080835404028352916020019162001816565b820191906000526020600020905b815481529060010190602001808311620017f857829003601f168201915b5050509183525050600382015460ff1660208083019190915260049092015460409182015260058401546006850180548351601f60026000196001851615610100020190931692909204918201869004860281018601909452808452949591949193909190830182828015620018d05780601f10620018a457610100808354040283529160200191620018d0565b820191906000526020600020905b815481529060010190602001808311620018b257829003601f168201915b50505050600783015460088401805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815295969395939450908301828280156200196b5780601f106200193f576101008083540402835291602001916200196b565b820191906000526020600020905b8154815290600101906020018083116200194d57829003601f168201915b5050505050905085565b336000908152600a602052604090205460ff161515620019ac5760405160e560020a62461bcd0281526004016200067d9062003aa4565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038416906340c10f19906200090b90859085906004016200383b565b600854600160a060020a0316331462001a255760405160e560020a62461bcd0281526004016200067d9062003a92565b60008681526006602052604081206005015487911062001a5c5760405160e560020a62461bcd0281526004016200067d9062003a80565b85516000888152600660209081526040909120825162001a829391929091019062002d48565b5060208087015160008981526006835260409020815162001aad936001909201929091019062002d48565b50604080870151600089815260066020908152929020815162001adb93600290920192919091019062002d48565b506060860151600088815260066020818152604090922060038101805460ff191660ff909516949094179093556080890151600484015560058301889055865162001b2d939091019187019062002d48565b50600087815260066020908152604090912060078101859055835162001b5c9260089092019185019062002d48565b50867f4eb0f9fb05e08613a2eba9dc272a43421cf32f9ccab592725ab663e3238f5f55878787878760405162000d6195949392919062003ab6565b600854600160a060020a0316331462001bc75760405160e560020a62461bcd0281526004016200067d9062003a92565b600160a060020a0381166000908152600a602052604090819020805460ff19166001179055517fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba90620006d89083906200373d565b600854600160a060020a0316331462001c4c5760405160e560020a62461bcd0281526004016200067d9062003a92565b6008805473ffffffffffffffffffffffffffffffffffffffff19169055565b600954600160a060020a031633141562001caf576009546008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600081815260066020526040812060050154606090819083908190151562001cfe576040805160208181018352600080835283519182019093528281529196509450925084915062001f29565b60008681526006602090815260409182902060080180548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845262001da7939283018282801562001d9c5780601f1062001d705761010080835404028352916020019162001d9c565b820191906000526020600020905b81548152906001019060200180831162001d7e57829003601f168201915b505050505062002cf6565b905080600160a060020a03166306fdde036040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801562001de857600080fd5b505af115801562001dfd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001e279190810190620031e0565b935080600160a060020a03166395d89b416040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801562001e6857600080fd5b505af115801562001e7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ea79190810190620031e0565b925080600160a060020a031663313ce5676040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801562001ee857600080fd5b505af115801562001efd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062001f2391908101906200334e565b91508094505b509193509193565b600854600160a060020a031681565b600081815260066020908152604080832080548251601f600260001961010060018616150201909316929092049182018590048502810185019093528083526060948594859491938493909183018282801562001fe15780601f1062001fb55761010080835404028352916020019162001fe1565b820191906000526020600020905b81548152906001019060200180831162001fc357829003601f168201915b505050600089815260066020908152604091829020600190810180548451600293821615610100026000190190911692909204601f8101849004840283018401909452838252959a50949350909150830182828015620020855780601f10620020595761010080835404028352916020019162002085565b820191906000526020600020905b8154815290600101906020018083116200206757829003601f168201915b5050506000898152600660209081526040918290206002908101805484516001821615610100026000190190911692909204601f8101849004840283018401909452838252959950949350909150830182828015620021285780601f10620020fc5761010080835404028352916020019162002128565b820191906000526020600020905b8154815290600101906020018083116200210a57829003601f168201915b50505060009889525050600660205260409096206003810154600490910154959794969560ff90911694909350915050565b600854600160a060020a031633146200218a5760405160e560020a62461bcd0281526004016200067d9062003a92565b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600854600160a060020a03163314620021e95760405160e560020a62461bcd0281526004016200067d9062003a92565b6040517ff4c84d19000000000000000000000000000000000000000000000000000000008152600160a060020a0386169063f4c84d199062002236908790879087908790600401620039bf565b600060405180830381600087803b1580156200225157600080fd5b505af115801562002266573d6000803e3d6000fd5b505050507f86ead451719b8f4b763de2648808971e9bf540eed93efadafb044cd7ef5d91f48585858585604051620022a395949392919062003753565b60405180910390a15050505050565b60008181526006602081815260408084206005810154930180548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352939460609490938593929190830182828015620023595780601f106200232d5761010080835404028352916020019162002359565b820191906000526020600020905b8154815290600101906020018083116200233b57829003601f168201915b505050600088815260066020908152604091829020600781015460089091018054845160026001831615610100026000190190921691909104601f81018590048502820185019095528481529699509097509350909150830182828015620024055780601f10620023d95761010080835404028352916020019162002405565b820191906000526020600020905b815481529060010190602001808311620023e757829003601f168201915b505050505090509193509193565b60055481565b600954600160a060020a031681565b600a6020526000908152604090205460ff1681565b60008181526006602090815260408083206002908101805483516001821615610100026000190190911692909204601f81018590048502830185019093528282526060949391929091830182828015620024db5780601f10620024af57610100808354040283529160200191620024db565b820191906000526020600020905b815481529060010190602001808311620024bd57829003601f168201915b505050600095865250506006602052604090932060030154929360ff90931692915050565b60608060608060608060608060608060008060008060055493506000925060009150836040519080825280602002602001820160405280156200254d578160200160208202803883390190505b509d50836040519080825280602002602001820160405280156200257b578160200160208202803883390190505b509c5083604051908082528060200260200182016040528015620025b457816020015b60608152602001906001900390816200259e5790505b509b5083604051908082528060200260200182016040528015620025e2578160200160208202803883390190505b509a50836040519080825280602002602001820160405280156200261b57816020015b6060815260200190600190039081620026055790505b509950836040519080825280602002602001820160405280156200265457816020015b60608152602001906001900390816200263e5790505b5098508360405190808252806020026020018201604052801562002682578160200160208202803883390190505b50975083604051908082528060200260200182016040528015620026bb57816020015b6060815260200190600190039081620026a55790505b50965083604051908082528060200260200182016040528015620026f457816020015b6060815260200190600190039081620026de5790505b5095508360405190808252806020026020018201604052801562002722578160200160208202803883390190505b5094506000915060009250600090505b60055481101562002be2576000818152600760205260409020548e5190935083908f90849081106200276057fe5b60209081029091018101919091526000848152600690915260409020600501548d518e90849081106200278f57fe5b60209081029190910181019190915260008481526006808352604091829020018054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015620028355780601f10620028095761010080835404028352916020019162002835565b820191906000526020600020905b8154815290600101906020018083116200281757829003601f168201915b50505050508c838151811015156200284957fe5b60209081029091018101919091526000848152600690915260409020600701548b518c90849081106200287857fe5b6020908102919091018101919091526000848152600682526040908190206008018054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156200291f5780601f10620028f3576101008083540402835291602001916200291f565b820191906000526020600020905b8154815290600101906020018083116200290157829003601f168201915b50505050508a838151811015156200293357fe5b6020908102909101810191909152600084815260068252604090819020600290810180548351601f60001961010060018516150201909216939093049081018590048502830185019093528282529092909190830182828015620029db5780601f10620029af57610100808354040283529160200191620029db565b820191906000526020600020905b815481529060010190602001808311620029bd57829003601f168201915b50505050508983815181101515620029ef57fe5b6020908102909101810191909152600084815260069091526040902060030154885160ff9091169089908490811062002a2457fe5b60ff909216602092830290910182015260008481526006825260409081902080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352919290919083018282801562002acb5780601f1062002a9f5761010080835404028352916020019162002acb565b820191906000526020600020905b81548152906001019060200180831162002aad57829003601f168201915b5050505050878381518110151562002adf57fe5b602090810291909101810191909152600084815260068252604090819020600190810180548351600293821615610100026000190190911692909204601f8101859004850283018501909352828252909290919083018282801562002b885780601f1062002b5c5761010080835404028352916020019162002b88565b820191906000526020600020905b81548152906001019060200180831162002b6a57829003601f168201915b5050505050868381518110151562002b9c57fe5b6020908102909101810191909152600084815260069091526040902060040154855186908490811062002bcb57fe5b602090810290910101526001918201910162002732565b5050505090919293949596979899565b600854600090600160a060020a0316331462002c255760405160e560020a62461bcd0281526004016200067d9062003a92565b858585858562002c3462002dcd565b62002c44959493929190620039ea565b604051809103906000f08015801562002c61573d6000803e3d6000fd5b5090507fbb5f9980e27ec75b79e41ce422e643c6c0116fd9f599776a72f89032f70fe20581878787878760405162002c9f969594939291906200379a565b60405180910390a1505050505050565b60009081526006602052604090206004015490565b60008282018381101562002cef5760405160e560020a62461bcd0281526004016200067d9062003a5c565b9392505050565b6014015190565b50805460018160011615610100020316600290046000825580601f1062002d25575062002d45565b601f01602090049060005260206000209081019062002d45919062002dde565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062002d8b57805160ff191683800117855562002dbb565b8280016001018555821562002dbb579182015b8281111562002dbb57825182559160200191906001019062002d9e565b5062002dc992915062002dde565b5090565b6040516113878062003c5d83390190565b62002dfb91905b8082111562002dc9576000815560010162002de5565b90565b600062002cef823562003bfc565b6000601f8201831362002e1e57600080fd5b813562002e3562002e2f8262003bc9565b62003ba1565b9150808252602083016020830185838301111562002e5257600080fd5b62002e5f83828462003c13565b50505092915050565b600080601f8301841362002e7b57600080fd5b50813567ffffffffffffffff81111562002e9457600080fd5b60208301915083600182028301111562002ead57600080fd5b9250929050565b6000601f8201831362002ec657600080fd5b815162002ed762002e2f8262003bc9565b9150808252602083016020830185838301111562002ef457600080fd5b62002e5f83828462003c1f565b600060a0828403121562002f1457600080fd5b62002f2060a062003ba1565b9050813567ffffffffffffffff81111562002f3a57600080fd5b62002f488482850162002e0c565b825250602082013567ffffffffffffffff81111562002f6657600080fd5b62002f748482850162002e0c565b602083015250604082013567ffffffffffffffff81111562002f9557600080fd5b62002fa38482850162002e0c565b604083015250606062002fb98482850162002fe9565b606083015250608062002fcf8482850162002fdb565b60808301525092915050565b600062002cef823562002dfb565b600062002cef823562003c0d565b600062002cef825162003c0d565b6000602082840312156200301857600080fd5b600062003026848462002dfe565b949350505050565b600080604083850312156200304257600080fd5b600062003050858562002dfe565b9250506020620030638582860162002dfe565b9150509250929050565b6000806000606084860312156200308357600080fd5b600062003091868662002dfe565b9350506020620030a48682870162002dfe565b9250506040620030b78682870162002fdb565b9150509250925092565b600080600080600060608688031215620030da57600080fd5b6000620030e8888862002dfe565b955050602086013567ffffffffffffffff8111156200310657600080fd5b620031148882890162002e68565b9450945050604086013567ffffffffffffffff8111156200313457600080fd5b620031428882890162002e68565b92509250509295509295909350565b6000806000806000606086880312156200316a57600080fd5b853567ffffffffffffffff8111156200318257600080fd5b620031908882890162002e68565b9550955050602086013567ffffffffffffffff811115620031b057600080fd5b620031be8882890162002e68565b93509350506040620031d38882890162002fe9565b9150509295509295909350565b600060208284031215620031f357600080fd5b815167ffffffffffffffff8111156200320b57600080fd5b620030268482850162002eb4565b6000602082840312156200322c57600080fd5b600062003026848462002fdb565b60008060008060008060c087890312156200325457600080fd5b600062003262898962002fdb565b965050602087013567ffffffffffffffff8111156200328057600080fd5b6200328e89828a0162002f01565b9550506040620032a189828a0162002fdb565b945050606087013567ffffffffffffffff811115620032bf57600080fd5b620032cd89828a0162002e0c565b9350506080620032e089828a0162002fdb565b92505060a087013567ffffffffffffffff811115620032fe57600080fd5b6200330c89828a0162002e0c565b9150509295509295509295565b600080604083850312156200332d57600080fd5b60006200333b858562002fdb565b9250506020620030638582860162002fdb565b6000602082840312156200336157600080fd5b600062003026848462002ff7565b6200337a8162003bfc565b82525050565b60006200338d8262003bf8565b80845260208401935083602082028501620033a88562003bf2565b60005b84811015620033e5578383038852620033c683835162003519565b9250620033d38262003bf2565b602098909801979150600101620033ab565b50909695505050505050565b6000620033fe8262003bf8565b80845260208401935083602082028501620034198562003bf2565b60005b84811015620033e55783830388526200343783835162003519565b9250620034448262003bf2565b6020989098019791506001016200341c565b6000620034638262003bf8565b808452602084019350620034778362003bf2565b60005b82811015620034ad576200349086835162003727565b6200349b8262003bf2565b6020969096019591506001016200347a565b5093949350505050565b6000620034c48262003bf8565b808452602084019350620034d88362003bf2565b60005b82811015620034ad57620034f186835162003732565b620034fc8262003bf2565b602096909601959150600101620034db565b6200337a8162003c08565b6000620035268262003bf8565b8084526200353c81602086016020860162003c1f565b620035478162003c52565b9093016020019392505050565b60008284526020840193506200356c83858462003c13565b620035778362003c52565b9093019392505050565b600b81527f746f6b656e206578697374000000000000000000000000000000000000000000602082015260400190565b601581527f536166654d61746820616464206f766572666c6f770000000000000000000000602082015260400190565b601d81527f4e6577206f776e657220697320746865207a65726f2061646472657373000000602082015260400190565b600f81527f746f6b656e206e6f742065786973740000000000000000000000000000000000602082015260400190565b600981527f4e6f74206f776e65720000000000000000000000000000000000000000000000602082015260400190565b600981527f6e6f742061646d696e0000000000000000000000000000000000000000000000602082015260400190565b805160a080845260009190840190620036bb828262003519565b91505060208301518482036020860152620036d7828262003519565b91505060408301518482036040860152620036f3828262003519565b91505060608301516200370a606086018262003732565b5060808301516200371f608086018262003727565b509392505050565b6200337a8162002dfb565b6200337a8162003c0d565b602081016200374d82846200336f565b92915050565b606081016200376382886200336f565b81810360208301526200377881868862003554565b905081810360408301526200378f81848662003554565b979650505050505050565b60808101620037aa82896200336f565b8181036020830152620037bf81878962003554565b90508181036040830152620037d681858762003554565b90506200378f606083018462003732565b60808101620037f782876200336f565b81810360208301526200380b818662003519565b9050818103604083015262003821818562003519565b905062003832606083018462003732565b95945050505050565b604081016200384b82856200336f565b62002cef602083018462003727565b61014080825281016200386e818d62003456565b9050818103602083015262003884818c62003456565b905081810360408301526200389a818b62003380565b90508181036060830152620038b0818a62003456565b90508181036080830152620038c6818962003380565b905081810360a0830152620038dc8188620033f1565b905081810360c0830152620038f28187620034b7565b905081810360e083015262003908818662003380565b90508181036101008301526200391f8185620033f1565b905081810361012083015262003936818462003456565b9c9b505050505050505050505050565b602081016200374d82846200350e565b60a0808252810162003969818862003519565b905081810360208301526200397f818762003519565b9050818103604083015262003995818662003519565b9050620039a6606083018562003732565b620039b5608083018462003727565b9695505050505050565b60408082528101620039d381868862003554565b90508181036020830152620039b581848662003554565b60608082528101620039fe81878962003554565b9050818103602083015262003a1581858762003554565b9050620039b5604083018462003732565b6040808252810162003a39818562003519565b905062002cef602083018462003732565b602080825281016200374d8162003581565b602080825281016200374d81620035b1565b602080825281016200374d81620035e1565b602080825281016200374d8162003611565b602080825281016200374d8162003641565b602080825281016200374d8162003671565b60a0808252810162003ac98188620036a1565b905062003ada602083018762003727565b818103604083015262003aee818662003519565b905062003aff606083018562003727565b81810360808301526200378f818462003519565b602081016200374d828462003727565b6060810162003b33828662003727565b818103602083015262003b47818562003519565b905062003026604083018462003727565b6080810162003b68828762003727565b818103602083015262003b7c818662003519565b905062003b8d604083018562003727565b8181036060830152620039b5818462003519565b60405181810167ffffffffffffffff8111828210171562003bc157600080fd5b604052919050565b600067ffffffffffffffff82111562003be157600080fd5b506020601f91909101601f19160190565b60200190565b5190565b600160a060020a031690565b151590565b60ff1690565b82818337506000910152565b60005b8381101562003c3c57818101518382015260200162003c22565b8381111562003c4c576000848401525b50505050565b601f01601f191690560060806040523480156200001157600080fd5b5060405162001387380380620013878339810180604052620000379190810190620001a8565b60068054600160a060020a0319163317905582516200005e90600090602086019062000092565b5081516200007490600190602085019062000092565b506002805460ff191660ff9290921691909117905550620002b39050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000d557805160ff191683800117855562000105565b8280016001018555821562000105579182015b8281111562000105578251825591602001919060010190620000e8565b506200011392915062000117565b5090565b6200013491905b808211156200011357600081556001016200011e565b90565b6000601f820183136200014957600080fd5b8151620001606200015a8262000252565b6200022b565b915080825260208301602083018583830111156200017d57600080fd5b6200018a83828462000280565b50505092915050565b6000620001a182516200027a565b9392505050565b600080600060608486031215620001be57600080fd5b83516001604060020a03811115620001d557600080fd5b620001e38682870162000137565b93505060208401516001604060020a038111156200020057600080fd5b6200020e8682870162000137565b9250506040620002218682870162000193565b9150509250925092565b6040518181016001604060020a03811182821017156200024a57600080fd5b604052919050565b60006001604060020a038211156200026957600080fd5b506020601f91909101601f19160190565b60ff1690565b60005b838110156200029d57818101518382015260200162000283565b83811115620002ad576000848401525b50505050565b6110c480620002c36000396000f3006080604052600436106100fb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610100578063095ea7b31461012b57806318160ddd1461015857806323b872dd1461017a578063313ce5671461019a57806340c10f19146101bc5780634fb2e45d146101de57806370a08231146101fe578063715018a61461021e57806379ba5097146102335780638da5cb5b1461024857806395d89b411461026a5780639dc29fac1461027f578063a6f9dae11461029f578063a9059cbb146102bf578063d4ee1d90146102df578063dd62ed3e146102f4578063f4c84d1914610314575b600080fd5b34801561010c57600080fd5b50610115610334565b6040516101229190610f78565b60405180910390f35b34801561013757600080fd5b5061014b610146366004610d0d565b6103c2565b6040516101229190610f6a565b34801561016457600080fd5b5061016d6104ae565b6040516101229190610ff9565b34801561018657600080fd5b5061014b610195366004610cc0565b6104b4565b3480156101a657600080fd5b506101af6105d6565b6040516101229190611007565b3480156101c857600080fd5b506101dc6101d7366004610d0d565b6105df565b005b3480156101ea57600080fd5b506101dc6101f9366004610c60565b6106c1565b34801561020a57600080fd5b5061016d610219366004610c60565b610782565b34801561022a57600080fd5b506101dc61079d565b34801561023f57600080fd5b506101dc6107e9565b34801561025457600080fd5b5061025d61082e565b6040516101229190610f5c565b34801561027657600080fd5b5061011561083d565b34801561028b57600080fd5b506101dc61029a366004610d0d565b610897565b3480156102ab57600080fd5b506101dc6102ba366004610c60565b61096c565b3480156102cb57600080fd5b5061014b6102da366004610d0d565b6109c8565b3480156102eb57600080fd5b5061025d610a7f565b34801561030057600080fd5b5061016d61030f366004610c86565b610a8e565b34801561032057600080fd5b506101dc61032f366004610d3d565b610abb565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103ba5780601f1061038f576101008083540402835291602001916103ba565b820191906000526020600020905b81548152906001019060200180831161039d57829003601f168201915b505050505081565b6000604060443610156103f35760405160e560020a62461bcd0281526004016103ea90610f99565b60405180910390fd5b8215806104215750336000908152600460209081526040808320600160a060020a0388168452909152902054155b15156104425760405160e560020a62461bcd0281526004016103ea90610f89565b336000818152600460209081526040808320600160a060020a03891680855292529182902086905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061049c908790610ff9565b60405180910390a35060019392505050565b60055481565b6000606060643610156104dc5760405160e560020a62461bcd0281526004016103ea90610f99565b600160a060020a038416600090815260036020526040902054610505908463ffffffff610b0816565b600160a060020a03808616600090815260036020526040808220939093559087168152205461053a908463ffffffff610b3716565b600160a060020a0386166000908152600360209081526040808320939093556004815282822033835290522054610577908463ffffffff610b3716565b600160a060020a03808716600081815260046020908152604080832033845290915290819020939093559151908616919060008051602061106b833981519152906105c3908790610ff9565b60405180910390a3506001949350505050565b60025460ff1681565b600654600160a060020a0316331461060c5760405160e560020a62461bcd0281526004016103ea90610fe9565b80600081116106305760405160e560020a62461bcd0281526004016103ea90610fc9565b600160a060020a038316600090815260036020526040902054610659908363ffffffff610b0816565b600160a060020a038416600090815260036020526040902055600554610685908363ffffffff610b0816565b600555604051600160a060020a0384169060009060008051602061106b833981519152906106b4908690610ff9565b60405180910390a3505050565b600654600160a060020a031633146106ee5760405160e560020a62461bcd0281526004016103ea90610fe9565b600160a060020a03811615156107195760405160e560020a62461bcd0281526004016103ea90610fb9565b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a031660009081526003602052604090205490565b600654600160a060020a031633146107ca5760405160e560020a62461bcd0281526004016103ea90610fe9565b6006805473ffffffffffffffffffffffffffffffffffffffff19169055565b600754600160a060020a031633141561082c576007546006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600654600160a060020a031681565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103ba5780601f1061038f576101008083540402835291602001916103ba565b600654600160a060020a031633146108c45760405160e560020a62461bcd0281526004016103ea90610fe9565b80600081116108e85760405160e560020a62461bcd0281526004016103ea90610fc9565b600160a060020a038316600090815260036020526040902054610911908363ffffffff610b3716565b600160a060020a03841660009081526003602052604090205560055461093d908363ffffffff610b3716565b600555604051600090600160a060020a0385169060008051602061106b833981519152906106b4908690610ff9565b600654600160a060020a031633146109995760405160e560020a62461bcd0281526004016103ea90610fe9565b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000604060443610156109f05760405160e560020a62461bcd0281526004016103ea90610f99565b33600090815260036020526040902054610a10908463ffffffff610b3716565b3360009081526003602052604080822092909255600160a060020a03861681522054610a42908463ffffffff610b0816565b600160a060020a03851660008181526003602052604090819020929092559051339060008051602061106b8339815191529061049c908790610ff9565b600754600160a060020a031681565b600160a060020a038083166000908152600460209081526040808320938516835292905220545b92915050565b600654600160a060020a03163314610ae85760405160e560020a62461bcd0281526004016103ea90610fe9565b610af460008585610b64565b50610b0160018383610b64565b5050505050565b600082820183811015610b305760405160e560020a62461bcd0281526004016103ea90610fa9565b9392505050565b60008083831115610b5d5760405160e560020a62461bcd0281526004016103ea90610fd9565b5050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610ba55782800160ff19823516178555610bd2565b82800160010185558215610bd2579182015b82811115610bd2578235825591602001919060010190610bb7565b50610bde929150610be2565b5090565b610bfc91905b80821115610bde5760008155600101610be8565b90565b6000610b308235611019565b600080601f83018413610c1d57600080fd5b50813567ffffffffffffffff811115610c3557600080fd5b602083019150836001820283011115610c4d57600080fd5b9250929050565b6000610b308235610bfc565b600060208284031215610c7257600080fd5b6000610c7e8484610bff565b949350505050565b60008060408385031215610c9957600080fd5b6000610ca58585610bff565b9250506020610cb685828601610bff565b9150509250929050565b600080600060608486031215610cd557600080fd5b6000610ce18686610bff565b9350506020610cf286828701610bff565b9250506040610d0386828701610c54565b9150509250925092565b60008060408385031215610d2057600080fd5b6000610d2c8585610bff565b9250506020610cb685828601610c54565b60008060008060408587031215610d5357600080fd5b843567ffffffffffffffff811115610d6a57600080fd5b610d7687828801610c0b565b9450945050602085013567ffffffffffffffff811115610d9557600080fd5b610da187828801610c0b565b95989497509550505050565b610db681611019565b82525050565b610db681611025565b6000610dd082611015565b808452610de4816020860160208601611030565b610ded81611060565b9093016020019392505050565b600d81527f4e6f74207065726d697474656400000000000000000000000000000000000000602082015260400190565b601981527f5061796c6f61642073697a6520697320696e636f727265637400000000000000602082015260400190565b601581527f536166654d61746820616464206f766572666c6f770000000000000000000000602082015260400190565b601d81527f4e6577206f776e657220697320746865207a65726f2061646472657373000000602082015260400190565b600d81527f56616c7565206973206e756c6c00000000000000000000000000000000000000602082015260400190565b601281527f536166654d617468207375622062203e20610000000000000000000000000000602082015260400190565b600981527f4e6f74206f776e65720000000000000000000000000000000000000000000000602082015260400190565b610db681610bfc565b610db68161102a565b60208101610ab58284610dad565b60208101610ab58284610dbc565b60208082528101610b308184610dc5565b60208082528101610ab581610dfa565b60208082528101610ab581610e2a565b60208082528101610ab581610e5a565b60208082528101610ab581610e8a565b60208082528101610ab581610eba565b60208082528101610ab581610eea565b60208082528101610ab581610f1a565b60208101610ab58284610f4a565b60208101610ab58284610f53565b5190565b600160a060020a031690565b151590565b60ff1690565b60005b8381101561104b578181015183820152602001611033565b8381111561105a576000848401525b50505050565b601f01601f1916905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a72305820200f094896d743473c3a14cf1f5ad6d629504261df7d04b19b7e0a590a25714a6c6578706572696d656e74616cf50037a265627a7a723058205928ff7306265bf144556be7dbf86563ab3ba908580420d043fa8791bb2da5536c6578706572696d656e74616cf50037

Deployed Bytecode

0x608060405260043610620001855763ffffffff60e060020a6000350416631785f53c81146200018a5780632b56590514620001b15780633416794d14620001d65780633ad8873a14620001fb5780633cc281df146200023a578063408e743d146200025f57806341246e5314620002845780634f600ae814620002a95780634fb2e45d14620002ce578063563cb1ab14620002f357806358a007fb14620003305780635d2e9ead14620003645780636bec32da146200039c5780636c45e2dc14620003c15780637048027514620003e6578063715018a6146200040b57806379ba509714620004235780638c7a63ae146200043b5780638da5cb5b14620004725780639027e6f71462000499578063a6f9dae114620004d1578063af33f17e14620004f6578063b9073276146200051b578063d0ad718d1462000552578063d4ee1d90146200056a578063d51dddd71462000582578063e101d3c114620005b6578063e24e4fdb14620005eb578063f3bdd8631462000603578063f4debe1e1462000628575b600080fd5b3480156200019757600080fd5b50620001af620001a936600462003005565b6200064d565b005b348015620001be57600080fd5b50620001af620001d036600462003219565b620006e3565b348015620001e357600080fd5b50620001af620001f53660046200306d565b6200088b565b3480156200020857600080fd5b50620002206200021a36600462003219565b62000944565b604051620002319392919062003b23565b60405180910390f35b3480156200024757600080fd5b50620001af6200025936600462003005565b62000a05565b3480156200026c57600080fd5b50620001af6200027e3660046200302e565b62000a60565b3480156200029157600080fd5b50620001af620002a33660046200302e565b62000b0f565b348015620002b657600080fd5b50620001af620002c83660046200323a565b62000b86565b348015620002db57600080fd5b50620001af620002ed36600462003005565b62000d72565b3480156200030057600080fd5b50620003186200031236600462003319565b62000e39565b604051620002319a999897969594939291906200385a565b3480156200033d57600080fd5b50620003556200034f36600462003219565b62001623565b60405162000231919062003b13565b3480156200037157600080fd5b50620003896200038336600462003219565b62001635565b6040516200023195949392919062003ab6565b348015620003a957600080fd5b50620001af620003bb3660046200306d565b62001975565b348015620003ce57600080fd5b50620001af620003e03660046200323a565b620019f5565b348015620003f357600080fd5b50620001af6200040536600462003005565b62001b97565b3480156200041857600080fd5b50620001af62001c1c565b3480156200043057600080fd5b50620001af62001c6b565b3480156200044857600080fd5b50620004606200045a36600462003219565b62001cb1565b604051620002319493929190620037e7565b3480156200047f57600080fd5b506200048a62001f31565b6040516200023191906200373d565b348015620004a657600080fd5b50620004be620004b836600462003219565b62001f40565b6040516200023195949392919062003956565b348015620004de57600080fd5b50620001af620004f036600462003005565b6200215a565b3480156200050357600080fd5b50620001af62000515366004620030c1565b620021b9565b3480156200052857600080fd5b50620005406200053a36600462003219565b620022b2565b60405162000231949392919062003b58565b3480156200055f57600080fd5b506200035562002413565b3480156200057757600080fd5b506200048a62002419565b3480156200058f57600080fd5b50620005a7620005a136600462003005565b62002428565b60405162000231919062003946565b348015620005c357600080fd5b50620005db620005d536600462003219565b6200243d565b6040516200023192919062003a26565b348015620005f857600080fd5b506200031862002500565b3480156200061057600080fd5b50620001af6200062236600462003151565b62002bf2565b3480156200063557600080fd5b50620003556200064736600462003219565b62002caf565b600854600160a060020a03163314620006865760405160e560020a62461bcd0281526004016200067d9062003a92565b60405180910390fd5b600160a060020a0381166000908152600a602052604090819020805460ff19169055517f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b90620006d89083906200373d565b60405180910390a150565b600854600090600160a060020a03163314620007165760405160e560020a62461bcd0281526004016200067d9062003a92565b6000828152600660205260408120600501548391106200074d5760405160e560020a62461bcd0281526004016200067d9062003a80565b600091505b60055482101562000886576000828152600760205260409020548314156200087a57600554600019018214620007a05760055460001901600090815260076020526040808220548483529120555b600580546000199081016000908152600760209081526040808320839055845490930190935585815260069092528120908181620007df828262002cfd565b620007ef60018301600062002cfd565b620007ff60028301600062002cfd565b5060038101805460ff1916905560006004909101819055600583018190556200082d90600684019062002cfd565b600782016000905560088201600062000847919062002cfd565b505060405183907fa219112a711e6173c2e8978836823d4e86832d96c0ea2fd05ec77687b7a073ab90600090a262000886565b60019091019062000752565b505050565b336000908152600a602052604090205460ff161515620008c25760405160e560020a62461bcd0281526004016200067d9062003aa4565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152600160a060020a03841690639dc29fac906200090b90859085906004016200383b565b600060405180830381600087803b1580156200092657600080fd5b505af11580156200093b573d6000803e3d6000fd5b50505050505050565b60008181526006602081815260408084206005810154930180548251601f6002600019610100600186161502019093169290920491820185900485028101850190935280835293946060949093830182828015620009e65780601f10620009ba57610100808354040283529160200191620009e6565b820191906000526020600020905b815481529060010190602001808311620009c857829003601f168201915b5050506000968752505060066020526040909420600701549294915050565b80600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801562000a4457600080fd5b505af115801562000a59573d6000803e3d6000fd5b5050505050565b600854600160a060020a0316331462000a905760405160e560020a62461bcd0281526004016200067d9062003a92565b6040517f4fb2e45d000000000000000000000000000000000000000000000000000000008152600160a060020a03831690634fb2e45d9062000ad79084906004016200373d565b600060405180830381600087803b15801562000af257600080fd5b505af115801562000b07573d6000803e3d6000fd5b505050505050565b600854600160a060020a0316331462000b3f5760405160e560020a62461bcd0281526004016200067d9062003a92565b6040517fa6f9dae1000000000000000000000000000000000000000000000000000000008152600160a060020a0383169063a6f9dae19062000ad79084906004016200373d565b600854600160a060020a0316331462000bb65760405160e560020a62461bcd0281526004016200067d9062003a92565b60008681526006602052604090206005015486901562000bed5760405160e560020a62461bcd0281526004016200067d9062003a4a565b600087815260066020818152604090922060058101889055865162000c1b9391909201919087019062002d48565b50600087815260066020908152604090912060078101859055835162000c4a9260089092019185019062002d48565b5085516000888152600660209081526040909120825162000c719391929091019062002d48565b5060208087015160008981526006835260409020815162000c9c936001909201929091019062002d48565b50604080870151600089815260066020908152929020815162000cca93600290920192919091019062002d48565b506060860151600088815260066020908152604080832060038101805460ff191660ff9096169590951790945560808a015160049094019390935560058054835260079091529190208890555462000d2490600162002cc4565b60055560405187907f226f08da880957e11c8affd4d622bb21b058cf67830d2ee56bb82d9b7197e9a79062000d6190889088908890889062003b58565b60405180910390a250505050505050565b600854600160a060020a0316331462000da25760405160e560020a62461bcd0281526004016200067d9062003a92565b600160a060020a038116151562000dd05760405160e560020a62461bcd0281526004016200067d9062003a6e565b600854604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6060806060806060806060806060806000806000606060009350600092506000915060055460405190808252806020026020018201604052801562000e88578160200160208202803883390190505b5090505b60055483101562000f5357600760008481526020019081526020016000205491508f600660008481526020019081526020016000206005015414801562000ee357506000828152600660205260409020600701548f145b8062000f2057508f600660008481526020019081526020016000206007015414801562000f2057506000828152600660205260409020600501548f145b1562000f475781818581518110151562000f3657fe5b602090810290910101526001909301925b60019092019162000e8c565b8360405190808252806020026020018201604052801562000f7e578160200160208202803883390190505b509d508360405190808252806020026020018201604052801562000fac578160200160208202803883390190505b509c508360405190808252806020026020018201604052801562000fe557816020015b606081526020019060019003908162000fcf5790505b509b508360405190808252806020026020018201604052801562001013578160200160208202803883390190505b509a50836040519080825280602002602001820160405280156200104c57816020015b6060815260200190600190039081620010365790505b509950836040519080825280602002602001820160405280156200108557816020015b60608152602001906001900390816200106f5790505b50985083604051908082528060200260200182016040528015620010b3578160200160208202803883390190505b50975083604051908082528060200260200182016040528015620010ec57816020015b6060815260200190600190039081620010d65790505b509650836040519080825280602002602001820160405280156200112557816020015b60608152602001906001900390816200110f5790505b5095508360405190808252806020026020018201604052801562001153578160200160208202803883390190505b509450600092505b83831015620016105780838151811015156200117357fe5b906020019060200201519150818e848151811015156200118f57fe5b60209081029091018101919091526000838152600690915260409020600501548d518e9085908110620011be57fe5b60209081029190910181019190915260008381526006808352604091829020018054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015620012645780601f10620012385761010080835404028352916020019162001264565b820191906000526020600020905b8154815290600101906020018083116200124657829003601f168201915b50505050508c848151811015156200127857fe5b60209081029091018101919091526000838152600690915260409020600701548b518c9085908110620012a757fe5b6020908102919091018101919091526000838152600682526040908190206008018054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156200134e5780601f1062001322576101008083540402835291602001916200134e565b820191906000526020600020905b8154815290600101906020018083116200133057829003601f168201915b50505050508a848151811015156200136257fe5b6020908102909101810191909152600083815260068252604090819020600290810180548351601f600019610100600185161502019092169390930490810185900485028301850190935282825290929091908301828280156200140a5780601f10620013de576101008083540402835291602001916200140a565b820191906000526020600020905b815481529060010190602001808311620013ec57829003601f168201915b505050505089848151811015156200141e57fe5b6020908102909101810191909152600083815260069091526040902060030154885160ff909116908990859081106200145357fe5b60ff909216602092830290910182015260008381526006825260409081902080548251601f600260001961010060018616150201909316929092049182018590048502810185019093528083529192909190830182828015620014fa5780601f10620014ce57610100808354040283529160200191620014fa565b820191906000526020600020905b815481529060010190602001808311620014dc57829003601f168201915b505050505087848151811015156200150e57fe5b602090810291909101810191909152600083815260068252604090819020600190810180548351600293821615610100026000190190911692909204601f81018590048502830185019093528282529092909190830182828015620015b75780601f106200158b57610100808354040283529160200191620015b7565b820191906000526020600020905b8154815290600101906020018083116200159957829003601f168201915b50505050508684815181101515620015cb57fe5b60209081029091018101919091526000838152600690915260409020600401548551869085908110620015fa57fe5b602090810290910101526001909201916200115b565b505050509295989b9194979a5092959850565b60076020526000908152604090205481565b6006602090815260009182526040918290208251815460026001821615610100026000190190911604601f8101849004909302810160c090810190945260a08101838152919390928492849290918491840182828015620016da5780601f10620016ae57610100808354040283529160200191620016da565b820191906000526020600020905b815481529060010190602001808311620016bc57829003601f168201915b50505050508152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620017805780601f10620017545761010080835404028352916020019162001780565b820191906000526020600020905b8154815290600101906020018083116200176257829003601f168201915b5050509183525050600282810180546040805160206001841615610100026000190190931694909404601f81018390048302850183019091528084529381019390830182828015620018165780601f10620017ea5761010080835404028352916020019162001816565b820191906000526020600020905b815481529060010190602001808311620017f857829003601f168201915b5050509183525050600382015460ff1660208083019190915260049092015460409182015260058401546006850180548351601f60026000196001851615610100020190931692909204918201869004860281018601909452808452949591949193909190830182828015620018d05780601f10620018a457610100808354040283529160200191620018d0565b820191906000526020600020905b815481529060010190602001808311620018b257829003601f168201915b50505050600783015460088401805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815295969395939450908301828280156200196b5780601f106200193f576101008083540402835291602001916200196b565b820191906000526020600020905b8154815290600101906020018083116200194d57829003601f168201915b5050505050905085565b336000908152600a602052604090205460ff161515620019ac5760405160e560020a62461bcd0281526004016200067d9062003aa4565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038416906340c10f19906200090b90859085906004016200383b565b600854600160a060020a0316331462001a255760405160e560020a62461bcd0281526004016200067d9062003a92565b60008681526006602052604081206005015487911062001a5c5760405160e560020a62461bcd0281526004016200067d9062003a80565b85516000888152600660209081526040909120825162001a829391929091019062002d48565b5060208087015160008981526006835260409020815162001aad936001909201929091019062002d48565b50604080870151600089815260066020908152929020815162001adb93600290920192919091019062002d48565b506060860151600088815260066020818152604090922060038101805460ff191660ff909516949094179093556080890151600484015560058301889055865162001b2d939091019187019062002d48565b50600087815260066020908152604090912060078101859055835162001b5c9260089092019185019062002d48565b50867f4eb0f9fb05e08613a2eba9dc272a43421cf32f9ccab592725ab663e3238f5f55878787878760405162000d6195949392919062003ab6565b600854600160a060020a0316331462001bc75760405160e560020a62461bcd0281526004016200067d9062003a92565b600160a060020a0381166000908152600a602052604090819020805460ff19166001179055517fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba90620006d89083906200373d565b600854600160a060020a0316331462001c4c5760405160e560020a62461bcd0281526004016200067d9062003a92565b6008805473ffffffffffffffffffffffffffffffffffffffff19169055565b600954600160a060020a031633141562001caf576009546008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600081815260066020526040812060050154606090819083908190151562001cfe576040805160208181018352600080835283519182019093528281529196509450925084915062001f29565b60008681526006602090815260409182902060080180548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845262001da7939283018282801562001d9c5780601f1062001d705761010080835404028352916020019162001d9c565b820191906000526020600020905b81548152906001019060200180831162001d7e57829003601f168201915b505050505062002cf6565b905080600160a060020a03166306fdde036040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801562001de857600080fd5b505af115801562001dfd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001e279190810190620031e0565b935080600160a060020a03166395d89b416040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801562001e6857600080fd5b505af115801562001e7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ea79190810190620031e0565b925080600160a060020a031663313ce5676040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801562001ee857600080fd5b505af115801562001efd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062001f2391908101906200334e565b91508094505b509193509193565b600854600160a060020a031681565b600081815260066020908152604080832080548251601f600260001961010060018616150201909316929092049182018590048502810185019093528083526060948594859491938493909183018282801562001fe15780601f1062001fb55761010080835404028352916020019162001fe1565b820191906000526020600020905b81548152906001019060200180831162001fc357829003601f168201915b505050600089815260066020908152604091829020600190810180548451600293821615610100026000190190911692909204601f8101849004840283018401909452838252959a50949350909150830182828015620020855780601f10620020595761010080835404028352916020019162002085565b820191906000526020600020905b8154815290600101906020018083116200206757829003601f168201915b5050506000898152600660209081526040918290206002908101805484516001821615610100026000190190911692909204601f8101849004840283018401909452838252959950949350909150830182828015620021285780601f10620020fc5761010080835404028352916020019162002128565b820191906000526020600020905b8154815290600101906020018083116200210a57829003601f168201915b50505060009889525050600660205260409096206003810154600490910154959794969560ff90911694909350915050565b600854600160a060020a031633146200218a5760405160e560020a62461bcd0281526004016200067d9062003a92565b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600854600160a060020a03163314620021e95760405160e560020a62461bcd0281526004016200067d9062003a92565b6040517ff4c84d19000000000000000000000000000000000000000000000000000000008152600160a060020a0386169063f4c84d199062002236908790879087908790600401620039bf565b600060405180830381600087803b1580156200225157600080fd5b505af115801562002266573d6000803e3d6000fd5b505050507f86ead451719b8f4b763de2648808971e9bf540eed93efadafb044cd7ef5d91f48585858585604051620022a395949392919062003753565b60405180910390a15050505050565b60008181526006602081815260408084206005810154930180548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352939460609490938593929190830182828015620023595780601f106200232d5761010080835404028352916020019162002359565b820191906000526020600020905b8154815290600101906020018083116200233b57829003601f168201915b505050600088815260066020908152604091829020600781015460089091018054845160026001831615610100026000190190921691909104601f81018590048502820185019095528481529699509097509350909150830182828015620024055780601f10620023d95761010080835404028352916020019162002405565b820191906000526020600020905b815481529060010190602001808311620023e757829003601f168201915b505050505090509193509193565b60055481565b600954600160a060020a031681565b600a6020526000908152604090205460ff1681565b60008181526006602090815260408083206002908101805483516001821615610100026000190190911692909204601f81018590048502830185019093528282526060949391929091830182828015620024db5780601f10620024af57610100808354040283529160200191620024db565b820191906000526020600020905b815481529060010190602001808311620024bd57829003601f168201915b505050600095865250506006602052604090932060030154929360ff90931692915050565b60608060608060608060608060608060008060008060055493506000925060009150836040519080825280602002602001820160405280156200254d578160200160208202803883390190505b509d50836040519080825280602002602001820160405280156200257b578160200160208202803883390190505b509c5083604051908082528060200260200182016040528015620025b457816020015b60608152602001906001900390816200259e5790505b509b5083604051908082528060200260200182016040528015620025e2578160200160208202803883390190505b509a50836040519080825280602002602001820160405280156200261b57816020015b6060815260200190600190039081620026055790505b509950836040519080825280602002602001820160405280156200265457816020015b60608152602001906001900390816200263e5790505b5098508360405190808252806020026020018201604052801562002682578160200160208202803883390190505b50975083604051908082528060200260200182016040528015620026bb57816020015b6060815260200190600190039081620026a55790505b50965083604051908082528060200260200182016040528015620026f457816020015b6060815260200190600190039081620026de5790505b5095508360405190808252806020026020018201604052801562002722578160200160208202803883390190505b5094506000915060009250600090505b60055481101562002be2576000818152600760205260409020548e5190935083908f90849081106200276057fe5b60209081029091018101919091526000848152600690915260409020600501548d518e90849081106200278f57fe5b60209081029190910181019190915260008481526006808352604091829020018054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015620028355780601f10620028095761010080835404028352916020019162002835565b820191906000526020600020905b8154815290600101906020018083116200281757829003601f168201915b50505050508c838151811015156200284957fe5b60209081029091018101919091526000848152600690915260409020600701548b518c90849081106200287857fe5b6020908102919091018101919091526000848152600682526040908190206008018054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156200291f5780601f10620028f3576101008083540402835291602001916200291f565b820191906000526020600020905b8154815290600101906020018083116200290157829003601f168201915b50505050508a838151811015156200293357fe5b6020908102909101810191909152600084815260068252604090819020600290810180548351601f60001961010060018516150201909216939093049081018590048502830185019093528282529092909190830182828015620029db5780601f10620029af57610100808354040283529160200191620029db565b820191906000526020600020905b815481529060010190602001808311620029bd57829003601f168201915b50505050508983815181101515620029ef57fe5b6020908102909101810191909152600084815260069091526040902060030154885160ff9091169089908490811062002a2457fe5b60ff909216602092830290910182015260008481526006825260409081902080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352919290919083018282801562002acb5780601f1062002a9f5761010080835404028352916020019162002acb565b820191906000526020600020905b81548152906001019060200180831162002aad57829003601f168201915b5050505050878381518110151562002adf57fe5b602090810291909101810191909152600084815260068252604090819020600190810180548351600293821615610100026000190190911692909204601f8101859004850283018501909352828252909290919083018282801562002b885780601f1062002b5c5761010080835404028352916020019162002b88565b820191906000526020600020905b81548152906001019060200180831162002b6a57829003601f168201915b5050505050868381518110151562002b9c57fe5b6020908102909101810191909152600084815260069091526040902060040154855186908490811062002bcb57fe5b602090810290910101526001918201910162002732565b5050505090919293949596979899565b600854600090600160a060020a0316331462002c255760405160e560020a62461bcd0281526004016200067d9062003a92565b858585858562002c3462002dcd565b62002c44959493929190620039ea565b604051809103906000f08015801562002c61573d6000803e3d6000fd5b5090507fbb5f9980e27ec75b79e41ce422e643c6c0116fd9f599776a72f89032f70fe20581878787878760405162002c9f969594939291906200379a565b60405180910390a1505050505050565b60009081526006602052604090206004015490565b60008282018381101562002cef5760405160e560020a62461bcd0281526004016200067d9062003a5c565b9392505050565b6014015190565b50805460018160011615610100020316600290046000825580601f1062002d25575062002d45565b601f01602090049060005260206000209081019062002d45919062002dde565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062002d8b57805160ff191683800117855562002dbb565b8280016001018555821562002dbb579182015b8281111562002dbb57825182559160200191906001019062002d9e565b5062002dc992915062002dde565b5090565b6040516113878062003c5d83390190565b62002dfb91905b8082111562002dc9576000815560010162002de5565b90565b600062002cef823562003bfc565b6000601f8201831362002e1e57600080fd5b813562002e3562002e2f8262003bc9565b62003ba1565b9150808252602083016020830185838301111562002e5257600080fd5b62002e5f83828462003c13565b50505092915050565b600080601f8301841362002e7b57600080fd5b50813567ffffffffffffffff81111562002e9457600080fd5b60208301915083600182028301111562002ead57600080fd5b9250929050565b6000601f8201831362002ec657600080fd5b815162002ed762002e2f8262003bc9565b9150808252602083016020830185838301111562002ef457600080fd5b62002e5f83828462003c1f565b600060a0828403121562002f1457600080fd5b62002f2060a062003ba1565b9050813567ffffffffffffffff81111562002f3a57600080fd5b62002f488482850162002e0c565b825250602082013567ffffffffffffffff81111562002f6657600080fd5b62002f748482850162002e0c565b602083015250604082013567ffffffffffffffff81111562002f9557600080fd5b62002fa38482850162002e0c565b604083015250606062002fb98482850162002fe9565b606083015250608062002fcf8482850162002fdb565b60808301525092915050565b600062002cef823562002dfb565b600062002cef823562003c0d565b600062002cef825162003c0d565b6000602082840312156200301857600080fd5b600062003026848462002dfe565b949350505050565b600080604083850312156200304257600080fd5b600062003050858562002dfe565b9250506020620030638582860162002dfe565b9150509250929050565b6000806000606084860312156200308357600080fd5b600062003091868662002dfe565b9350506020620030a48682870162002dfe565b9250506040620030b78682870162002fdb565b9150509250925092565b600080600080600060608688031215620030da57600080fd5b6000620030e8888862002dfe565b955050602086013567ffffffffffffffff8111156200310657600080fd5b620031148882890162002e68565b9450945050604086013567ffffffffffffffff8111156200313457600080fd5b620031428882890162002e68565b92509250509295509295909350565b6000806000806000606086880312156200316a57600080fd5b853567ffffffffffffffff8111156200318257600080fd5b620031908882890162002e68565b9550955050602086013567ffffffffffffffff811115620031b057600080fd5b620031be8882890162002e68565b93509350506040620031d38882890162002fe9565b9150509295509295909350565b600060208284031215620031f357600080fd5b815167ffffffffffffffff8111156200320b57600080fd5b620030268482850162002eb4565b6000602082840312156200322c57600080fd5b600062003026848462002fdb565b60008060008060008060c087890312156200325457600080fd5b600062003262898962002fdb565b965050602087013567ffffffffffffffff8111156200328057600080fd5b6200328e89828a0162002f01565b9550506040620032a189828a0162002fdb565b945050606087013567ffffffffffffffff811115620032bf57600080fd5b620032cd89828a0162002e0c565b9350506080620032e089828a0162002fdb565b92505060a087013567ffffffffffffffff811115620032fe57600080fd5b6200330c89828a0162002e0c565b9150509295509295509295565b600080604083850312156200332d57600080fd5b60006200333b858562002fdb565b9250506020620030638582860162002fdb565b6000602082840312156200336157600080fd5b600062003026848462002ff7565b6200337a8162003bfc565b82525050565b60006200338d8262003bf8565b80845260208401935083602082028501620033a88562003bf2565b60005b84811015620033e5578383038852620033c683835162003519565b9250620033d38262003bf2565b602098909801979150600101620033ab565b50909695505050505050565b6000620033fe8262003bf8565b80845260208401935083602082028501620034198562003bf2565b60005b84811015620033e55783830388526200343783835162003519565b9250620034448262003bf2565b6020989098019791506001016200341c565b6000620034638262003bf8565b808452602084019350620034778362003bf2565b60005b82811015620034ad576200349086835162003727565b6200349b8262003bf2565b6020969096019591506001016200347a565b5093949350505050565b6000620034c48262003bf8565b808452602084019350620034d88362003bf2565b60005b82811015620034ad57620034f186835162003732565b620034fc8262003bf2565b602096909601959150600101620034db565b6200337a8162003c08565b6000620035268262003bf8565b8084526200353c81602086016020860162003c1f565b620035478162003c52565b9093016020019392505050565b60008284526020840193506200356c83858462003c13565b620035778362003c52565b9093019392505050565b600b81527f746f6b656e206578697374000000000000000000000000000000000000000000602082015260400190565b601581527f536166654d61746820616464206f766572666c6f770000000000000000000000602082015260400190565b601d81527f4e6577206f776e657220697320746865207a65726f2061646472657373000000602082015260400190565b600f81527f746f6b656e206e6f742065786973740000000000000000000000000000000000602082015260400190565b600981527f4e6f74206f776e65720000000000000000000000000000000000000000000000602082015260400190565b600981527f6e6f742061646d696e0000000000000000000000000000000000000000000000602082015260400190565b805160a080845260009190840190620036bb828262003519565b91505060208301518482036020860152620036d7828262003519565b91505060408301518482036040860152620036f3828262003519565b91505060608301516200370a606086018262003732565b5060808301516200371f608086018262003727565b509392505050565b6200337a8162002dfb565b6200337a8162003c0d565b602081016200374d82846200336f565b92915050565b606081016200376382886200336f565b81810360208301526200377881868862003554565b905081810360408301526200378f81848662003554565b979650505050505050565b60808101620037aa82896200336f565b8181036020830152620037bf81878962003554565b90508181036040830152620037d681858762003554565b90506200378f606083018462003732565b60808101620037f782876200336f565b81810360208301526200380b818662003519565b9050818103604083015262003821818562003519565b905062003832606083018462003732565b95945050505050565b604081016200384b82856200336f565b62002cef602083018462003727565b61014080825281016200386e818d62003456565b9050818103602083015262003884818c62003456565b905081810360408301526200389a818b62003380565b90508181036060830152620038b0818a62003456565b90508181036080830152620038c6818962003380565b905081810360a0830152620038dc8188620033f1565b905081810360c0830152620038f28187620034b7565b905081810360e083015262003908818662003380565b90508181036101008301526200391f8185620033f1565b905081810361012083015262003936818462003456565b9c9b505050505050505050505050565b602081016200374d82846200350e565b60a0808252810162003969818862003519565b905081810360208301526200397f818762003519565b9050818103604083015262003995818662003519565b9050620039a6606083018562003732565b620039b5608083018462003727565b9695505050505050565b60408082528101620039d381868862003554565b90508181036020830152620039b581848662003554565b60608082528101620039fe81878962003554565b9050818103602083015262003a1581858762003554565b9050620039b5604083018462003732565b6040808252810162003a39818562003519565b905062002cef602083018462003732565b602080825281016200374d8162003581565b602080825281016200374d81620035b1565b602080825281016200374d81620035e1565b602080825281016200374d8162003611565b602080825281016200374d8162003641565b602080825281016200374d8162003671565b60a0808252810162003ac98188620036a1565b905062003ada602083018762003727565b818103604083015262003aee818662003519565b905062003aff606083018562003727565b81810360808301526200378f818462003519565b602081016200374d828462003727565b6060810162003b33828662003727565b818103602083015262003b47818562003519565b905062003026604083018462003727565b6080810162003b68828762003727565b818103602083015262003b7c818662003519565b905062003b8d604083018562003727565b8181036060830152620039b5818462003519565b60405181810167ffffffffffffffff8111828210171562003bc157600080fd5b604052919050565b600067ffffffffffffffff82111562003be157600080fd5b506020601f91909101601f19160190565b60200190565b5190565b600160a060020a031690565b151590565b60ff1690565b82818337506000910152565b60005b8381101562003c3c57818101518382015260200162003c22565b8381111562003c4c576000848401525b50505050565b601f01601f191690560060806040523480156200001157600080fd5b5060405162001387380380620013878339810180604052620000379190810190620001a8565b60068054600160a060020a0319163317905582516200005e90600090602086019062000092565b5081516200007490600190602085019062000092565b506002805460ff191660ff9290921691909117905550620002b39050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000d557805160ff191683800117855562000105565b8280016001018555821562000105579182015b8281111562000105578251825591602001919060010190620000e8565b506200011392915062000117565b5090565b6200013491905b808211156200011357600081556001016200011e565b90565b6000601f820183136200014957600080fd5b8151620001606200015a8262000252565b6200022b565b915080825260208301602083018583830111156200017d57600080fd5b6200018a83828462000280565b50505092915050565b6000620001a182516200027a565b9392505050565b600080600060608486031215620001be57600080fd5b83516001604060020a03811115620001d557600080fd5b620001e38682870162000137565b93505060208401516001604060020a038111156200020057600080fd5b6200020e8682870162000137565b9250506040620002218682870162000193565b9150509250925092565b6040518181016001604060020a03811182821017156200024a57600080fd5b604052919050565b60006001604060020a038211156200026957600080fd5b506020601f91909101601f19160190565b60ff1690565b60005b838110156200029d57818101518382015260200162000283565b83811115620002ad576000848401525b50505050565b6110c480620002c36000396000f3006080604052600436106100fb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610100578063095ea7b31461012b57806318160ddd1461015857806323b872dd1461017a578063313ce5671461019a57806340c10f19146101bc5780634fb2e45d146101de57806370a08231146101fe578063715018a61461021e57806379ba5097146102335780638da5cb5b1461024857806395d89b411461026a5780639dc29fac1461027f578063a6f9dae11461029f578063a9059cbb146102bf578063d4ee1d90146102df578063dd62ed3e146102f4578063f4c84d1914610314575b600080fd5b34801561010c57600080fd5b50610115610334565b6040516101229190610f78565b60405180910390f35b34801561013757600080fd5b5061014b610146366004610d0d565b6103c2565b6040516101229190610f6a565b34801561016457600080fd5b5061016d6104ae565b6040516101229190610ff9565b34801561018657600080fd5b5061014b610195366004610cc0565b6104b4565b3480156101a657600080fd5b506101af6105d6565b6040516101229190611007565b3480156101c857600080fd5b506101dc6101d7366004610d0d565b6105df565b005b3480156101ea57600080fd5b506101dc6101f9366004610c60565b6106c1565b34801561020a57600080fd5b5061016d610219366004610c60565b610782565b34801561022a57600080fd5b506101dc61079d565b34801561023f57600080fd5b506101dc6107e9565b34801561025457600080fd5b5061025d61082e565b6040516101229190610f5c565b34801561027657600080fd5b5061011561083d565b34801561028b57600080fd5b506101dc61029a366004610d0d565b610897565b3480156102ab57600080fd5b506101dc6102ba366004610c60565b61096c565b3480156102cb57600080fd5b5061014b6102da366004610d0d565b6109c8565b3480156102eb57600080fd5b5061025d610a7f565b34801561030057600080fd5b5061016d61030f366004610c86565b610a8e565b34801561032057600080fd5b506101dc61032f366004610d3d565b610abb565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103ba5780601f1061038f576101008083540402835291602001916103ba565b820191906000526020600020905b81548152906001019060200180831161039d57829003601f168201915b505050505081565b6000604060443610156103f35760405160e560020a62461bcd0281526004016103ea90610f99565b60405180910390fd5b8215806104215750336000908152600460209081526040808320600160a060020a0388168452909152902054155b15156104425760405160e560020a62461bcd0281526004016103ea90610f89565b336000818152600460209081526040808320600160a060020a03891680855292529182902086905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061049c908790610ff9565b60405180910390a35060019392505050565b60055481565b6000606060643610156104dc5760405160e560020a62461bcd0281526004016103ea90610f99565b600160a060020a038416600090815260036020526040902054610505908463ffffffff610b0816565b600160a060020a03808616600090815260036020526040808220939093559087168152205461053a908463ffffffff610b3716565b600160a060020a0386166000908152600360209081526040808320939093556004815282822033835290522054610577908463ffffffff610b3716565b600160a060020a03808716600081815260046020908152604080832033845290915290819020939093559151908616919060008051602061106b833981519152906105c3908790610ff9565b60405180910390a3506001949350505050565b60025460ff1681565b600654600160a060020a0316331461060c5760405160e560020a62461bcd0281526004016103ea90610fe9565b80600081116106305760405160e560020a62461bcd0281526004016103ea90610fc9565b600160a060020a038316600090815260036020526040902054610659908363ffffffff610b0816565b600160a060020a038416600090815260036020526040902055600554610685908363ffffffff610b0816565b600555604051600160a060020a0384169060009060008051602061106b833981519152906106b4908690610ff9565b60405180910390a3505050565b600654600160a060020a031633146106ee5760405160e560020a62461bcd0281526004016103ea90610fe9565b600160a060020a03811615156107195760405160e560020a62461bcd0281526004016103ea90610fb9565b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a031660009081526003602052604090205490565b600654600160a060020a031633146107ca5760405160e560020a62461bcd0281526004016103ea90610fe9565b6006805473ffffffffffffffffffffffffffffffffffffffff19169055565b600754600160a060020a031633141561082c576007546006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600654600160a060020a031681565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103ba5780601f1061038f576101008083540402835291602001916103ba565b600654600160a060020a031633146108c45760405160e560020a62461bcd0281526004016103ea90610fe9565b80600081116108e85760405160e560020a62461bcd0281526004016103ea90610fc9565b600160a060020a038316600090815260036020526040902054610911908363ffffffff610b3716565b600160a060020a03841660009081526003602052604090205560055461093d908363ffffffff610b3716565b600555604051600090600160a060020a0385169060008051602061106b833981519152906106b4908690610ff9565b600654600160a060020a031633146109995760405160e560020a62461bcd0281526004016103ea90610fe9565b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000604060443610156109f05760405160e560020a62461bcd0281526004016103ea90610f99565b33600090815260036020526040902054610a10908463ffffffff610b3716565b3360009081526003602052604080822092909255600160a060020a03861681522054610a42908463ffffffff610b0816565b600160a060020a03851660008181526003602052604090819020929092559051339060008051602061106b8339815191529061049c908790610ff9565b600754600160a060020a031681565b600160a060020a038083166000908152600460209081526040808320938516835292905220545b92915050565b600654600160a060020a03163314610ae85760405160e560020a62461bcd0281526004016103ea90610fe9565b610af460008585610b64565b50610b0160018383610b64565b5050505050565b600082820183811015610b305760405160e560020a62461bcd0281526004016103ea90610fa9565b9392505050565b60008083831115610b5d5760405160e560020a62461bcd0281526004016103ea90610fd9565b5050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610ba55782800160ff19823516178555610bd2565b82800160010185558215610bd2579182015b82811115610bd2578235825591602001919060010190610bb7565b50610bde929150610be2565b5090565b610bfc91905b80821115610bde5760008155600101610be8565b90565b6000610b308235611019565b600080601f83018413610c1d57600080fd5b50813567ffffffffffffffff811115610c3557600080fd5b602083019150836001820283011115610c4d57600080fd5b9250929050565b6000610b308235610bfc565b600060208284031215610c7257600080fd5b6000610c7e8484610bff565b949350505050565b60008060408385031215610c9957600080fd5b6000610ca58585610bff565b9250506020610cb685828601610bff565b9150509250929050565b600080600060608486031215610cd557600080fd5b6000610ce18686610bff565b9350506020610cf286828701610bff565b9250506040610d0386828701610c54565b9150509250925092565b60008060408385031215610d2057600080fd5b6000610d2c8585610bff565b9250506020610cb685828601610c54565b60008060008060408587031215610d5357600080fd5b843567ffffffffffffffff811115610d6a57600080fd5b610d7687828801610c0b565b9450945050602085013567ffffffffffffffff811115610d9557600080fd5b610da187828801610c0b565b95989497509550505050565b610db681611019565b82525050565b610db681611025565b6000610dd082611015565b808452610de4816020860160208601611030565b610ded81611060565b9093016020019392505050565b600d81527f4e6f74207065726d697474656400000000000000000000000000000000000000602082015260400190565b601981527f5061796c6f61642073697a6520697320696e636f727265637400000000000000602082015260400190565b601581527f536166654d61746820616464206f766572666c6f770000000000000000000000602082015260400190565b601d81527f4e6577206f776e657220697320746865207a65726f2061646472657373000000602082015260400190565b600d81527f56616c7565206973206e756c6c00000000000000000000000000000000000000602082015260400190565b601281527f536166654d617468207375622062203e20610000000000000000000000000000602082015260400190565b600981527f4e6f74206f776e65720000000000000000000000000000000000000000000000602082015260400190565b610db681610bfc565b610db68161102a565b60208101610ab58284610dad565b60208101610ab58284610dbc565b60208082528101610b308184610dc5565b60208082528101610ab581610dfa565b60208082528101610ab581610e2a565b60208082528101610ab581610e5a565b60208082528101610ab581610e8a565b60208082528101610ab581610eba565b60208082528101610ab581610eea565b60208082528101610ab581610f1a565b60208101610ab58284610f4a565b60208101610ab58284610f53565b5190565b600160a060020a031690565b151590565b60ff1690565b60005b8381101561104b578181015183820152602001611033565b8381111561105a576000848401525b50505050565b601f01601f1916905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a72305820200f094896d743473c3a14cf1f5ad6d629504261df7d04b19b7e0a590a25714a6c6578706572696d656e74616cf50037a265627a7a723058205928ff7306265bf144556be7dbf86563ab3ba908580420d043fa8791bb2da5536c6578706572696d656e74616cf50037

Deployed Bytecode Sourcemap

23419:13258:0:-;;;;;;;;;-1:-1:-1;;;23419:13258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2919:171;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2919:171:0;;;;;;;;;;;27352:616;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27352:616:0;;;;;;;;;24894:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24894:210:0;;;;;;;;;29096:338;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29096:338:0;;;;;;;;;;;;;;;;;;;;;;;;;;;28384:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28384:125:0;;;;;;;;;28517:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28517:159:0;;;;;;;;;28221:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28221:155:0;;;;;;;;;25412:1036;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25412:1036:0;;;;;;;;;1627:225;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1627:225:0;;;;;;;;;34610:2064;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;34610:2064:0;;;;;;;;;;;;;;;;;;;;;;;;;;9653:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9653:46:0;;;;;;;;;;;;;;;;;9563:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9563:54:0;;;;;;;;;;;;;;;;;;;;;24680:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24680:206:0;;;;;;;;;26456:888;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26456:888:0;;;;;;;;;2746:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2746:165:0;;;;;;;;;2325:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2325:83:0;;;;2194:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2194:123:0;;;;29442:590;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29442:590:0;;;;;;;;;;;;;;;;;;;;1426:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1426:20:0;;;;;;;;;;;;30040:407;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30040:407:0;;;;;;;;;;;;;;;;;;;;;2090:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2090:96:0;;;;;;;;;27976:237;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27976:237:0;;;;;;;;;28684:404;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28684:404:0;;;;;;;;;;;;;;;;;;;;9475:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9475:31:0;;;;1595:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1595:23:0;;;;2518:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2518:40:0;;;;;;;;;;;;;;;;;30455:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30455:208:0;;;;;;;;;;;;;;;;;;32963:1639;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32963:1639:0;;;;25112:292;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25112:292:0;;;;;;;;;30671:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30671:137:0;;;;;;;;;2919:171;1379:5;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3031:15:0;;;;;;:8;:15;;;;;;;3024:22;;-1:-1:-1;;3024:22:0;;;3064:18;;;;;3040:5;;3064:18;;;;;;;;;;2919:171;:::o;27352:616::-;1379:5;;27484:6;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;24418:1;24383:20;;;:16;:20;;;;;:32;;;27460:2;;-1:-1:-1;24375:64:0;;;;-1:-1:-1;;;;;24375:64:0;;;;;;;;;27491:1;27484:8;;27480:481;27496:15;;27494:1;:17;27480:481;;;27543:20;;;;:17;:20;;;;;;27537:26;;27533:417;;;27593:15;;-1:-1:-1;;27593:19:0;27588:24;;27584:134;;27678:15;;-1:-1:-1;;27678:19:0;27660:38;;;;:17;:38;;;;;;;27637:20;;;;;:61;27584:134;27764:15;;;-1:-1:-1;;27764:19:0;;;27746:38;;;;:17;:38;;;;;;;;27739:45;;;27803:17;;;;;;;;27846:20;;;:16;:20;;;;;;;27746:38;27839:27;27846:20;27746:38;27839:27;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;27839:27:0;;;;;-1:-1:-1;;27839:27:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;27890:19:0;;27906:2;;27890:19;;;;;27928:7;;27533:417;27513:3;;;;;27480:481;;;1409:1;27352:616;;:::o;24894:210::-;2693:10;2684:20;;;;:8;:20;;;;;;;;2676:42;;;;;;-1:-1:-1;;;;;2676:42:0;;;;;;;;;25051:45;;;;;-1:-1:-1;;;;;25051:32:0;;;;;:45;;25084:4;;25090:5;;25051:45;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25051:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25051:45:0;;;;24894:210;;;:::o;29096:338::-;29201:16;29284:20;;;:16;:20;;;;;;;;:32;;;;29341;;29327:46;;;;;;-1:-1:-1;;29327:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29284:32;;29219:17;;29201:16;;29327:46;;29341:32;29327:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29396:20:0;;;;-1:-1:-1;;29396:16:0;:20;;;;;;:30;;;29096:338;;;-1:-1:-1;;29096:338:0:o;28384:125::-;28470:12;-1:-1:-1;;;;;28456:43:0;;:45;;;;;-1:-1:-1;;;28456:45:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28456:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28456:45:0;;;;28384:125;:::o;28517:159::-;1379:5;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;28616:52;;;;;-1:-1:-1;;;;;28616:41:0;;;;;:52;;28658:9;;28616:52;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28616:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28616:52:0;;;;28517:159;;:::o;28221:155::-;1379:5;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;28318:50;;;;;-1:-1:-1;;;;;28318:39:0;;;;;:50;;28358:9;;28318:50;;;;25412:1036;1379:5;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;24253:20;;;;:16;:20;;;;;:32;;;25670:2;;24253:37;24245:61;;;;-1:-1:-1;;;;;24245:61:0;;;;;;;;;25722:20;;;;:16;:20;;;;;;;;:32;;;:46;;;25779;;;;:32;;;;;:46;;;;;:::i;:::-;-1:-1:-1;25836:20:0;;;;:16;:20;;;;;;;;:30;;;:42;;;25889;;;;:30;;;;;:42;;;;:::i;:::-;-1:-1:-1;25981:13:0;;;25944:20;;;:16;:20;;;;;;;;:50;;;;:20;;:50;;;;;:::i;:::-;-1:-1:-1;26039:10:0;;;;;26005:20;;;;:16;:20;;;;;:44;;;;:31;;;;;:44;;;;;:::i;:::-;-1:-1:-1;26096:12:0;;;;;26060:20;;;;:16;:20;;;;;;;:48;;;;:33;;;;;:48;;;;;;:::i;:::-;-1:-1:-1;26157:14:0;;;;26119:20;;;;:16;:20;;;;;;;;:35;;;:52;;-1:-1:-1;;26119:52:0;;;;;;;;;;;;26219:13;;;;26182:34;;;;:50;;;;26263:15;;;26245:34;;:17;:34;;;;;;:39;;;26313:15;:22;;-1:-1:-1;26313:19:0;:22::i;:::-;26295:15;:40;26376:64;;26389:2;;26376:64;;;;26393:11;;26406;;26419:9;;26430;;26376:64;;;;;;;;;;1409:1;25412:1036;;;;;;:::o;1627:225::-;1379:5;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;-1:-1:-1;;;;;1705:23:0;;;;1697:65;;;;-1:-1:-1;;;;;1697:65:0;;;;;;;;;1799:5;;1778:38;;-1:-1:-1;;;;;1778:38:0;;;;1799:5;;1778:38;;1799:5;;1778:38;1827:5;:17;;-1:-1:-1;;1827:17:0;-1:-1:-1;;;;;1827:17:0;;;;;;;;;;1627:225::o;34610:2064::-;34722:9;34733:18;34753:19;34774:16;34792:17;34822:23;34847:24;34873:23;34898:21;34921:22;34961:8;34984:6;35005:10;35030:22;34972:1;34961:12;;34993:1;34984:10;;35018:1;35005:14;;35066:15;;35055:27;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;35055:27:0;;35030:52;;35093:407;35104:15;;35100:1;:19;35093:407;;;35150:17;:20;35168:1;35150:20;;;;;;;;;;;;35142:28;;35229:8;35190:16;:23;35207:5;35190:23;;;;;;;;;;;:35;;;:47;35189:100;;;;-1:-1:-1;35243:23:0;;;;:16;:23;;;;;:33;;;:45;;35189:100;:217;;;;35344:8;35307:16;:23;35324:5;35307:23;;;;;;;;;;;:33;;;:45;35306:100;;;;-1:-1:-1;35358:23:0;;;;:16;:23;;;;;:35;;;:47;;35306:100;35185:304;;;35443:5;35427:8;35436:3;35427:13;;;;;;;;;;;;;;;;;;:21;35467:6;;;;;35185:304;35121:3;;;;;35093:407;;;35528:3;35517:15;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;35517:15:0;;35512:20;;35568:3;35557:15;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;35557:15:0;;35543:29;;35609:3;35597:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35583:30;;35647:3;35636:15;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;35636:15:0;;35624:27;;35686:3;35674:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35662:28;;35733:3;35720:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35703:34;;35779:3;35767:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;35767:16:0;;35748:35;;35826:3;35814:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35796:34;;35869:3;35856:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35841:32;;35913:3;35902:15;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;35902:15:0;;35884:33;;35939:1;35935:5;;35930:737;35946:3;35942:1;:7;35930:737;;;35979:8;35988:1;35979:11;;;;;;;;;;;;;;;;;;35971:19;;36015:5;36007:2;36010:1;36007:5;;;;;;;;;;;;;;;;;;;:13;;;;36052:23;;;;:16;:23;;;;;;:35;;;36035:14;;:11;;36047:1;;36035:14;;;;;;;;;;;;;;;;:52;;;;36119:23;;;;:16;:23;;;;;;;;:35;36102:52;;;;;;;;;;;-1:-1:-1;;36102:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;36119:35;;36102:52;;;36119:35;36102:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;36114:1;36102:14;;;;;;;;;;;;;;;;;;;:52;;;;36184:23;;;;:16;:23;;;;;;:33;;;36169:12;;:9;;36179:1;;36169:12;;;;;;;;;;;;;;;;:48;;;;36247:23;;;;:16;:23;;;;;;;:33;;36232:48;;;;;;;;;;;-1:-1:-1;;36232:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;36247:33;;36232:48;;;36247:33;36232:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;36242:1;36232:12;;;;;;;;;;;;;;;;;;;:48;;;;36317:23;;;;:16;:23;;;;;;;:36;;;;36297:56;;;;;-1:-1:-1;;36297:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36317:36;;36297:56;;;36317:36;36297:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;36312:1;36297:17;;;;;;;;;;;;;;;;;;;:56;;;;36390:23;;;;:16;:23;;;;;;:38;;;36368:19;;36390:38;;;;;36368:16;;36385:1;;36368:19;;;;;;:60;;;;:19;;;;;;;;;:60;36478:23;;;;:16;:23;;;;;;;36457:58;;;;;;-1:-1:-1;;36457:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36478:23;;36457:58;;;36478:23;36457:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;36473:1;36457:18;;;;;;;;;;;;;;;;;;;;:58;;;;36548:23;;;;:16;:23;;;;;;;:34;;;;36530:52;;;;;;;;;;;-1:-1:-1;;36530:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36548:34;;36530:52;;;36548:34;36530:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;36543:1;36530:15;;;;;;;;;;;;;;;;;;;:52;;;;36618:23;;;;:16;:23;;;;;;:37;;;36597:18;;:15;;36613:1;;36597:18;;;;;;;;;;;;;;:58;35951:3;;;;;35930:737;;;34610:2064;;;;;;;;;;;;;;;;;:::o;9653:46::-;;;;;;;;;;;;;:::o;9563:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9563:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9563:54:0;;;-1:-1:-1;;9563:54:0;;;;;;;;;;;;;;;;-1:-1:-1;;9563:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9563:54:0;;;-1:-1:-1;;9563:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9563:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;9563:54:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9563:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9563:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24680:206::-;2693:10;2684:20;;;;:8;:20;;;;;;;;2676:42;;;;;;-1:-1:-1;;;;;2676:42:0;;;;;;;;;24835:43;;;;;-1:-1:-1;;;;;24835:32:0;;;;;:43;;24868:2;;24872:5;;24835:43;;;;26456:888;1379:5;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;24418:1;24383:20;;;:16;:20;;;;;:32;;;26714:2;;-1:-1:-1;24375:64:0;;;;-1:-1:-1;;;;;24375:64:0;;;;;;;;;26771:13;;;26734:20;;;:16;:20;;;;;;;;:50;;;;:20;;:50;;;;;:::i;:::-;-1:-1:-1;26829:10:0;;;;;26795:20;;;;:16;:20;;;;;:44;;;;:31;;;;;:44;;;;;:::i;:::-;-1:-1:-1;26886:12:0;;;;;26850:20;;;;:16;:20;;;;;;;:48;;;;:33;;;;;:48;;;;;;:::i;:::-;-1:-1:-1;26947:14:0;;;;26909:20;;;;:16;:20;;;;;;;;:35;;;:52;;-1:-1:-1;;26909:52:0;;;;;;;;;;;;27009:13;;;;26972:34;;;:50;27035:32;;;:46;;;27092;;;;:32;;;;:46;;;;:::i;:::-;-1:-1:-1;27149:20:0;;;;:16;:20;;;;;;;;:30;;;:42;;;27202;;;;:30;;;;;:42;;;;:::i;:::-;;27278:2;27262:74;27282:5;27289:11;27302;27315:9;27326;27262:74;;;;;;;;;;;2746:165;1379:5;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;-1:-1:-1;;;;;2848:15:0;;;;;;:8;:15;;;;;;;:22;;-1:-1:-1;;2848:22:0;2866:4;2848:22;;;2888:15;;;;;2857:5;;2888:15;;2325:83;1379:5;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;2382:5;:18;;-1:-1:-1;;2382:18:0;;;2325:83::o;2194:123::-;2257:8;;-1:-1:-1;;;;;2257:8:0;2243:10;:22;2239:71;;;2290:8;;2282:5;:16;;-1:-1:-1;;2282:16:0;-1:-1:-1;;;;;2290:8:0;;;2282:16;;;;;;2239:71;2194:123::o;29442:590::-;29496:12;29569:20;;;:16;:20;;;;;:32;;;29510:11;;;;29496:12;;;;29569:37;29565:460;;;29623:9;;;;;;;;;-1:-1:-1;29623:9:0;;;29647:11;;;;;;;;;;;-1:-1:-1;;;29623:9:0;-1:-1:-1;29647:11:0;-1:-1:-1;;;;29565:460:0;;;29784:20;;;;:16;:20;;;;;;;;;:30;;29769:46;;;;;;-1:-1:-1;;29769:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29784:30;29769:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;:46::i;:::-;29750:65;;29851:8;-1:-1:-1;;;;;29837:28:0;;:30;;;;;-1:-1:-1;;;29837:30:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29837:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29837:30:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;29837:30:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;29837:30:0;;;;;;;;;29830:37;;29905:8;-1:-1:-1;;;;;29891:30:0;;:32;;;;;-1:-1:-1;;;29891:32:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29891:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29891:32:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;29891:32:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;29891:32:0;;;;;;;;;29882:41;;29963:8;-1:-1:-1;;;;;29949:32:0;;:34;;;;;-1:-1:-1;;;29949:34:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29949:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29949:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29949:34:0;;;;;;;;;29938:45;;30005:8;29998:15;;29565:460;29442:590;;;;;;:::o;1426:20::-;;;-1:-1:-1;;;;;1426:20:0;;:::o;30040:407::-;30140:14;30191:20;;;:16;:20;;;;;;;;30181:44;;;;;;-1:-1:-1;;30181:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30097:13;;;;;;30140:14;;;;30191:20;;30181:44;;30191:20;30181:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30243:20:0;;;;:16;:20;;;;;;;;;:31;;;;30236:38;;;;;;;;;;;-1:-1:-1;;30236:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;30181:44;;-1:-1:-1;30236:38:0;30243:31;-1:-1:-1;30236:38:0;;-1:-1:-1;30236:38:0;;30243:31;30236:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30294:20:0;;;;:16;:20;;;;;;;;;:33;;;;30285:42;;;;;;;;;;-1:-1:-1;;30285:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;30236:38;;-1:-1:-1;30285:42:0;30294:33;-1:-1:-1;30285:42:0;;-1:-1:-1;30285:42:0;;30294:33;30285:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30349:20:0;;;;-1:-1:-1;;30349:16:0;:20;;;;;;:35;;;;30405:34;;;;;30040:407;;;;30285:42;30349:35;;;;;30405:34;;-1:-1:-1;30040:407:0;-1:-1:-1;;30040:407:0:o;2090:96::-;1379:5;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;2158:8;:20;;-1:-1:-1;;2158:20:0;-1:-1:-1;;;;;2158:20:0;;;;;;;;;;2090:96::o;27976:237::-;1379:5;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;28100:48;;;;;-1:-1:-1;;;;;28100:34:0;;;;;:48;;28135:4;;;;28141:6;;;;28100:48;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28100:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28100:48:0;;;;28166:39;28178:12;28192:4;;28198:6;;28166:39;;;;;;;;;;;;;;;;;;;27976:237;;;;;:::o;28684:404::-;28785:16;28885:20;;;:16;:20;;;;;;;;:32;;;;28942;;28928:46;;;;;;-1:-1:-1;;28928:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28885:32;;28803:17;;28785:16;;28803:17;;28928:46;28942:32;28928:46;;;28942:32;28928:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28997:20:0;;;;:16;:20;;;;;;;;;:30;;;;29050;;;;29038:42;;;;;;;;;;;-1:-1:-1;;29038:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;28928:46;;-1:-1:-1;28997:30:0;;-1:-1:-1;29050:30:0;-1:-1:-1;29038:42:0;;-1:-1:-1;29038:42:0;;29050:30;29038:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28684:404;;;;;:::o;9475:31::-;;;;:::o;1595:23::-;;;-1:-1:-1;;;;;1595:23:0;;:::o;2518:40::-;;;;;;;;;;;;;;;:::o;30455:208::-;30529:14;30565:20;;;:16;:20;;;;;;;;:33;;;;30556:42;;;;;;;;;;-1:-1:-1;;30556:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;30514:13;;30529:14;30556:42;;30565:33;;30556:42;;30565:33;30556:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30620:20:0;;;;-1:-1:-1;;30620:16:0;:20;;;;;;:35;;;30556:42;;30620:35;;;;;30455:208;-1:-1:-1;;30455:208:0:o;32963:1639::-;33038:9;33049:18;33069:19;33090:16;33108:17;33138:23;33163:24;33189:23;33214:21;33237:22;33277:8;33314:10;33339:6;33816;33288:15;;33277:26;;33327:1;33314:14;;33348:1;33339:10;;33378:3;33367:15;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;33367:15:0;;33362:20;;33418:3;33407:15;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;33407:15:0;;33393:29;;33459:3;33447:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33433:30;;33497:3;33486:15;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;33486:15:0;;33474:27;;33536:3;33524:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33512:28;;33583:3;33570:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33553:34;;33629:3;33617:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;33617:16:0;;33598:35;;33676:3;33664:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33646:34;;33719:3;33706:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33691:32;;33763:3;33752:15;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;33752:15:0;;33734:33;;33784:1;33780:5;;33804:1;33796:9;;33825:1;33816:10;;33837:758;33848:15;;33844:1;:19;33837:758;;;33893:20;;;;:17;:20;;;;;;33928:5;;33893:20;;-1:-1:-1;33893:20:0;;33928:2;;33931:1;;33928:5;;;;;;;;;;;;;;;:13;;;;33973:23;;;;:16;:23;;;;;;:35;;;33956:14;;:11;;33968:1;;33956:14;;;;;;;;;;;;;;;;:52;;;;34040:23;;;;:16;:23;;;;;;;;:35;34023:52;;;;;;;;;;;-1:-1:-1;;34023:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;34040:35;;34023:52;;;34040:35;34023:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;34035:1;34023:14;;;;;;;;;;;;;;;;;;;:52;;;;34105:23;;;;:16;:23;;;;;;:33;;;34090:12;;:9;;34100:1;;34090:12;;;;;;;;;;;;;;;;:48;;;;34168:23;;;;:16;:23;;;;;;;:33;;34153:48;;;;;;;;;;;-1:-1:-1;;34153:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;34168:33;;34153:48;;;34168:33;34153:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;34163:1;34153:12;;;;;;;;;;;;;;;;;;;:48;;;;34238:23;;;;:16;:23;;;;;;;:36;;;;34218:56;;;;;-1:-1:-1;;34218:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34238:36;;34218:56;;;34238:36;34218:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;34233:1;34218:17;;;;;;;;;;;;;;;;;;;:56;;;;34311:23;;;;:16;:23;;;;;;:38;;;34289:19;;34311:38;;;;;34289:16;;34306:1;;34289:19;;;;;;:60;;;;:19;;;;;;;;;:60;34387:23;;;;:16;:23;;;;;;;34366:58;;;;;;-1:-1:-1;;34366:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34387:23;;34366:58;;;34387:23;34366:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;34382:1;34366:18;;;;;;;;;;;;;;;;;;;;:58;;;;34457:23;;;;:16;:23;;;;;;;:34;;;;34439:52;;;;;;;;;;;-1:-1:-1;;34439:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34457:34;;34439:52;;;34457:34;34439:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;34452:1;34439:15;;;;;;;;;;;;;;;;;;;:52;;;;34527:23;;;;:16;:23;;;;;;:37;;;34506:18;;:15;;34522:1;;34506:18;;;;;;;;;;;;;;:58;34579:4;;;;;33865:3;33837:758;;;32963:1639;;;;;;;;;;;;;;:::o;25112:292::-;1379:5;;25261:20;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1357:41;;;;-1:-1:-1;;;;;1357:41:0;;;;;;;;;25301:4;;25307:6;;25315:8;25284:40;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25284:40:0;25261:63;;25350:46;25359:12;25373:4;;25379:6;;25387:8;25350:46;;;;;;;;;;;;;;;;;;;;25112:292;;;;;;:::o;30671:137::-;30731:12;30766:20;;;:16;:20;;;;;:34;;;;30671:137::o;13870:175::-;13928:7;13960:5;;;13984:6;;;;13976:40;;;;-1:-1:-1;;;;;13976:40:0;;;;;;;;;14036:1;13870:175;-1:-1:-1;;;13870:175:0:o;24525:147::-;24650:2;24644:9;24638:16;;24615:50::o;23419:13258::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23419:13258:0;;;-1:-1:-1;23419:13258:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;131:432;;221:4;209:17;;205:27;-1:-1;195:2;;246:1;243;236:12;195:2;283:6;270:20;305:60;320:44;357:6;320:44;;;305:60;;;296:69;;385:6;378:5;371:21;421:4;413:6;409:17;454:4;447:5;443:16;489:3;480:6;475:3;471:16;468:25;465:2;;;506:1;503;496:12;465:2;516:41;550:6;545:3;540;516:41;;;188:375;;;;;;;;1035:336;;;1143:4;1131:17;;1127:27;-1:-1;1117:2;;1168:1;1165;1158:12;1117:2;-1:-1;1188:20;;1228:18;1217:30;;1214:2;;;1260:1;1257;1250:12;1214:2;1294:4;1286:6;1282:17;1270:29;;1344:3;1337;1329:6;1325:16;1315:8;1311:31;1308:40;1305:2;;;1361:1;1358;1351:12;1305:2;1110:261;;;;;;1823:444;;1929:4;1917:17;;1913:27;-1:-1;1903:2;;1954:1;1951;1944:12;1903:2;1984:6;1978:13;2006:65;2021:49;2063:6;2021:49;;2006:65;1997:74;;2091:6;2084:5;2077:21;2127:4;2119:6;2115:17;2160:4;2153:5;2149:16;2195:3;2186:6;2181:3;2177:16;2174:25;2171:2;;;2212:1;2209;2202:12;2171:2;2222:39;2254:6;2249:3;2244;2222:39;;2321:1188;;2439:4;2427:9;2422:3;2418:19;2414:30;2411:2;;;2457:1;2454;2447:12;2411:2;2475:20;2490:4;2475:20;;;2466:29;-1:-1;2548:31;;2599:18;2588:30;;2585:2;;;2631:1;2628;2621:12;2585:2;2665:54;2715:3;2706:6;2695:9;2691:22;2665:54;;;2641:79;;-1:-1;2809:2;2794:18;;2781:32;2833:18;2822:30;;2819:2;;;2865:1;2862;2855:12;2819:2;2900:55;2951:3;2942:6;2931:9;2927:22;2900:55;;;2893:4;2886:5;2882:16;2875:81;2741:226;3047:2;3036:9;3032:18;3019:32;3071:18;3063:6;3060:30;3057:2;;;3103:1;3100;3093:12;3057:2;3138:55;3189:3;3180:6;3169:9;3165:22;3138:55;;;3131:4;3124:5;3120:16;3113:81;2977:228;3259:2;3292:47;3335:3;3326:6;3315:9;3311:22;3292:47;;;3285:4;3278:5;3274:16;3267:73;3215:136;3404:3;3438:49;3483:3;3474:6;3463:9;3459:22;3438:49;;;3431:4;3424:5;3420:16;3413:75;3361:138;2405:1104;;;;;3516:118;;3583:46;3621:6;3608:20;3583:46;;3641:114;;3706:44;3742:6;3729:20;3706:44;;3762:118;;3838:37;3867:6;3861:13;3838:37;;3887:241;;3991:2;3979:9;3970:7;3966:23;3962:32;3959:2;;;4007:1;4004;3997:12;3959:2;4042:1;4059:53;4104:7;4084:9;4059:53;;;4049:63;3953:175;-1:-1;;;;3953:175;4135:366;;;4256:2;4244:9;4235:7;4231:23;4227:32;4224:2;;;4272:1;4269;4262:12;4224:2;4307:1;4324:53;4369:7;4349:9;4324:53;;;4314:63;;4286:97;4414:2;4432:53;4477:7;4468:6;4457:9;4453:22;4432:53;;;4422:63;;4393:98;4218:283;;;;;;4508:491;;;;4646:2;4634:9;4625:7;4621:23;4617:32;4614:2;;;4662:1;4659;4652:12;4614:2;4697:1;4714:53;4759:7;4739:9;4714:53;;;4704:63;;4676:97;4804:2;4822:53;4867:7;4858:6;4847:9;4843:22;4822:53;;;4812:63;;4783:98;4912:2;4930:53;4975:7;4966:6;4955:9;4951:22;4930:53;;;4920:63;;4891:98;4608:391;;;;;;5006:743;;;;;;5184:2;5172:9;5163:7;5159:23;5155:32;5152:2;;;5200:1;5197;5190:12;5152:2;5235:1;5252:53;5297:7;5277:9;5252:53;;;5242:63;;5214:97;5370:2;5359:9;5355:18;5342:32;5394:18;5386:6;5383:30;5380:2;;;5426:1;5423;5416:12;5380:2;5454:65;5511:7;5502:6;5491:9;5487:22;5454:65;;;5436:83;;;;5321:204;5584:2;5573:9;5569:18;5556:32;5608:18;5600:6;5597:30;5594:2;;;5640:1;5637;5630:12;5594:2;5668:65;5725:7;5716:6;5705:9;5701:22;5668:65;;;5650:83;;;;5535:204;5146:603;;;;;;;;;5756:739;;;;;;5932:2;5920:9;5911:7;5907:23;5903:32;5900:2;;;5948:1;5945;5938:12;5900:2;5983:31;;6034:18;6023:30;;6020:2;;;6066:1;6063;6056:12;6020:2;6094:65;6151:7;6142:6;6131:9;6127:22;6094:65;;;6076:83;;;;5962:203;6224:2;6213:9;6209:18;6196:32;6248:18;6240:6;6237:30;6234:2;;;6280:1;6277;6270:12;6234:2;6308:65;6365:7;6356:6;6345:9;6341:22;6308:65;;;6290:83;;;;6175:204;6410:2;6428:51;6471:7;6462:6;6451:9;6447:22;6428:51;;;6418:61;;6389:96;5894:601;;;;;;;;;6502:362;;6627:2;6615:9;6606:7;6602:23;6598:32;6595:2;;;6643:1;6640;6633:12;6595:2;6678:24;;6722:18;6711:30;;6708:2;;;6754:1;6751;6744:12;6708:2;6774:74;6840:7;6831:6;6820:9;6816:22;6774:74;;6871:241;;6975:2;6963:9;6954:7;6950:23;6946:32;6943:2;;;6991:1;6988;6981:12;6943:2;7026:1;7043:53;7088:7;7068:9;7043:53;;7119:1221;;;;;;;7355:3;7343:9;7334:7;7330:23;7326:33;7323:2;;;7372:1;7369;7362:12;7323:2;7407:1;7424:53;7469:7;7449:9;7424:53;;;7414:63;;7386:97;7542:2;7531:9;7527:18;7514:32;7566:18;7558:6;7555:30;7552:2;;;7598:1;7595;7588:12;7552:2;7618:82;7692:7;7683:6;7672:9;7668:22;7618:82;;;7608:92;;7493:213;7737:2;7755:53;7800:7;7791:6;7780:9;7776:22;7755:53;;;7745:63;;7716:98;7873:2;7862:9;7858:18;7845:32;7897:18;7889:6;7886:30;7883:2;;;7929:1;7926;7919:12;7883:2;7949:62;8003:7;7994:6;7983:9;7979:22;7949:62;;;7939:72;;7824:193;8048:3;8067:53;8112:7;8103:6;8092:9;8088:22;8067:53;;;8057:63;;8027:99;8185:3;8174:9;8170:19;8157:33;8210:18;8202:6;8199:30;8196:2;;;8242:1;8239;8232:12;8196:2;8262:62;8316:7;8307:6;8296:9;8292:22;8262:62;;;8252:72;;8136:194;7317:1023;;;;;;;;;8347:366;;;8468:2;8456:9;8447:7;8443:23;8439:32;8436:2;;;8484:1;8481;8474:12;8436:2;8519:1;8536:53;8581:7;8561:9;8536:53;;;8526:63;;8498:97;8626:2;8644:53;8689:7;8680:6;8669:9;8665:22;8644:53;;8720:259;;8833:2;8821:9;8812:7;8808:23;8804:32;8801:2;;;8849:1;8846;8839:12;8801:2;8884:1;8901:62;8955:7;8935:9;8901:62;;8986:110;9059:31;9084:5;9059:31;;;9054:3;9047:44;9041:55;;;9130:766;;9275:59;9328:5;9275:59;;;9352:6;9347:3;9340:19;9376:4;9371:3;9367:14;9360:21;;9424:3;9466:4;9458:6;9454:17;9449:3;9445:27;9492:61;9547:5;9492:61;;;9574:1;9559:298;9584:6;9581:1;9578:13;9559:298;;;9646:9;9640:4;9636:20;9631:3;9624:33;9672:68;9735:4;9726:6;9720:13;9672:68;;;9664:76;;9757:65;9815:6;9757:65;;;9845:4;9836:14;;;;;9747:75;-1:-1;9606:1;9599:9;9559:298;;;-1:-1;9870:4;;9254:642;-1:-1;;;;;;9254:642;9933:773;;10080:60;10134:5;10080:60;;;10158:6;10153:3;10146:19;10182:4;10177:3;10173:14;10166:21;;10230:3;10272:4;10264:6;10260:17;10255:3;10251:27;10298:62;10354:5;10298:62;;;10381:1;10366:301;10391:6;10388:1;10385:13;10366:301;;;10453:9;10447:4;10443:20;10438:3;10431:33;10479:70;10544:4;10535:6;10529:13;10479:70;;;10471:78;;10566:66;10625:6;10566:66;;;10655:4;10646:14;;;;;10556:76;-1:-1;10413:1;10406:9;10366:301;;10745:590;;10880:54;10928:5;10880:54;;;10952:6;10947:3;10940:19;10976:4;10971:3;10967:14;10960:21;;11021:56;11071:5;11021:56;;;11098:1;11083:230;11108:6;11105:1;11102:13;11083:230;;;11148:53;11197:3;11188:6;11182:13;11148:53;;;11218:60;11271:6;11218:60;;;11301:4;11292:14;;;;;11208:70;-1:-1;11130:1;11123:9;11083:230;;;-1:-1;11326:3;;10859:476;-1:-1;;;;10859:476;11370:576;;11501:52;11547:5;11501:52;;;11571:6;11566:3;11559:19;11595:4;11590:3;11586:14;11579:21;;11640:54;11688:5;11640:54;;;11715:1;11700:224;11725:6;11722:1;11719:13;11700:224;;;11765:49;11810:3;11801:6;11795:13;11765:49;;;11831:58;11882:6;11831:58;;;11912:4;11903:14;;;;;11821:68;-1:-1;11747:1;11740:9;11700:224;;11954:101;12021:28;12043:5;12021:28;;12062:297;;12162:38;12194:5;12162:38;;;12217:6;12212:3;12205:19;12229:63;12285:6;12278:4;12273:3;12269:14;12262:4;12255:5;12251:16;12229:63;;;12324:29;12346:6;12324:29;;;12304:50;;;12317:4;12304:50;;12142:217;-1:-1;;;12142:217;12685:263;;12795:6;12790:3;12783:19;12819:4;12814:3;12810:14;12803:21;;12849:43;12885:6;12880:3;12873:5;12849:43;;;12913:29;12935:6;12913:29;;;12904:39;;;;12777:171;-1:-1;;;12777:171;13562:296;13717:2;13705:15;;13754:66;13749:2;13740:12;;13733:88;13849:2;13840:12;;13698:160;13867:296;14022:2;14010:15;;14059:66;14054:2;14045:12;;14038:88;14154:2;14145:12;;14003:160;14172:296;14327:2;14315:15;;14364:66;14359:2;14350:12;;14343:88;14459:2;14450:12;;14308:160;14477:296;14632:2;14620:15;;14669:66;14664:2;14655:12;;14648:88;14764:2;14755:12;;14613:160;14782:295;14937:1;14925:14;;14973:66;14968:2;14959:12;;14952:88;15068:2;15059:12;;14918:159;15086:295;15241:1;15229:14;;15277:66;15272:2;15263:12;;15256:88;15372:2;15363:12;;15222:159;15478:1206;15699:22;;15627:4;15733:37;;;15478:1206;;15618:14;;;;15785:66;15618:14;15699:22;15785:66;;;15777:74;;15647:216;15939:4;15932:5;15928:16;15922:23;15990:3;15984:4;15980:14;15973:4;15968:3;15964:14;15957:38;16010:68;16073:4;16060:11;16010:68;;;16002:76;;15873:217;16168:4;16161:5;16157:16;16151:23;16219:3;16213:4;16209:14;16202:4;16197:3;16193:14;16186:38;16239:68;16302:4;16289:11;16239:68;;;16231:76;;16100:219;16399:4;16392:5;16388:16;16382:23;16417:58;16469:4;16464:3;16460:14;16447:11;16417:58;;;16329:158;16566:4;16559:5;16555:16;16549:23;16584:62;16640:4;16635:3;16631:14;16618:11;16584:62;;;-1:-1;16675:4;15600:1084;-1:-1;;;15600:1084;17989:110;18062:31;18087:5;18062:31;;18106:104;18175:29;18198:5;18175:29;;18217:193;18325:2;18310:18;;18339:61;18314:9;18373:6;18339:61;;;18296:114;;;;;18417:611;18641:2;18626:18;;18655:61;18630:9;18689:6;18655:61;;;18764:9;18758:4;18754:20;18749:2;18738:9;18734:18;18727:48;18789:78;18862:4;18853:6;18845;18789:78;;;18781:86;;18915:9;18909:4;18905:20;18900:2;18889:9;18885:18;18878:48;18940:78;19013:4;19004:6;18996;18940:78;;;18932:86;18612:416;-1:-1;;;;;;;18612:416;19035:705;19283:3;19268:19;;19298:61;19272:9;19332:6;19298:61;;;19407:9;19401:4;19397:20;19392:2;19381:9;19377:18;19370:48;19432:78;19505:4;19496:6;19488;19432:78;;;19424:86;;19558:9;19552:4;19548:20;19543:2;19532:9;19528:18;19521:48;19583:78;19656:4;19647:6;19639;19583:78;;;19575:86;;19672:58;19726:2;19715:9;19711:18;19702:6;19672:58;;19747:665;19975:3;19960:19;;19990:61;19964:9;20024:6;19990:61;;;20099:9;20093:4;20089:20;20084:2;20073:9;20069:18;20062:48;20124:68;20187:4;20178:6;20124:68;;;20116:76;;20240:9;20234:4;20230:20;20225:2;20214:9;20210:18;20203:48;20265:68;20328:4;20319:6;20265:68;;;20257:76;;20344:58;20398:2;20387:9;20383:18;20374:6;20344:58;;;19946:466;;;;;;;;20419:294;20555:2;20540:18;;20569:61;20544:9;20603:6;20569:61;;;20641:62;20699:2;20688:9;20684:18;20675:6;20641:62;;20720:2689;21630:3;21645:47;;;21615:19;;21706:98;21615:19;21790:6;21706:98;;;21698:106;;21852:9;21846:4;21842:20;21837:2;21826:9;21822:18;21815:48;21877:98;21970:4;21961:6;21877:98;;;21869:106;;22023:9;22017:4;22013:20;22008:2;21997:9;21993:18;21986:48;22048:108;22151:4;22142:6;22048:108;;;22040:116;;22204:9;22198:4;22194:20;22189:2;22178:9;22174:18;22167:48;22229:98;22322:4;22313:6;22229:98;;;22221:106;;22376:9;22370:4;22366:20;22360:3;22349:9;22345:19;22338:49;22401:108;22504:4;22495:6;22401:108;;;22393:116;;22558:9;22552:4;22548:20;22542:3;22531:9;22527:19;22520:49;22583:110;22688:4;22679:6;22583:110;;;22575:118;;22742:9;22736:4;22732:20;22726:3;22715:9;22711:19;22704:49;22767:94;22856:4;22847:6;22767:94;;;22759:102;;22910:9;22904:4;22900:20;22894:3;22883:9;22879:19;22872:49;22935:108;23038:4;23029:6;22935:108;;;22927:116;;23092:9;23086:4;23082:20;23076:3;23065:9;23061:19;23054:49;23117:110;23222:4;23213:6;23117:110;;;23109:118;;23276:9;23270:4;23266:20;23260:3;23249:9;23245:19;23238:49;23301:98;23394:4;23385:6;23301:98;;;23293:106;21601:1808;-1:-1;;;;;;;;;;;;21601:1808;23416:181;23518:2;23503:18;;23532:55;23507:9;23560:6;23532:55;;23604:851;23878:3;23893:47;;;23863:19;;23954:66;23863:19;24006:6;23954:66;;;23946:74;;24068:9;24062:4;24058:20;24053:2;24042:9;24038:18;24031:48;24093:68;24156:4;24147:6;24093:68;;;24085:76;;24209:9;24203:4;24199:20;24194:2;24183:9;24179:18;24172:48;24234:68;24297:4;24288:6;24234:68;;;24226:76;;24313:58;24367:2;24356:9;24352:18;24343:6;24313:58;;;24382:63;24440:3;24429:9;24425:19;24416:6;24382:63;;;23849:606;;;;;;;;;24462:510;24658:2;24672:47;;;24643:18;;24733:78;24643:18;24797:6;24789;24733:78;;;24725:86;;24859:9;24853:4;24849:20;24844:2;24833:9;24829:18;24822:48;24884:78;24957:4;24948:6;24940;24884:78;;24979:603;25199:2;25213:47;;;25184:18;;25274:78;25184:18;25338:6;25330;25274:78;;;25266:86;;25400:9;25394:4;25390:20;25385:2;25374:9;25370:18;25363:48;25425:78;25498:4;25489:6;25481;25425:78;;;25417:86;;25514:58;25568:2;25557:9;25553:18;25544:6;25514:58;;25589:374;25741:2;25755:47;;;25726:18;;25816:68;25726:18;25870:6;25816:68;;;25808:76;;25895:58;25949:2;25938:9;25934:18;25925:6;25895:58;;25970:387;26151:2;26165:47;;;26136:18;;26226:121;26136:18;26226:121;;26364:387;26545:2;26559:47;;;26530:18;;26620:121;26530:18;26620:121;;26758:387;26939:2;26953:47;;;26924:18;;27014:121;26924:18;27014:121;;27152:387;27333:2;27347:47;;;27318:18;;27408:121;27318:18;27408:121;;27546:387;27727:2;27741:47;;;27712:18;;27802:121;27712:18;27802:121;;27940:387;28121:2;28135:47;;;28106:18;;28196:121;28106:18;28196:121;;28334:931;28648:3;28663:47;;;28633:19;;28724:106;28633:19;28816:6;28724:106;;;28716:114;;28841:62;28899:2;28888:9;28884:18;28875:6;28841:62;;;28951:9;28945:4;28941:20;28936:2;28925:9;28921:18;28914:48;28976:66;29037:4;29028:6;28976:66;;;28968:74;;29053:62;29111:2;29100:9;29096:18;29087:6;29053:62;;;29164:9;29158:4;29154:20;29148:3;29137:9;29133:19;29126:49;29189:66;29250:4;29241:6;29189:66;;30186:193;30294:2;30279:18;;30308:61;30283:9;30342:6;30308:61;;30386:479;30568:2;30553:18;;30582:61;30557:9;30616:6;30582:61;;;30691:9;30685:4;30681:20;30676:2;30665:9;30661:18;30654:48;30716:66;30777:4;30768:6;30716:66;;;30708:74;;30793:62;30851:2;30840:9;30836:18;30827:6;30793:62;;30872:665;31100:3;31085:19;;31115:61;31089:9;31149:6;31115:61;;;31224:9;31218:4;31214:20;31209:2;31198:9;31194:18;31187:48;31249:66;31310:4;31301:6;31249:66;;;31241:74;;31326:62;31384:2;31373:9;31369:18;31360:6;31326:62;;;31436:9;31430:4;31426:20;31421:2;31410:9;31406:18;31399:48;31461:66;31522:4;31513:6;31461:66;;31544:256;31606:2;31600:9;31632:17;;;31707:18;31692:34;;31728:22;;;31689:62;31686:2;;;31764:1;31761;31754:12;31686:2;31780;31773:22;31584:216;;-1:-1;31584:216;31807:254;;31946:18;31938:6;31935:30;31932:2;;;31978:1;31975;31968:12;31932:2;-1:-1;32051:4;32022;31999:17;;;;-1:-1;;31995:33;32041:15;;31869:192;32863:126;32977:4;32965:17;;32946:43;33398:112;33493:12;;33477:33;34782:128;-1:-1;;;;;34851:54;;34834:76;34917:92;34990:13;34983:21;;34966:43;35102:88;35180:4;35169:16;;35152:38;35514:145;35595:6;35590:3;35585;35572:30;-1:-1;35651:1;35633:16;;35626:27;35565:94;35668:268;35733:1;35740:101;35754:6;35751:1;35748:13;35740:101;;;35821:11;;;35815:18;35802:11;;;35795:39;35776:2;35769:10;35740:101;;;35856:6;35853:1;35850:13;35847:2;;;35921:1;35912:6;35907:3;35903:16;35896:27;35847:2;35717:219;;;;;35944:97;36032:2;36012:14;-1:-1;;36008:28;;35992:49

Swarm Source

bzzr://5928ff7306265bf144556be7dbf86563ab3ba908580420d043fa8791bb2da553

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.