ETH Price: $3,272.69 (+0.68%)
Gas: 1 Gwei

Token

HomelessFriends (HomelessFriends)
 

Overview

Max Total Supply

1,411 HomelessFriends

Holders

226

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 HomelessFriends
0x8f8a41ec46128eabbeb56b813ba7bcda9dab977c
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
HomelessFriends

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-03
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; 
abstract contract ReentrancyGuard { 
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
   _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
 
    function toString(uint256 value) internal pure returns (string memory) { 
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
 
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
 
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    function owner() public view virtual returns (address) {
        return _owner;
    } 
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
 
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
library Address { 
    function isContract(address account) internal view returns (bool) { 
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    } 
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
 
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    } 
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    } 
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
 
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
 
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else { 
            if (returndata.length > 0) { 

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
interface IERC721Receiver { 
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
 
interface IERC165 { 
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
abstract contract ERC165 is IERC165 { 
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
} 
interface IERC721 is IERC165 { 
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); 
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); 
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved); 
    function balanceOf(address owner) external view returns (uint256 balance); 
    function ownerOf(uint256 tokenId) external view returns (address owner); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function approve(address to, uint256 tokenId) external;
 
    function getApproved(uint256 tokenId) external view returns (address operator); 
    function setApprovalForAll(address operator, bool _approved) external; 
    function isApprovedForAll(address owner, address operator) external view returns (bool); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
} 
interface IERC721Enumerable is IERC721 { 
    function totalSupply() external view returns (uint256); 
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); 
    function tokenByIndex(uint256 index) external view returns (uint256);
}  
interface IERC721Metadata is IERC721 { 
    function name() external view returns (string memory); 
    function symbol() external view returns (string memory); 
    function tokenURI(uint256 tokenId) external view returns (string memory);
} 
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 1;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize; 
  string private _name; 
  string private _symbol; 
  mapping(uint256 => TokenOwnership) private _ownerships; 
  mapping(address => AddressData) private _addressData; 
  mapping(uint256 => address) private _tokenApprovals; 
  mapping(address => mapping(address => bool)) private _operatorApprovals; 
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  } 
  function totalSupply() public view override returns (uint256) {
    return currentIndex-1;
  } 
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index < totalSupply(), "ERC721A: global index out of bounds");
    return index;
  } 
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  } 
  function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC165, IERC165)
    returns (bool)
  {
    return
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  } 
  function balanceOf(address owner) public view override returns (uint256) {
    require(owner != address(0), "ERC721A: balance query for the zero address");
    return uint256(_addressData[owner].balance);
  }

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  } 
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  } 
  function name() public view virtual override returns (string memory) {
    return _name;
  } 
  function symbol() public view virtual override returns (string memory) {
    return _symbol;
  } 
  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),_getUriExtension()))
        : "";
  } 
  function _baseURI() internal view virtual returns (string memory) {
    return "";
  }

  function _getUriExtension() internal view virtual returns (string memory) {
    return "";
  }
 
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

    require(
      _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
      "ERC721A: approve caller is not owner nor approved for all"
    );

    _approve(to, tokenId, owner);
  } 
  function getApproved(uint256 tokenId) public view override returns (address) {
    require(_exists(tokenId), "ERC721A: approved query for nonexistent token");

    return _tokenApprovals[tokenId];
  } 
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");

    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_msgSender(), operator, approved);
  }
 
  function isApprovedForAll(address owner, address operator)
    public
    view
    virtual
    override
    returns (bool)
  {
    return _operatorApprovals[owner][operator];
  }
 
  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    _transfer(from, to, tokenId);
  } 
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    safeTransferFrom(from, to, tokenId, "");
  } 
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: transfer to non ERC721Receiver implementer"
    );
  } 
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  } 
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address"); 
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  } 
  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1); 
    _approve(address(0), tokenId, prevOwnership.addr);

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); 
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  } 
  function _approve(
    address to,
    uint256 tokenId,
    address owner
  ) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }

  uint256 public nextOwnerToExplicitlySet = 0; 
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    } 
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  } 
  function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) private returns (bool) {
    if (to.isContract()) {
      try
        IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
      returns (bytes4 retval) {
        return retval == IERC721Receiver(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  } 
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {} 
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}

contract HomelessFriends is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;


  uint256 public MAX_PER_Transtion = 10; // maximam amount that user can mint per transaction

  uint256 public  PRICE = 0.05 ether; //

  uint256 private TotalCollectionSize_ = 5999; // total number of nfts
  uint256 private constant MaxMintPerBatch_ = 10; //max mint per trx
 
  mapping(address => bool) private whitelistedAddressesForMint;


  bool public _revelNFT = false;


  string private _baseTokenURI;
  string private _uriBeforeRevel;

  uint public status = 0; //0 - sale pause, 1 - free sale, 2 - public sale

  constructor() ERC721A("HomelessFriends","HomelessFriends", MaxMintPerBatch_, TotalCollectionSize_) {
   
   

    _uriBeforeRevel = "https://gateway.pinata.cloud/ipfs/QmeuNPjDxyTv59Rb8gpxpX64pLnNVZicoUPqcaQmGT2of9/";
    _baseTokenURI= "https://gateway.pinata.cloud/ipfs/QmSXLWuZbTF9q2KdL273GBWEmmNmwH3fXBQPK552JfLLQh/";


  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }

function mint(uint256 quantity) external payable callerIsUser {
    if(status == 1){
    require(whitelistedAddressesForMint[msg.sender], "You are not White Listed For Free Mint");
    require(totalSupply() + quantity <= TotalCollectionSize_, "Reached max supply");
    require(quantity == 1, "One Address can mint 1 NFTs in Free Mint");
    _safeMint(msg.sender, 1);
    }
    else{
    require(status == 2, "Public Sale is not Active");
    require(quantity > 0,"Mint Quantity should be more than 0");
    require(quantity <= MAX_PER_Transtion,"Max 10 NFTs can be minted in a single Trx");
    require(totalSupply() + quantity <= TotalCollectionSize_, "Reached max supply");
    require(msg.value >= PRICE * quantity, "Not enough ETH in your wallet");
    _safeMint(msg.sender, quantity);  
    }
    }

   function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
    if(_revelNFT){
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),".json"))
        : "";
    } else{
      return _uriBeforeRevel;
    }
  }

  function isWhitelistedForFreeMint(address _user) public view returns (bool) {
    return whitelistedAddressesForMint[_user];
  }

  
  function addNewWhitelistUserForFreeMint(address[] calldata _users) public onlyOwner {
    // ["","",""]
    for(uint i=0;i<_users.length;i++)
        whitelistedAddressesForMint[_users[i]] = true;
  }
  
  function setURIbeforeRevel(string memory URI) external onlyOwner {
    _uriBeforeRevel = URI;
  }

  function setBaseURI(string memory baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }
  function _baseURI() internal view virtual override returns (string memory) {
    return _baseTokenURI;
  }
  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }
  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }

  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function reserve(address _address, uint256 quantity) public onlyOwner {
  require(quantity > 0,"Quantity should be more than 0");
  require(totalSupply() + quantity <= collectionSize, "Reached max supply");
  _safeMint(_address, quantity);
  }

  function changeRevelStatus() external onlyOwner {
    _revelNFT = !_revelNFT;
  }

  function changeMintPrice(uint256 _newPrice) external onlyOwner
  {
      PRICE = _newPrice;
  }

  function changeCollectionSize(uint256 _collectionSize) external onlyOwner
  {
      TotalCollectionSize_ = _collectionSize;
  }

  function changeMAX_PER_Transtion(uint256 q) external onlyOwner
  {
      MAX_PER_Transtion = q;
  }
 
  function giveaway(address a, uint q)public onlyOwner{
    require(totalSupply() + q <= collectionSize, "Reached max supply");
    require(q <= MAX_PER_Transtion, "Can't exceed more than 10");
    _safeMint(a, q);
  }


  function setStatus(uint256 s)external onlyOwner{
      status = s;
      if(s==1){
          PRICE=0 ether;
      }
      else{
          PRICE=0.05 ether;
      }
}

  function getStatus()public view returns(uint){
		return status;
      
  }
  
  function getcollectionSize()public view returns(uint){
      return TotalCollectionSize_;
  }
  
}

library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);

        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)

            for {
                let i := 0
            } lt(i, len) {

            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)

                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)

                mstore(resultPtr, out)

                resultPtr := add(resultPtr, 4)
            }

            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }

            mstore(result, encodedLen)
        }

        return string(result);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_Transtion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_revelNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addNewWhitelistUserForFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionSize","type":"uint256"}],"name":"changeCollectionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_Transtion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeRevelStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getcollectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"q","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelistedForFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setURIbeforeRevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600180556000600855600a805566b1a2bc2ec50000600b5561176f600c556000600e60006101000a81548160ff02191690831515021790555060006011553480156200004f57600080fd5b506040518060400160405280600f81526020017f486f6d656c657373467269656e647300000000000000000000000000000000008152506040518060400160405280600f81526020017f486f6d656c657373467269656e64730000000000000000000000000000000000815250600a600c54620000e1620000d56200022560201b60201c565b6200022d60201b60201c565b6000811162000127576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200011e9062000411565b60405180910390fd5b600082116200016d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016490620003ef565b60405180910390fd5b836002908051906020019062000185929190620002f1565b5082600390805190602001906200019e929190620002f1565b508160a08181525050806080818152505050505050600160098190555060405180608001604052806051815260200162005c096051913960109080519060200190620001ec929190620002f1565b5060405180608001604052806051815260200162005bb860519139600f90805190602001906200021e929190620002f1565b5062000547565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002ff9062000444565b90600052602060002090601f0160209004810192826200032357600085556200036f565b82601f106200033e57805160ff19168380011785556200036f565b828001600101855582156200036f579182015b828111156200036e57825182559160200191906001019062000351565b5b5090506200037e919062000382565b5090565b5b808211156200039d57600081600090555060010162000383565b5090565b6000620003b060278362000433565b9150620003bd82620004a9565b604082019050919050565b6000620003d7602e8362000433565b9150620003e482620004f8565b604082019050919050565b600060208201905081810360008301526200040a81620003a1565b9050919050565b600060208201905081810360008301526200042c81620003c8565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200045d57607f821691505b602082108114156200047457620004736200047a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516156366200058260003960008181612b1b01528181612b4401526132c3015260008181610b53015261213d01526156366000f3fe6080604052600436106102465760003560e01c8063715018a611610139578063af7b26e9116100b6578063cca3f4581161007a578063cca3f45814610855578063d04950a114610892578063d7224ba0146108bd578063dc33e681146108e8578063e985e9c514610925578063f2fde38b1461096257610246565b8063af7b26e914610786578063b88d4fde146107af578063bd0a8439146107d8578063c87b56dd146107ef578063cc47a40b1461082c57610246565b806395d89b41116100fd57806395d89b41146106d65780639801b11c14610701578063a0712d681461072a578063a22cb46514610746578063ac4460021461076f57610246565b8063715018a61461060157806375a88fd7146106185780638d859f3e146106435780638da5cb5b1461066e5780639231ab2a1461069957610246565b80633fd17366116101c75780635c37809d1161018b5780635c37809d1461050a57806362c6f7b9146105335780636352211e1461055e57806369ba1a751461059b57806370a08231146105c457610246565b80633fd173661461042757806342842e0e146104505780634e69d560146104795780634f6ccce7146104a457806355f804b3146104e157610246565b8063180e548e1161020e578063180e548e1461034257806318160ddd1461036b578063200d2ed21461039657806323b872dd146103c15780632f745c59146103ea57610246565b806301ffc9a71461024b578063050225ea1461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613b8c565b61098b565b60405161027f91906142ed565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190613aff565b610ad5565b005b3480156102bd57600080fd5b506102c6610c19565b6040516102d39190614308565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190613c2f565b610cab565b6040516103109190614286565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190613aff565b610d30565b005b34801561034e57600080fd5b5061036960048036038101906103649190613b3f565b610e49565b005b34801561037757600080fd5b50610380610f6a565b60405161038d9190614765565b60405180910390f35b3480156103a257600080fd5b506103ab610f7f565b6040516103b89190614765565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e391906139e9565b610f85565b005b3480156103f657600080fd5b50610411600480360381019061040c9190613aff565b610f95565b60405161041e9190614765565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190613c2f565b611193565b005b34801561045c57600080fd5b50610477600480360381019061047291906139e9565b611219565b005b34801561048557600080fd5b5061048e611239565b60405161049b9190614765565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190613c2f565b611243565b6040516104d89190614765565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190613be6565b611296565b005b34801561051657600080fd5b50610531600480360381019061052c9190613be6565b61132c565b005b34801561053f57600080fd5b506105486113c2565b60405161055591906142ed565b60405180910390f35b34801561056a57600080fd5b5061058560048036038101906105809190613c2f565b6113d5565b6040516105929190614286565b60405180910390f35b3480156105a757600080fd5b506105c260048036038101906105bd9190613c2f565b6113eb565b005b3480156105d057600080fd5b506105eb60048036038101906105e6919061397c565b611496565b6040516105f89190614765565b60405180910390f35b34801561060d57600080fd5b5061061661157f565b005b34801561062457600080fd5b5061062d611607565b60405161063a9190614765565b60405180910390f35b34801561064f57600080fd5b50610658611611565b6040516106659190614765565b60405180910390f35b34801561067a57600080fd5b50610683611617565b6040516106909190614286565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190613c2f565b611640565b6040516106cd919061474a565b60405180910390f35b3480156106e257600080fd5b506106eb611658565b6040516106f89190614308565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190613c2f565b6116ea565b005b610744600480360381019061073f9190613c2f565b611770565b005b34801561075257600080fd5b5061076d60048036038101906107689190613abf565b611aa1565b005b34801561077b57600080fd5b50610784611c22565b005b34801561079257600080fd5b506107ad60048036038101906107a89190613c2f565b611da3565b005b3480156107bb57600080fd5b506107d660048036038101906107d19190613a3c565b611e29565b005b3480156107e457600080fd5b506107ed611e85565b005b3480156107fb57600080fd5b5061081660048036038101906108119190613c2f565b611f2d565b6040516108239190614308565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190613aff565b61207c565b005b34801561086157600080fd5b5061087c6004803603810190610877919061397c565b6121be565b60405161088991906142ed565b60405180910390f35b34801561089e57600080fd5b506108a7612214565b6040516108b49190614765565b60405180910390f35b3480156108c957600080fd5b506108d261221a565b6040516108df9190614765565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a919061397c565b612220565b60405161091c9190614765565b60405180910390f35b34801561093157600080fd5b5061094c600480360381019061094791906139a9565b612232565b60405161095991906142ed565b60405180910390f35b34801561096e57600080fd5b506109896004803603810190610984919061397c565b6122c6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610abe57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ace5750610acd826123be565b5b9050919050565b610add612428565b73ffffffffffffffffffffffffffffffffffffffff16610afb611617565b73ffffffffffffffffffffffffffffffffffffffff1614610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b489061454a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081610b7b610f6a565b610b85919061489b565b1115610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd906143ca565b60405180910390fd5b600a54811115610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c029061440a565b60405180910390fd5b610c158282612430565b5050565b606060028054610c2890614af4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5490614af4565b8015610ca15780601f10610c7657610100808354040283529160200191610ca1565b820191906000526020600020905b815481529060010190602001808311610c8457829003601f168201915b5050505050905090565b6000610cb68261244e565b610cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cec9061470a565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d3b826113d5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da3906145ea565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dcb612428565b73ffffffffffffffffffffffffffffffffffffffff161480610dfa5750610df981610df4612428565b612232565b5b610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061446a565b60405180910390fd5b610e4483838361245c565b505050565b610e51612428565b73ffffffffffffffffffffffffffffffffffffffff16610e6f611617565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc9061454a565b60405180910390fd5b60005b82829050811015610f65576001600d6000858585818110610eec57610eeb614c5e565b5b9050602002016020810190610f01919061397c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f5d90614b57565b915050610ec8565b505050565b600060018054610f7a91906149b0565b905090565b60115481565b610f9083838361250e565b505050565b6000610fa083611496565b8210610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd89061432a565b60405180910390fd5b6000610feb610f6a565b905060008060005b83811015611151576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146110e557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561113d578684141561112e57819550505050505061118d565b838061113990614b57565b9450505b50808061114990614b57565b915050610ff3565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611184906146aa565b60405180910390fd5b92915050565b61119b612428565b73ffffffffffffffffffffffffffffffffffffffff166111b9611617565b73ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112069061454a565b60405180910390fd5b80600b8190555050565b61123483838360405180602001604052806000815250611e29565b505050565b6000601154905090565b600061124d610f6a565b821061128e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611285906143aa565b60405180910390fd5b819050919050565b61129e612428565b73ffffffffffffffffffffffffffffffffffffffff166112bc611617565b73ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113099061454a565b60405180910390fd5b80600f9080519060200190611328929190613700565b5050565b611334612428565b73ffffffffffffffffffffffffffffffffffffffff16611352611617565b73ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f9061454a565b60405180910390fd5b80601090805190602001906113be929190613700565b5050565b600e60009054906101000a900460ff1681565b60006113e082612ac7565b600001519050919050565b6113f3612428565b73ffffffffffffffffffffffffffffffffffffffff16611411611617565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e9061454a565b60405180910390fd5b806011819055506001811415611484576000600b81905550611493565b66b1a2bc2ec50000600b819055505b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe9061448a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611587612428565b73ffffffffffffffffffffffffffffffffffffffff166115a5611617565b73ffffffffffffffffffffffffffffffffffffffff16146115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f29061454a565b60405180910390fd5b6116056000612cca565b565b6000600c54905090565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611648613786565b61165182612ac7565b9050919050565b60606003805461166790614af4565b80601f016020809104026020016040519081016040528092919081815260200182805461169390614af4565b80156116e05780601f106116b5576101008083540402835291602001916116e0565b820191906000526020600020905b8154815290600101906020018083116116c357829003601f168201915b5050505050905090565b6116f2612428565b73ffffffffffffffffffffffffffffffffffffffff16611710611617565b73ffffffffffffffffffffffffffffffffffffffff1614611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d9061454a565b60405180910390fd5b80600c8190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d59061444a565b60405180910390fd5b6001601154141561191f57600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c906144aa565b60405180910390fd5b600c5481611881610f6a565b61188b919061489b565b11156118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c3906143ca565b60405180910390fd5b6001811461190f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119069061450a565b60405180910390fd5b61191a336001612430565b611a9e565b600260115414611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b9061452a565b60405180910390fd5b600081116119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e9061438a565b60405180910390fd5b600a548111156119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e3906145ca565b60405180910390fd5b600c54816119f8610f6a565b611a02919061489b565b1115611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906143ca565b60405180910390fd5b80600b54611a519190614922565b341015611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906144ca565b60405180910390fd5b611a9d3382612430565b5b50565b611aa9612428565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e9061458a565b60405180910390fd5b8060076000611b24612428565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bd1612428565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c1691906142ed565b60405180910390a35050565b611c2a612428565b73ffffffffffffffffffffffffffffffffffffffff16611c48611617565b73ffffffffffffffffffffffffffffffffffffffff1614611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c959061454a565b60405180910390fd5b60026009541415611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb906146ca565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611d1290614271565b60006040518083038185875af1925050503d8060008114611d4f576040519150601f19603f3d011682016040523d82523d6000602084013e611d54565b606091505b5050905080611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f9061460a565b60405180910390fd5b506001600981905550565b611dab612428565b73ffffffffffffffffffffffffffffffffffffffff16611dc9611617565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e169061454a565b60405180910390fd5b80600a8190555050565b611e3484848461250e565b611e4084848484612d8e565b611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e769061462a565b60405180910390fd5b50505050565b611e8d612428565b73ffffffffffffffffffffffffffffffffffffffff16611eab611617565b73ffffffffffffffffffffffffffffffffffffffff1614611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef89061454a565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6060611f388261244e565b611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e9061456a565b60405180910390fd5b600e60009054906101000a900460ff1615611fe9576000611f96612f25565b90506000815111611fb65760405180602001604052806000815250611fe1565b80611fc084612fb7565b604051602001611fd1929190614242565b6040516020818303038152906040525b915050612077565b60108054611ff690614af4565b80601f016020809104026020016040519081016040528092919081815260200182805461202290614af4565b801561206f5780601f106120445761010080835404028352916020019161206f565b820191906000526020600020905b81548152906001019060200180831161205257829003601f168201915b505050505090505b919050565b612084612428565b73ffffffffffffffffffffffffffffffffffffffff166120a2611617565b73ffffffffffffffffffffffffffffffffffffffff16146120f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ef9061454a565b60405180910390fd5b6000811161213b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121329061468a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081612165610f6a565b61216f919061489b565b11156121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a7906143ca565b60405180910390fd5b6121ba8282612430565b5050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a5481565b60085481565b600061222b82613118565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122ce612428565b73ffffffffffffffffffffffffffffffffffffffff166122ec611617565b73ffffffffffffffffffffffffffffffffffffffff1614612342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123399061454a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061434a565b60405180910390fd5b6123bb81612cca565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b61244a828260405180602001604052806000815250613201565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061251982612ac7565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612540612428565b73ffffffffffffffffffffffffffffffffffffffff16148061259c5750612565612428565b73ffffffffffffffffffffffffffffffffffffffff1661258484610cab565b73ffffffffffffffffffffffffffffffffffffffff16145b806125b857506125b782600001516125b2612428565b612232565b5b9050806125fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f1906145aa565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461266c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612663906144ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d3906143ea565b60405180910390fd5b6126e985858560016136e1565b6126f9600084846000015161245c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612767919061497c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661280b9190614855565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612911919061489b565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612a57576129878161244e565b15612a56576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612abf86868660016136e7565b505050505050565b612acf613786565b612ad88261244e565b612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e9061436a565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612b7b5760017f000000000000000000000000000000000000000000000000000000000000000084612b6e91906149b0565b612b78919061489b565b90505b60008390505b818110612c89576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c7557809350505050612cc5565b508080612c8190614aca565b915050612b81565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbc906146ea565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612daf8473ffffffffffffffffffffffffffffffffffffffff166136ed565b15612f18578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dd8612428565b8786866040518563ffffffff1660e01b8152600401612dfa94939291906142a1565b602060405180830381600087803b158015612e1457600080fd5b505af1925050508015612e4557506040513d601f19601f82011682018060405250810190612e429190613bb9565b60015b612ec8573d8060008114612e75576040519150601f19603f3d011682016040523d82523d6000602084013e612e7a565b606091505b50600081511415612ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb79061462a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f1d565b600190505b949350505050565b6060600f8054612f3490614af4565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6090614af4565b8015612fad5780601f10612f8257610100808354040283529160200191612fad565b820191906000526020600020905b815481529060010190602001808311612f9057829003601f168201915b5050505050905090565b60606000821415612fff576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613113565b600082905060005b6000821461303157808061301a90614b57565b915050600a8261302a91906148f1565b9150613007565b60008167ffffffffffffffff81111561304d5761304c614c8d565b5b6040519080825280601f01601f19166020018201604052801561307f5781602001600182028036833780820191505090505b5090505b6000851461310c5760018261309891906149b0565b9150600a856130a79190614ba0565b60306130b3919061489b565b60f81b8183815181106130c9576130c8614c5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561310591906148f1565b9450613083565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131809061442a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326f9061466a565b60405180910390fd5b6132818161244e565b156132c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b89061464a565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331b9061472a565b60405180910390fd5b61333160008583866136e1565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161342e9190614855565b6fffffffffffffffffffffffffffffffff1681526020018583602001516134559190614855565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156136c457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136646000888488612d8e565b6136a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369a9061462a565b60405180910390fd5b81806136ae90614b57565b92505080806136bc90614b57565b9150506135f3565b50806001819055506136d960008785886136e7565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461370c90614af4565b90600052602060002090601f01602090048101928261372e5760008555613775565b82601f1061374757805160ff1916838001178555613775565b82800160010185558215613775579182015b82811115613774578251825591602001919060010190613759565b5b50905061378291906137c0565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156137d95760008160009055506001016137c1565b5090565b60006137f06137eb846147a5565b614780565b90508281526020810184848401111561380c5761380b614ccb565b5b613817848285614a88565b509392505050565b600061383261382d846147d6565b614780565b90508281526020810184848401111561384e5761384d614ccb565b5b613859848285614a88565b509392505050565b600081359050613870816155a4565b92915050565b60008083601f84011261388c5761388b614cc1565b5b8235905067ffffffffffffffff8111156138a9576138a8614cbc565b5b6020830191508360208202830111156138c5576138c4614cc6565b5b9250929050565b6000813590506138db816155bb565b92915050565b6000813590506138f0816155d2565b92915050565b600081519050613905816155d2565b92915050565b600082601f8301126139205761391f614cc1565b5b81356139308482602086016137dd565b91505092915050565b600082601f83011261394e5761394d614cc1565b5b813561395e84826020860161381f565b91505092915050565b600081359050613976816155e9565b92915050565b60006020828403121561399257613991614cd5565b5b60006139a084828501613861565b91505092915050565b600080604083850312156139c0576139bf614cd5565b5b60006139ce85828601613861565b92505060206139df85828601613861565b9150509250929050565b600080600060608486031215613a0257613a01614cd5565b5b6000613a1086828701613861565b9350506020613a2186828701613861565b9250506040613a3286828701613967565b9150509250925092565b60008060008060808587031215613a5657613a55614cd5565b5b6000613a6487828801613861565b9450506020613a7587828801613861565b9350506040613a8687828801613967565b925050606085013567ffffffffffffffff811115613aa757613aa6614cd0565b5b613ab38782880161390b565b91505092959194509250565b60008060408385031215613ad657613ad5614cd5565b5b6000613ae485828601613861565b9250506020613af5858286016138cc565b9150509250929050565b60008060408385031215613b1657613b15614cd5565b5b6000613b2485828601613861565b9250506020613b3585828601613967565b9150509250929050565b60008060208385031215613b5657613b55614cd5565b5b600083013567ffffffffffffffff811115613b7457613b73614cd0565b5b613b8085828601613876565b92509250509250929050565b600060208284031215613ba257613ba1614cd5565b5b6000613bb0848285016138e1565b91505092915050565b600060208284031215613bcf57613bce614cd5565b5b6000613bdd848285016138f6565b91505092915050565b600060208284031215613bfc57613bfb614cd5565b5b600082013567ffffffffffffffff811115613c1a57613c19614cd0565b5b613c2684828501613939565b91505092915050565b600060208284031215613c4557613c44614cd5565b5b6000613c5384828501613967565b91505092915050565b613c65816149e4565b82525050565b613c74816149e4565b82525050565b613c83816149f6565b82525050565b6000613c9482614807565b613c9e818561481d565b9350613cae818560208601614a97565b613cb781614cda565b840191505092915050565b6000613ccd82614812565b613cd78185614839565b9350613ce7818560208601614a97565b613cf081614cda565b840191505092915050565b6000613d0682614812565b613d10818561484a565b9350613d20818560208601614a97565b80840191505092915050565b6000613d39602283614839565b9150613d4482614ceb565b604082019050919050565b6000613d5c602683614839565b9150613d6782614d3a565b604082019050919050565b6000613d7f602a83614839565b9150613d8a82614d89565b604082019050919050565b6000613da2602383614839565b9150613dad82614dd8565b604082019050919050565b6000613dc5602383614839565b9150613dd082614e27565b604082019050919050565b6000613de8601283614839565b9150613df382614e76565b602082019050919050565b6000613e0b602583614839565b9150613e1682614e9f565b604082019050919050565b6000613e2e601983614839565b9150613e3982614eee565b602082019050919050565b6000613e51603183614839565b9150613e5c82614f17565b604082019050919050565b6000613e74601e83614839565b9150613e7f82614f66565b602082019050919050565b6000613e97603983614839565b9150613ea282614f8f565b604082019050919050565b6000613eba602b83614839565b9150613ec582614fde565b604082019050919050565b6000613edd602683614839565b9150613ee88261502d565b604082019050919050565b6000613f00601d83614839565b9150613f0b8261507c565b602082019050919050565b6000613f23602683614839565b9150613f2e826150a5565b604082019050919050565b6000613f4660058361484a565b9150613f51826150f4565b600582019050919050565b6000613f69602883614839565b9150613f748261511d565b604082019050919050565b6000613f8c601983614839565b9150613f978261516c565b602082019050919050565b6000613faf602083614839565b9150613fba82615195565b602082019050919050565b6000613fd2602f83614839565b9150613fdd826151be565b604082019050919050565b6000613ff5601a83614839565b91506140008261520d565b602082019050919050565b6000614018603283614839565b915061402382615236565b604082019050919050565b600061403b602983614839565b915061404682615285565b604082019050919050565b600061405e602283614839565b9150614069826152d4565b604082019050919050565b600061408160008361482e565b915061408c82615323565b600082019050919050565b60006140a4601083614839565b91506140af82615326565b602082019050919050565b60006140c7603383614839565b91506140d28261534f565b604082019050919050565b60006140ea601d83614839565b91506140f58261539e565b602082019050919050565b600061410d602183614839565b9150614118826153c7565b604082019050919050565b6000614130601e83614839565b915061413b82615416565b602082019050919050565b6000614153602e83614839565b915061415e8261543f565b604082019050919050565b6000614176601f83614839565b91506141818261548e565b602082019050919050565b6000614199602f83614839565b91506141a4826154b7565b604082019050919050565b60006141bc602d83614839565b91506141c782615506565b604082019050919050565b60006141df602283614839565b91506141ea82615555565b604082019050919050565b60408201600082015161420b6000850182613c5c565b50602082015161421e6020850182614233565b50505050565b61422d81614a6a565b82525050565b61423c81614a74565b82525050565b600061424e8285613cfb565b915061425a8284613cfb565b915061426582613f39565b91508190509392505050565b600061427c82614074565b9150819050919050565b600060208201905061429b6000830184613c6b565b92915050565b60006080820190506142b66000830187613c6b565b6142c36020830186613c6b565b6142d06040830185614224565b81810360608301526142e28184613c89565b905095945050505050565b60006020820190506143026000830184613c7a565b92915050565b600060208201905081810360008301526143228184613cc2565b905092915050565b6000602082019050818103600083015261434381613d2c565b9050919050565b6000602082019050818103600083015261436381613d4f565b9050919050565b6000602082019050818103600083015261438381613d72565b9050919050565b600060208201905081810360008301526143a381613d95565b9050919050565b600060208201905081810360008301526143c381613db8565b9050919050565b600060208201905081810360008301526143e381613ddb565b9050919050565b6000602082019050818103600083015261440381613dfe565b9050919050565b6000602082019050818103600083015261442381613e21565b9050919050565b6000602082019050818103600083015261444381613e44565b9050919050565b6000602082019050818103600083015261446381613e67565b9050919050565b6000602082019050818103600083015261448381613e8a565b9050919050565b600060208201905081810360008301526144a381613ead565b9050919050565b600060208201905081810360008301526144c381613ed0565b9050919050565b600060208201905081810360008301526144e381613ef3565b9050919050565b6000602082019050818103600083015261450381613f16565b9050919050565b6000602082019050818103600083015261452381613f5c565b9050919050565b6000602082019050818103600083015261454381613f7f565b9050919050565b6000602082019050818103600083015261456381613fa2565b9050919050565b6000602082019050818103600083015261458381613fc5565b9050919050565b600060208201905081810360008301526145a381613fe8565b9050919050565b600060208201905081810360008301526145c38161400b565b9050919050565b600060208201905081810360008301526145e38161402e565b9050919050565b6000602082019050818103600083015261460381614051565b9050919050565b6000602082019050818103600083015261462381614097565b9050919050565b60006020820190508181036000830152614643816140ba565b9050919050565b60006020820190508181036000830152614663816140dd565b9050919050565b6000602082019050818103600083015261468381614100565b9050919050565b600060208201905081810360008301526146a381614123565b9050919050565b600060208201905081810360008301526146c381614146565b9050919050565b600060208201905081810360008301526146e381614169565b9050919050565b600060208201905081810360008301526147038161418c565b9050919050565b60006020820190508181036000830152614723816141af565b9050919050565b60006020820190508181036000830152614743816141d2565b9050919050565b600060408201905061475f60008301846141f5565b92915050565b600060208201905061477a6000830184614224565b92915050565b600061478a61479b565b90506147968282614b26565b919050565b6000604051905090565b600067ffffffffffffffff8211156147c0576147bf614c8d565b5b6147c982614cda565b9050602081019050919050565b600067ffffffffffffffff8211156147f1576147f0614c8d565b5b6147fa82614cda565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061486082614a2e565b915061486b83614a2e565b9250826fffffffffffffffffffffffffffffffff038211156148905761488f614bd1565b5b828201905092915050565b60006148a682614a6a565b91506148b183614a6a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148e6576148e5614bd1565b5b828201905092915050565b60006148fc82614a6a565b915061490783614a6a565b92508261491757614916614c00565b5b828204905092915050565b600061492d82614a6a565b915061493883614a6a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561497157614970614bd1565b5b828202905092915050565b600061498782614a2e565b915061499283614a2e565b9250828210156149a5576149a4614bd1565b5b828203905092915050565b60006149bb82614a6a565b91506149c683614a6a565b9250828210156149d9576149d8614bd1565b5b828203905092915050565b60006149ef82614a4a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614ab5578082015181840152602081019050614a9a565b83811115614ac4576000848401525b50505050565b6000614ad582614a6a565b91506000821415614ae957614ae8614bd1565b5b600182039050919050565b60006002820490506001821680614b0c57607f821691505b60208210811415614b2057614b1f614c2f565b5b50919050565b614b2f82614cda565b810181811067ffffffffffffffff82111715614b4e57614b4d614c8d565b5b80604052505050565b6000614b6282614a6a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b9557614b94614bd1565b5b600182019050919050565b6000614bab82614a6a565b9150614bb683614a6a565b925082614bc657614bc5614c00565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d696e74205175616e746974792073686f756c64206265206d6f72652074686160008201527f6e20300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f52656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616e277420657863656564206d6f7265207468616e20313000000000000000600082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f74205768697465204c697374656420466f722046726560008201527f65204d696e740000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045544820696e20796f75722077616c6c6574000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f6e6520416464726573732063616e206d696e742031204e46547320696e204660008201527f726565204d696e74000000000000000000000000000000000000000000000000602082015250565b7f5075626c69632053616c65206973206e6f742041637469766500000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d6178203130204e4654732063616e206265206d696e74656420696e2061207360008201527f696e676c65205472780000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5175616e746974792073686f756c64206265206d6f7265207468616e20300000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6155ad816149e4565b81146155b857600080fd5b50565b6155c4816149f6565b81146155cf57600080fd5b50565b6155db81614a02565b81146155e657600080fd5b50565b6155f281614a6a565b81146155fd57600080fd5b5056fea26469706673582212202c18b93757580dde2174c7eded5b23df7188d4fc4d8dc2a9ad40ee97aaf7b0fa64736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d53584c57755a6254463971324b644c323733474257456d6d4e6d77483366584251504b3535324a664c4c51682f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d65754e506a4478795476353952623867707870583634704c6e4e565a69636f5550716361516d4754326f66392f

Deployed Bytecode

0x6080604052600436106102465760003560e01c8063715018a611610139578063af7b26e9116100b6578063cca3f4581161007a578063cca3f45814610855578063d04950a114610892578063d7224ba0146108bd578063dc33e681146108e8578063e985e9c514610925578063f2fde38b1461096257610246565b8063af7b26e914610786578063b88d4fde146107af578063bd0a8439146107d8578063c87b56dd146107ef578063cc47a40b1461082c57610246565b806395d89b41116100fd57806395d89b41146106d65780639801b11c14610701578063a0712d681461072a578063a22cb46514610746578063ac4460021461076f57610246565b8063715018a61461060157806375a88fd7146106185780638d859f3e146106435780638da5cb5b1461066e5780639231ab2a1461069957610246565b80633fd17366116101c75780635c37809d1161018b5780635c37809d1461050a57806362c6f7b9146105335780636352211e1461055e57806369ba1a751461059b57806370a08231146105c457610246565b80633fd173661461042757806342842e0e146104505780634e69d560146104795780634f6ccce7146104a457806355f804b3146104e157610246565b8063180e548e1161020e578063180e548e1461034257806318160ddd1461036b578063200d2ed21461039657806323b872dd146103c15780632f745c59146103ea57610246565b806301ffc9a71461024b578063050225ea1461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613b8c565b61098b565b60405161027f91906142ed565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190613aff565b610ad5565b005b3480156102bd57600080fd5b506102c6610c19565b6040516102d39190614308565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190613c2f565b610cab565b6040516103109190614286565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190613aff565b610d30565b005b34801561034e57600080fd5b5061036960048036038101906103649190613b3f565b610e49565b005b34801561037757600080fd5b50610380610f6a565b60405161038d9190614765565b60405180910390f35b3480156103a257600080fd5b506103ab610f7f565b6040516103b89190614765565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e391906139e9565b610f85565b005b3480156103f657600080fd5b50610411600480360381019061040c9190613aff565b610f95565b60405161041e9190614765565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190613c2f565b611193565b005b34801561045c57600080fd5b50610477600480360381019061047291906139e9565b611219565b005b34801561048557600080fd5b5061048e611239565b60405161049b9190614765565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190613c2f565b611243565b6040516104d89190614765565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190613be6565b611296565b005b34801561051657600080fd5b50610531600480360381019061052c9190613be6565b61132c565b005b34801561053f57600080fd5b506105486113c2565b60405161055591906142ed565b60405180910390f35b34801561056a57600080fd5b5061058560048036038101906105809190613c2f565b6113d5565b6040516105929190614286565b60405180910390f35b3480156105a757600080fd5b506105c260048036038101906105bd9190613c2f565b6113eb565b005b3480156105d057600080fd5b506105eb60048036038101906105e6919061397c565b611496565b6040516105f89190614765565b60405180910390f35b34801561060d57600080fd5b5061061661157f565b005b34801561062457600080fd5b5061062d611607565b60405161063a9190614765565b60405180910390f35b34801561064f57600080fd5b50610658611611565b6040516106659190614765565b60405180910390f35b34801561067a57600080fd5b50610683611617565b6040516106909190614286565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190613c2f565b611640565b6040516106cd919061474a565b60405180910390f35b3480156106e257600080fd5b506106eb611658565b6040516106f89190614308565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190613c2f565b6116ea565b005b610744600480360381019061073f9190613c2f565b611770565b005b34801561075257600080fd5b5061076d60048036038101906107689190613abf565b611aa1565b005b34801561077b57600080fd5b50610784611c22565b005b34801561079257600080fd5b506107ad60048036038101906107a89190613c2f565b611da3565b005b3480156107bb57600080fd5b506107d660048036038101906107d19190613a3c565b611e29565b005b3480156107e457600080fd5b506107ed611e85565b005b3480156107fb57600080fd5b5061081660048036038101906108119190613c2f565b611f2d565b6040516108239190614308565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190613aff565b61207c565b005b34801561086157600080fd5b5061087c6004803603810190610877919061397c565b6121be565b60405161088991906142ed565b60405180910390f35b34801561089e57600080fd5b506108a7612214565b6040516108b49190614765565b60405180910390f35b3480156108c957600080fd5b506108d261221a565b6040516108df9190614765565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a919061397c565b612220565b60405161091c9190614765565b60405180910390f35b34801561093157600080fd5b5061094c600480360381019061094791906139a9565b612232565b60405161095991906142ed565b60405180910390f35b34801561096e57600080fd5b506109896004803603810190610984919061397c565b6122c6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610abe57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ace5750610acd826123be565b5b9050919050565b610add612428565b73ffffffffffffffffffffffffffffffffffffffff16610afb611617565b73ffffffffffffffffffffffffffffffffffffffff1614610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b489061454a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000176f81610b7b610f6a565b610b85919061489b565b1115610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd906143ca565b60405180910390fd5b600a54811115610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c029061440a565b60405180910390fd5b610c158282612430565b5050565b606060028054610c2890614af4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5490614af4565b8015610ca15780601f10610c7657610100808354040283529160200191610ca1565b820191906000526020600020905b815481529060010190602001808311610c8457829003601f168201915b5050505050905090565b6000610cb68261244e565b610cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cec9061470a565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d3b826113d5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da3906145ea565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dcb612428565b73ffffffffffffffffffffffffffffffffffffffff161480610dfa5750610df981610df4612428565b612232565b5b610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061446a565b60405180910390fd5b610e4483838361245c565b505050565b610e51612428565b73ffffffffffffffffffffffffffffffffffffffff16610e6f611617565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc9061454a565b60405180910390fd5b60005b82829050811015610f65576001600d6000858585818110610eec57610eeb614c5e565b5b9050602002016020810190610f01919061397c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f5d90614b57565b915050610ec8565b505050565b600060018054610f7a91906149b0565b905090565b60115481565b610f9083838361250e565b505050565b6000610fa083611496565b8210610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd89061432a565b60405180910390fd5b6000610feb610f6a565b905060008060005b83811015611151576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146110e557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561113d578684141561112e57819550505050505061118d565b838061113990614b57565b9450505b50808061114990614b57565b915050610ff3565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611184906146aa565b60405180910390fd5b92915050565b61119b612428565b73ffffffffffffffffffffffffffffffffffffffff166111b9611617565b73ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112069061454a565b60405180910390fd5b80600b8190555050565b61123483838360405180602001604052806000815250611e29565b505050565b6000601154905090565b600061124d610f6a565b821061128e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611285906143aa565b60405180910390fd5b819050919050565b61129e612428565b73ffffffffffffffffffffffffffffffffffffffff166112bc611617565b73ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113099061454a565b60405180910390fd5b80600f9080519060200190611328929190613700565b5050565b611334612428565b73ffffffffffffffffffffffffffffffffffffffff16611352611617565b73ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f9061454a565b60405180910390fd5b80601090805190602001906113be929190613700565b5050565b600e60009054906101000a900460ff1681565b60006113e082612ac7565b600001519050919050565b6113f3612428565b73ffffffffffffffffffffffffffffffffffffffff16611411611617565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e9061454a565b60405180910390fd5b806011819055506001811415611484576000600b81905550611493565b66b1a2bc2ec50000600b819055505b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe9061448a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611587612428565b73ffffffffffffffffffffffffffffffffffffffff166115a5611617565b73ffffffffffffffffffffffffffffffffffffffff16146115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f29061454a565b60405180910390fd5b6116056000612cca565b565b6000600c54905090565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611648613786565b61165182612ac7565b9050919050565b60606003805461166790614af4565b80601f016020809104026020016040519081016040528092919081815260200182805461169390614af4565b80156116e05780601f106116b5576101008083540402835291602001916116e0565b820191906000526020600020905b8154815290600101906020018083116116c357829003601f168201915b5050505050905090565b6116f2612428565b73ffffffffffffffffffffffffffffffffffffffff16611710611617565b73ffffffffffffffffffffffffffffffffffffffff1614611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d9061454a565b60405180910390fd5b80600c8190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d59061444a565b60405180910390fd5b6001601154141561191f57600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c906144aa565b60405180910390fd5b600c5481611881610f6a565b61188b919061489b565b11156118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c3906143ca565b60405180910390fd5b6001811461190f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119069061450a565b60405180910390fd5b61191a336001612430565b611a9e565b600260115414611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b9061452a565b60405180910390fd5b600081116119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e9061438a565b60405180910390fd5b600a548111156119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e3906145ca565b60405180910390fd5b600c54816119f8610f6a565b611a02919061489b565b1115611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906143ca565b60405180910390fd5b80600b54611a519190614922565b341015611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906144ca565b60405180910390fd5b611a9d3382612430565b5b50565b611aa9612428565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e9061458a565b60405180910390fd5b8060076000611b24612428565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bd1612428565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c1691906142ed565b60405180910390a35050565b611c2a612428565b73ffffffffffffffffffffffffffffffffffffffff16611c48611617565b73ffffffffffffffffffffffffffffffffffffffff1614611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c959061454a565b60405180910390fd5b60026009541415611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb906146ca565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611d1290614271565b60006040518083038185875af1925050503d8060008114611d4f576040519150601f19603f3d011682016040523d82523d6000602084013e611d54565b606091505b5050905080611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f9061460a565b60405180910390fd5b506001600981905550565b611dab612428565b73ffffffffffffffffffffffffffffffffffffffff16611dc9611617565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e169061454a565b60405180910390fd5b80600a8190555050565b611e3484848461250e565b611e4084848484612d8e565b611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e769061462a565b60405180910390fd5b50505050565b611e8d612428565b73ffffffffffffffffffffffffffffffffffffffff16611eab611617565b73ffffffffffffffffffffffffffffffffffffffff1614611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef89061454a565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6060611f388261244e565b611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e9061456a565b60405180910390fd5b600e60009054906101000a900460ff1615611fe9576000611f96612f25565b90506000815111611fb65760405180602001604052806000815250611fe1565b80611fc084612fb7565b604051602001611fd1929190614242565b6040516020818303038152906040525b915050612077565b60108054611ff690614af4565b80601f016020809104026020016040519081016040528092919081815260200182805461202290614af4565b801561206f5780601f106120445761010080835404028352916020019161206f565b820191906000526020600020905b81548152906001019060200180831161205257829003601f168201915b505050505090505b919050565b612084612428565b73ffffffffffffffffffffffffffffffffffffffff166120a2611617565b73ffffffffffffffffffffffffffffffffffffffff16146120f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ef9061454a565b60405180910390fd5b6000811161213b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121329061468a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000176f81612165610f6a565b61216f919061489b565b11156121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a7906143ca565b60405180910390fd5b6121ba8282612430565b5050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a5481565b60085481565b600061222b82613118565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122ce612428565b73ffffffffffffffffffffffffffffffffffffffff166122ec611617565b73ffffffffffffffffffffffffffffffffffffffff1614612342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123399061454a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061434a565b60405180910390fd5b6123bb81612cca565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b61244a828260405180602001604052806000815250613201565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061251982612ac7565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612540612428565b73ffffffffffffffffffffffffffffffffffffffff16148061259c5750612565612428565b73ffffffffffffffffffffffffffffffffffffffff1661258484610cab565b73ffffffffffffffffffffffffffffffffffffffff16145b806125b857506125b782600001516125b2612428565b612232565b5b9050806125fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f1906145aa565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461266c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612663906144ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d3906143ea565b60405180910390fd5b6126e985858560016136e1565b6126f9600084846000015161245c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612767919061497c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661280b9190614855565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612911919061489b565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612a57576129878161244e565b15612a56576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612abf86868660016136e7565b505050505050565b612acf613786565b612ad88261244e565b612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e9061436a565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a8310612b7b5760017f000000000000000000000000000000000000000000000000000000000000000a84612b6e91906149b0565b612b78919061489b565b90505b60008390505b818110612c89576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c7557809350505050612cc5565b508080612c8190614aca565b915050612b81565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbc906146ea565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612daf8473ffffffffffffffffffffffffffffffffffffffff166136ed565b15612f18578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dd8612428565b8786866040518563ffffffff1660e01b8152600401612dfa94939291906142a1565b602060405180830381600087803b158015612e1457600080fd5b505af1925050508015612e4557506040513d601f19601f82011682018060405250810190612e429190613bb9565b60015b612ec8573d8060008114612e75576040519150601f19603f3d011682016040523d82523d6000602084013e612e7a565b606091505b50600081511415612ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb79061462a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f1d565b600190505b949350505050565b6060600f8054612f3490614af4565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6090614af4565b8015612fad5780601f10612f8257610100808354040283529160200191612fad565b820191906000526020600020905b815481529060010190602001808311612f9057829003601f168201915b5050505050905090565b60606000821415612fff576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613113565b600082905060005b6000821461303157808061301a90614b57565b915050600a8261302a91906148f1565b9150613007565b60008167ffffffffffffffff81111561304d5761304c614c8d565b5b6040519080825280601f01601f19166020018201604052801561307f5781602001600182028036833780820191505090505b5090505b6000851461310c5760018261309891906149b0565b9150600a856130a79190614ba0565b60306130b3919061489b565b60f81b8183815181106130c9576130c8614c5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561310591906148f1565b9450613083565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131809061442a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326f9061466a565b60405180910390fd5b6132818161244e565b156132c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b89061464a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a831115613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331b9061472a565b60405180910390fd5b61333160008583866136e1565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161342e9190614855565b6fffffffffffffffffffffffffffffffff1681526020018583602001516134559190614855565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156136c457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136646000888488612d8e565b6136a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369a9061462a565b60405180910390fd5b81806136ae90614b57565b92505080806136bc90614b57565b9150506135f3565b50806001819055506136d960008785886136e7565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461370c90614af4565b90600052602060002090601f01602090048101928261372e5760008555613775565b82601f1061374757805160ff1916838001178555613775565b82800160010185558215613775579182015b82811115613774578251825591602001919060010190613759565b5b50905061378291906137c0565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156137d95760008160009055506001016137c1565b5090565b60006137f06137eb846147a5565b614780565b90508281526020810184848401111561380c5761380b614ccb565b5b613817848285614a88565b509392505050565b600061383261382d846147d6565b614780565b90508281526020810184848401111561384e5761384d614ccb565b5b613859848285614a88565b509392505050565b600081359050613870816155a4565b92915050565b60008083601f84011261388c5761388b614cc1565b5b8235905067ffffffffffffffff8111156138a9576138a8614cbc565b5b6020830191508360208202830111156138c5576138c4614cc6565b5b9250929050565b6000813590506138db816155bb565b92915050565b6000813590506138f0816155d2565b92915050565b600081519050613905816155d2565b92915050565b600082601f8301126139205761391f614cc1565b5b81356139308482602086016137dd565b91505092915050565b600082601f83011261394e5761394d614cc1565b5b813561395e84826020860161381f565b91505092915050565b600081359050613976816155e9565b92915050565b60006020828403121561399257613991614cd5565b5b60006139a084828501613861565b91505092915050565b600080604083850312156139c0576139bf614cd5565b5b60006139ce85828601613861565b92505060206139df85828601613861565b9150509250929050565b600080600060608486031215613a0257613a01614cd5565b5b6000613a1086828701613861565b9350506020613a2186828701613861565b9250506040613a3286828701613967565b9150509250925092565b60008060008060808587031215613a5657613a55614cd5565b5b6000613a6487828801613861565b9450506020613a7587828801613861565b9350506040613a8687828801613967565b925050606085013567ffffffffffffffff811115613aa757613aa6614cd0565b5b613ab38782880161390b565b91505092959194509250565b60008060408385031215613ad657613ad5614cd5565b5b6000613ae485828601613861565b9250506020613af5858286016138cc565b9150509250929050565b60008060408385031215613b1657613b15614cd5565b5b6000613b2485828601613861565b9250506020613b3585828601613967565b9150509250929050565b60008060208385031215613b5657613b55614cd5565b5b600083013567ffffffffffffffff811115613b7457613b73614cd0565b5b613b8085828601613876565b92509250509250929050565b600060208284031215613ba257613ba1614cd5565b5b6000613bb0848285016138e1565b91505092915050565b600060208284031215613bcf57613bce614cd5565b5b6000613bdd848285016138f6565b91505092915050565b600060208284031215613bfc57613bfb614cd5565b5b600082013567ffffffffffffffff811115613c1a57613c19614cd0565b5b613c2684828501613939565b91505092915050565b600060208284031215613c4557613c44614cd5565b5b6000613c5384828501613967565b91505092915050565b613c65816149e4565b82525050565b613c74816149e4565b82525050565b613c83816149f6565b82525050565b6000613c9482614807565b613c9e818561481d565b9350613cae818560208601614a97565b613cb781614cda565b840191505092915050565b6000613ccd82614812565b613cd78185614839565b9350613ce7818560208601614a97565b613cf081614cda565b840191505092915050565b6000613d0682614812565b613d10818561484a565b9350613d20818560208601614a97565b80840191505092915050565b6000613d39602283614839565b9150613d4482614ceb565b604082019050919050565b6000613d5c602683614839565b9150613d6782614d3a565b604082019050919050565b6000613d7f602a83614839565b9150613d8a82614d89565b604082019050919050565b6000613da2602383614839565b9150613dad82614dd8565b604082019050919050565b6000613dc5602383614839565b9150613dd082614e27565b604082019050919050565b6000613de8601283614839565b9150613df382614e76565b602082019050919050565b6000613e0b602583614839565b9150613e1682614e9f565b604082019050919050565b6000613e2e601983614839565b9150613e3982614eee565b602082019050919050565b6000613e51603183614839565b9150613e5c82614f17565b604082019050919050565b6000613e74601e83614839565b9150613e7f82614f66565b602082019050919050565b6000613e97603983614839565b9150613ea282614f8f565b604082019050919050565b6000613eba602b83614839565b9150613ec582614fde565b604082019050919050565b6000613edd602683614839565b9150613ee88261502d565b604082019050919050565b6000613f00601d83614839565b9150613f0b8261507c565b602082019050919050565b6000613f23602683614839565b9150613f2e826150a5565b604082019050919050565b6000613f4660058361484a565b9150613f51826150f4565b600582019050919050565b6000613f69602883614839565b9150613f748261511d565b604082019050919050565b6000613f8c601983614839565b9150613f978261516c565b602082019050919050565b6000613faf602083614839565b9150613fba82615195565b602082019050919050565b6000613fd2602f83614839565b9150613fdd826151be565b604082019050919050565b6000613ff5601a83614839565b91506140008261520d565b602082019050919050565b6000614018603283614839565b915061402382615236565b604082019050919050565b600061403b602983614839565b915061404682615285565b604082019050919050565b600061405e602283614839565b9150614069826152d4565b604082019050919050565b600061408160008361482e565b915061408c82615323565b600082019050919050565b60006140a4601083614839565b91506140af82615326565b602082019050919050565b60006140c7603383614839565b91506140d28261534f565b604082019050919050565b60006140ea601d83614839565b91506140f58261539e565b602082019050919050565b600061410d602183614839565b9150614118826153c7565b604082019050919050565b6000614130601e83614839565b915061413b82615416565b602082019050919050565b6000614153602e83614839565b915061415e8261543f565b604082019050919050565b6000614176601f83614839565b91506141818261548e565b602082019050919050565b6000614199602f83614839565b91506141a4826154b7565b604082019050919050565b60006141bc602d83614839565b91506141c782615506565b604082019050919050565b60006141df602283614839565b91506141ea82615555565b604082019050919050565b60408201600082015161420b6000850182613c5c565b50602082015161421e6020850182614233565b50505050565b61422d81614a6a565b82525050565b61423c81614a74565b82525050565b600061424e8285613cfb565b915061425a8284613cfb565b915061426582613f39565b91508190509392505050565b600061427c82614074565b9150819050919050565b600060208201905061429b6000830184613c6b565b92915050565b60006080820190506142b66000830187613c6b565b6142c36020830186613c6b565b6142d06040830185614224565b81810360608301526142e28184613c89565b905095945050505050565b60006020820190506143026000830184613c7a565b92915050565b600060208201905081810360008301526143228184613cc2565b905092915050565b6000602082019050818103600083015261434381613d2c565b9050919050565b6000602082019050818103600083015261436381613d4f565b9050919050565b6000602082019050818103600083015261438381613d72565b9050919050565b600060208201905081810360008301526143a381613d95565b9050919050565b600060208201905081810360008301526143c381613db8565b9050919050565b600060208201905081810360008301526143e381613ddb565b9050919050565b6000602082019050818103600083015261440381613dfe565b9050919050565b6000602082019050818103600083015261442381613e21565b9050919050565b6000602082019050818103600083015261444381613e44565b9050919050565b6000602082019050818103600083015261446381613e67565b9050919050565b6000602082019050818103600083015261448381613e8a565b9050919050565b600060208201905081810360008301526144a381613ead565b9050919050565b600060208201905081810360008301526144c381613ed0565b9050919050565b600060208201905081810360008301526144e381613ef3565b9050919050565b6000602082019050818103600083015261450381613f16565b9050919050565b6000602082019050818103600083015261452381613f5c565b9050919050565b6000602082019050818103600083015261454381613f7f565b9050919050565b6000602082019050818103600083015261456381613fa2565b9050919050565b6000602082019050818103600083015261458381613fc5565b9050919050565b600060208201905081810360008301526145a381613fe8565b9050919050565b600060208201905081810360008301526145c38161400b565b9050919050565b600060208201905081810360008301526145e38161402e565b9050919050565b6000602082019050818103600083015261460381614051565b9050919050565b6000602082019050818103600083015261462381614097565b9050919050565b60006020820190508181036000830152614643816140ba565b9050919050565b60006020820190508181036000830152614663816140dd565b9050919050565b6000602082019050818103600083015261468381614100565b9050919050565b600060208201905081810360008301526146a381614123565b9050919050565b600060208201905081810360008301526146c381614146565b9050919050565b600060208201905081810360008301526146e381614169565b9050919050565b600060208201905081810360008301526147038161418c565b9050919050565b60006020820190508181036000830152614723816141af565b9050919050565b60006020820190508181036000830152614743816141d2565b9050919050565b600060408201905061475f60008301846141f5565b92915050565b600060208201905061477a6000830184614224565b92915050565b600061478a61479b565b90506147968282614b26565b919050565b6000604051905090565b600067ffffffffffffffff8211156147c0576147bf614c8d565b5b6147c982614cda565b9050602081019050919050565b600067ffffffffffffffff8211156147f1576147f0614c8d565b5b6147fa82614cda565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061486082614a2e565b915061486b83614a2e565b9250826fffffffffffffffffffffffffffffffff038211156148905761488f614bd1565b5b828201905092915050565b60006148a682614a6a565b91506148b183614a6a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148e6576148e5614bd1565b5b828201905092915050565b60006148fc82614a6a565b915061490783614a6a565b92508261491757614916614c00565b5b828204905092915050565b600061492d82614a6a565b915061493883614a6a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561497157614970614bd1565b5b828202905092915050565b600061498782614a2e565b915061499283614a2e565b9250828210156149a5576149a4614bd1565b5b828203905092915050565b60006149bb82614a6a565b91506149c683614a6a565b9250828210156149d9576149d8614bd1565b5b828203905092915050565b60006149ef82614a4a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614ab5578082015181840152602081019050614a9a565b83811115614ac4576000848401525b50505050565b6000614ad582614a6a565b91506000821415614ae957614ae8614bd1565b5b600182039050919050565b60006002820490506001821680614b0c57607f821691505b60208210811415614b2057614b1f614c2f565b5b50919050565b614b2f82614cda565b810181811067ffffffffffffffff82111715614b4e57614b4d614c8d565b5b80604052505050565b6000614b6282614a6a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b9557614b94614bd1565b5b600182019050919050565b6000614bab82614a6a565b9150614bb683614a6a565b925082614bc657614bc5614c00565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d696e74205175616e746974792073686f756c64206265206d6f72652074686160008201527f6e20300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f52656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616e277420657863656564206d6f7265207468616e20313000000000000000600082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f74205768697465204c697374656420466f722046726560008201527f65204d696e740000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045544820696e20796f75722077616c6c6574000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f6e6520416464726573732063616e206d696e742031204e46547320696e204660008201527f726565204d696e74000000000000000000000000000000000000000000000000602082015250565b7f5075626c69632053616c65206973206e6f742041637469766500000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d6178203130204e4654732063616e206265206d696e74656420696e2061207360008201527f696e676c65205472780000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5175616e746974792073686f756c64206265206d6f7265207468616e20300000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6155ad816149e4565b81146155b857600080fd5b50565b6155c4816149f6565b81146155cf57600080fd5b50565b6155db81614a02565b81146155e657600080fd5b50565b6155f281614a6a565b81146155fd57600080fd5b5056fea26469706673582212202c18b93757580dde2174c7eded5b23df7188d4fc4d8dc2a9ad40ee97aaf7b0fa64736f6c63430008070033

Deployed Bytecode Sourcemap

19852:4759:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11169:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24017:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12741:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13942:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13558:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22344:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10137:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20418:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14625:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10420:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23668:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14772:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24424:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10238:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22661:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22556:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20310:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12618:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24245:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11544:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2626:103;;;;;;;;;;;;;:::i;:::-;;24509:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20052:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2403:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22986:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12840:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23772:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20951:819;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14151:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23139:181;;;;;;;;;;;;;:::i;:::-;;23908:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14934:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23579:83;;;;;;;;;;;;;:::i;:::-;;21777:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23326:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22204:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19955:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18064:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22875:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14432:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2738:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11169:370;11296:4;11341:25;11326:40;;;:11;:40;;;;:99;;;;11392:33;11377:48;;;:11;:48;;;;11326:99;:160;;;;11451:35;11436:50;;;:11;:50;;;;11326:160;:207;;;;11497:36;11521:11;11497:23;:36::i;:::-;11326:207;11312:221;;11169:370;;;:::o;24017:220::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24105:14:::1;24100:1;24084:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:35;;24076:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24162:17;;24157:1;:22;;24149:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24216:15;24226:1;24229;24216:9;:15::i;:::-;24017:220:::0;;:::o;12741:94::-;12795:13;12824:5;12817:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12741:94;:::o;13942:204::-;14010:7;14034:16;14042:7;14034;:16::i;:::-;14026:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14116:15;:24;14132:7;14116:24;;;;;;;;;;;;;;;;;;;;;14109:31;;13942:204;;;:::o;13558:379::-;13627:13;13643:24;13659:7;13643:15;:24::i;:::-;13627:40;;13688:5;13682:11;;:2;:11;;;;13674:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;13773:5;13757:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;13782:37;13799:5;13806:12;:10;:12::i;:::-;13782:16;:37::i;:::-;13757:62;13741:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;13903:28;13912:2;13916:7;13925:5;13903:8;:28::i;:::-;13620:317;13558:379;;:::o;22344:204::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22458:6:::1;22454:88;22469:6;;:13;;22467:1;:15;22454:88;;;22538:4;22497:27;:38;22525:6;;22532:1;22525:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22497:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;22483:3;;;;;:::i;:::-;;;;22454:88;;;;22344:204:::0;;:::o;10137:96::-;10190:7;10226:1;10213:12;;:14;;;;:::i;:::-;10206:21;;10137:96;:::o;20418:22::-;;;;:::o;14625:142::-;14733:28;14743:4;14749:2;14753:7;14733:9;:28::i;:::-;14625:142;;;:::o;10420:744::-;10529:7;10564:16;10574:5;10564:9;:16::i;:::-;10556:5;:24;10548:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10626:22;10651:13;:11;:13::i;:::-;10626:38;;10671:19;10701:25;10751:9;10746:350;10770:14;10766:1;:18;10746:350;;;10800:31;10834:11;:14;10846:1;10834:14;;;;;;;;;;;10800:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10887:1;10861:28;;:9;:14;;;:28;;;10857:89;;10922:9;:14;;;10902:34;;10857:89;10979:5;10958:26;;:17;:26;;;10954:135;;;11016:5;11001:11;:20;10997:59;;;11043:1;11036:8;;;;;;;;;10997:59;11066:13;;;;;:::i;:::-;;;;10954:135;10791:305;10786:3;;;;;:::i;:::-;;;;10746:350;;;;11102:56;;;;;;;;;;:::i;:::-;;;;;;;;10420:744;;;;;:::o;23668:98::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23751:9:::1;23743:5;:17;;;;23668:98:::0;:::o;14772:157::-;14884:39;14901:4;14907:2;14911:7;14884:39;;;;;;;;;;;;:16;:39::i;:::-;14772:157;;;:::o;24424:77::-;24464:4;24481:6;;24474:13;;24424:77;:::o;10238:177::-;10305:7;10337:13;:11;:13::i;:::-;10329:5;:21;10321:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;10404:5;10397:12;;10238:177;;;:::o;22661:98::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22746:7:::1;22730:13;:23;;;;;;;;;;;;:::i;:::-;;22661:98:::0;:::o;22556:99::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22646:3:::1;22628:15;:21;;;;;;;;;;;;:::i;:::-;;22556:99:::0;:::o;20310:29::-;;;;;;;;;;;;;:::o;12618:118::-;12682:7;12705:20;12717:7;12705:11;:20::i;:::-;:25;;;12698:32;;12618:118;;;:::o;24245:173::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24310:1:::1;24301:6;:10;;;;24326:1;24323;:4;24320:95;;;24347:7;24341:5;:13;;;;24320:95;;;24395:10;24389:5;:16;;;;24320:95;24245:173:::0;:::o;11544:211::-;11608:7;11649:1;11632:19;;:5;:19;;;;11624:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;11721:12;:19;11734:5;11721:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;11713:36;;11706:43;;11544:211;;;:::o;2626:103::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2691:30:::1;2718:1;2691:18;:30::i;:::-;2626:103::o:0;24509:95::-;24557:4;24578:20;;24571:27;;24509:95;:::o;20052:34::-;;;;:::o;2403:87::-;2449:7;2476:6;;;;;;;;;;;2469:13;;2403:87;:::o;22986:147::-;23067:21;;:::i;:::-;23107:20;23119:7;23107:11;:20::i;:::-;23100:27;;22986:147;;;:::o;12840:98::-;12896:13;12925:7;12918:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12840:98;:::o;23772:130::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23881:15:::1;23858:20;:38;;;;23772:130:::0;:::o;20951:819::-;20888:10;20875:23;;:9;:23;;;20867:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;21033:1:::1;21023:6;;:11;21020:743;;;21050:27;:39;21078:10;21050:39;;;;;;;;;;;;;;;;;;;;;;;;;21042:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;21175:20;;21163:8;21147:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;21139:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21245:1;21233:8;:13;21225:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;21298:24;21308:10;21320:1;21298:9;:24::i;:::-;21020:743;;;21365:1;21355:6;;:11;21347:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21422:1;21411:8;:12;21403:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;21489:17;;21477:8;:29;;21469:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;21594:20;;21582:8;21566:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;21558:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21673:8;21665:5;;:16;;;;:::i;:::-;21652:9;:29;;21644:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21722:31;21732:10;21744:8;21722:9;:31::i;:::-;21020:743;20951:819:::0;:::o;14151:274::-;14254:12;:10;:12::i;:::-;14242:24;;:8;:24;;;;14234:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14351:8;14306:18;:32;14325:12;:10;:12::i;:::-;14306:32;;;;;;;;;;;;;;;:42;14339:8;14306:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;14400:8;14371:48;;14386:12;:10;:12::i;:::-;14371:48;;;14410:8;14371:48;;;;;;:::i;:::-;;;;;;;;14151:274;;:::o;23139:181::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;185:1:::1;331:7;;:19;;323:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;185:1;392:7;:18;;;;23204:12:::2;23222:10;:15;;23245:21;23222:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23203:68;;;23286:7;23278:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;23196:124;141:1:::1;435:7;:22;;;;23139:181::o:0;23908:102::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24003:1:::1;23983:17;:21;;;;23908:102:::0;:::o;14934:311::-;15071:28;15081:4;15087:2;15091:7;15071:9;:28::i;:::-;15122:48;15145:4;15151:2;15155:7;15164:5;15122:22;:48::i;:::-;15106:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;14934:311;;;;:::o;23579:83::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23647:9:::1;;;;;;;;;;;23646:10;23634:9;;:22;;;;;;;;;;;;;;;;;;23579:83::o:0;21777:421::-;21850:13;21880:16;21888:7;21880;:16::i;:::-;21872:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;21957:9;;;;;;;;;;;21954:239;;;21974:21;21998:10;:8;:10::i;:::-;21974:34;;22053:1;22035:7;22029:21;:25;:112;;;;;;;;;;;;;;;;;22090:7;22099:18;:7;:16;:18::i;:::-;22073:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22029:112;22015:126;;;;;21954:239;22170:15;22163:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21777:421;;;;:::o;23326:247::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23420:1:::1;23409:8;:12;23401:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;23496:14;23484:8;23468:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;23460:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23538:29;23548:8;23558;23538:9;:29::i;:::-;23326:247:::0;;:::o;22204:130::-;22274:4;22294:27;:34;22322:5;22294:34;;;;;;;;;;;;;;;;;;;;;;;;;22287:41;;22204:130;;;:::o;19955:37::-;;;;:::o;18064:43::-;;;;:::o;22875:107::-;22933:7;22956:20;22970:5;22956:13;:20::i;:::-;22949:27;;22875:107;;;:::o;14432:186::-;14554:4;14577:18;:25;14596:5;14577:25;;;;;;;;;;;;;;;:35;14603:8;14577:35;;;;;;;;;;;;;;;;;;;;;;;;;14570:42;;14432:186;;;;:::o;2738:201::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2847:1:::1;2827:22;;:8;:22;;;;2819:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2903:28;2922:8;2903:18;:28::i;:::-;2738:201:::0;:::o;7056:157::-;7141:4;7180:25;7165:40;;;:11;:40;;;;7158:47;;7056:157;;;:::o;1946:98::-;1999:7;2026:10;2019:17;;1946:98;:::o;15361:::-;15426:27;15436:2;15440:8;15426:27;;;;;;;;;;;;:9;:27::i;:::-;15361:98;;:::o;15250:105::-;15307:4;15337:12;;15327:7;:22;15320:29;;15250:105;;;:::o;17886:172::-;18010:2;17983:15;:24;17999:7;17983:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;18044:7;18040:2;18024:28;;18033:5;18024:28;;;;;;;;;;;;17886:172;;;:::o;16621:1260::-;16718:35;16756:20;16768:7;16756:11;:20::i;:::-;16718:58;;16785:22;16827:13;:18;;;16811:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;16880:12;:10;:12::i;:::-;16856:36;;:20;16868:7;16856:11;:20::i;:::-;:36;;;16811:81;:142;;;;16903:50;16920:13;:18;;;16940:12;:10;:12::i;:::-;16903:16;:50::i;:::-;16811:142;16785:169;;16979:17;16963:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;17111:4;17089:26;;:13;:18;;;:26;;;17073:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;17200:1;17186:16;;:2;:16;;;;17178:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;17253:43;17275:4;17281:2;17285:7;17294:1;17253:21;:43::i;:::-;17304:49;17321:1;17325:7;17334:13;:18;;;17304:8;:49::i;:::-;17392:1;17362:12;:18;17375:4;17362:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17428:1;17400:12;:16;17413:2;17400:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17459:43;;;;;;;;17474:2;17459:43;;;;;;17485:15;17459:43;;;;;17436:11;:20;17448:7;17436:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17510:19;17542:1;17532:7;:11;;;;:::i;:::-;17510:33;;17595:1;17554:43;;:11;:24;17566:11;17554:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;17550:236;;;17612:20;17620:11;17612:7;:20::i;:::-;17608:171;;;17672:97;;;;;;;;17699:13;:18;;;17672:97;;;;;;17730:13;:28;;;17672:97;;;;;17645:11;:24;17657:11;17645:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17608:171;17550:236;17818:7;17814:2;17799:27;;17808:4;17799:27;;;;;;;;;;;;17833:42;17854:4;17860:2;17864:7;17873:1;17833:20;:42::i;:::-;16711:1170;;;16621:1260;;;:::o;12007:606::-;12083:21;;:::i;:::-;12124:16;12132:7;12124;:16::i;:::-;12116:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12196:26;12244:12;12233:7;:23;12229:93;;12313:1;12298:12;12288:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;12267:47;;12229:93;12335:12;12350:7;12335:22;;12330:212;12367:18;12359:4;:26;12330:212;;12404:31;12438:11;:17;12450:4;12438:17;;;;;;;;;;;12404:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12494:1;12468:28;;:9;:14;;;:28;;;12464:71;;12516:9;12509:16;;;;;;;12464:71;12395:147;12387:6;;;;;:::i;:::-;;;;12330:212;;;;12550:57;;;;;;;;;;:::i;:::-;;;;;;;;12007:606;;;;:::o;2948:191::-;3022:16;3041:6;;;;;;;;;;;3022:25;;3067:8;3058:6;;:17;;;;;;;;;;;;;;;;;;3122:8;3091:40;;3112:8;3091:40;;;;;;;;;;;;3011:128;2948:191;:::o;18864:690::-;19001:4;19018:15;:2;:13;;;:15::i;:::-;19014:535;;;19073:2;19057:36;;;19094:12;:10;:12::i;:::-;19108:4;19114:7;19123:5;19057:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19044:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19305:1;19288:6;:13;:18;19284:215;;;19321:61;;;;;;;;;;:::i;:::-;;;;;;;;19284:215;19467:6;19461:13;19452:6;19448:2;19444:15;19437:38;19044:464;19189:45;;;19179:55;;;:6;:55;;;;19172:62;;;;;19014:535;19537:4;19530:11;;18864:690;;;;;;;:::o;22763:108::-;22823:13;22852;22845:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22763:108;:::o;563:533::-;619:13;659:1;650:5;:10;646:53;;;677:10;;;;;;;;;;;;;;;;;;;;;646:53;709:12;724:5;709:20;;740:14;765:78;780:1;772:4;:9;765:78;;798:8;;;;;:::i;:::-;;;;829:2;821:10;;;;;:::i;:::-;;;765:78;;;853:19;885:6;875:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;853:39;;903:154;919:1;910:5;:10;903:154;;947:1;937:11;;;;;:::i;:::-;;;1014:2;1006:5;:10;;;;:::i;:::-;993:2;:24;;;;:::i;:::-;980:39;;963:6;970;963:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1043:2;1034:11;;;;;:::i;:::-;;;903:154;;;1081:6;1067:21;;;;;563:533;;;;:::o;11761:240::-;11822:7;11871:1;11854:19;;:5;:19;;;;11838:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;11962:12;:19;11975:5;11962:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;11954:41;;11947:48;;11761:240;;;:::o;15464:1152::-;15569:20;15592:12;;15569:35;;15633:1;15619:16;;:2;:16;;;;15611:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15690:21;15698:12;15690:7;:21::i;:::-;15689:22;15681:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15772:12;15760:8;:24;;15752:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15832:61;15862:1;15866:2;15870:12;15884:8;15832:21;:61::i;:::-;15902:30;15935:12;:16;15948:2;15935:16;;;;;;;;;;;;;;;15902:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15977:119;;;;;;;;16027:8;15997:11;:19;;;:39;;;;:::i;:::-;15977:119;;;;;;16080:8;16045:11;:24;;;:44;;;;:::i;:::-;15977:119;;;;;15958:12;:16;15971:2;15958:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16131:43;;;;;;;;16146:2;16131:43;;;;;;16157:15;16131:43;;;;;16103:11;:25;16115:12;16103:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16183:20;16206:12;16183:35;;16232:9;16227:281;16251:8;16247:1;:12;16227:281;;;16305:12;16301:2;16280:38;;16297:1;16280:38;;;;;;;;;;;;16345:59;16376:1;16380:2;16384:12;16398:5;16345:22;:59::i;:::-;16327:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;16486:14;;;;;:::i;:::-;;;;16261:3;;;;;:::i;:::-;;;;16227:281;;;;16531:12;16516;:27;;;;16550:60;16579:1;16583:2;16587:12;16601:8;16550:20;:60::i;:::-;15562:1054;;;15464:1152;;;:::o;19559:141::-;;;;;:::o;19705:140::-;;;;;:::o;3171:197::-;3231:4;3249:12;3316:7;3304:20;3296:28;;3359:1;3352:4;:8;3345:15;;;3171:197;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:108::-;8391:24;8409:5;8391:24;:::i;:::-;8386:3;8379:37;8314:108;;:::o;8428:118::-;8515:24;8533:5;8515:24;:::i;:::-;8510:3;8503:37;8428:118;;:::o;8552:109::-;8633:21;8648:5;8633:21;:::i;:::-;8628:3;8621:34;8552:109;;:::o;8667:360::-;8753:3;8781:38;8813:5;8781:38;:::i;:::-;8835:70;8898:6;8893:3;8835:70;:::i;:::-;8828:77;;8914:52;8959:6;8954:3;8947:4;8940:5;8936:16;8914:52;:::i;:::-;8991:29;9013:6;8991:29;:::i;:::-;8986:3;8982:39;8975:46;;8757:270;8667:360;;;;:::o;9033:364::-;9121:3;9149:39;9182:5;9149:39;:::i;:::-;9204:71;9268:6;9263:3;9204:71;:::i;:::-;9197:78;;9284:52;9329:6;9324:3;9317:4;9310:5;9306:16;9284:52;:::i;:::-;9361:29;9383:6;9361:29;:::i;:::-;9356:3;9352:39;9345:46;;9125:272;9033:364;;;;:::o;9403:377::-;9509:3;9537:39;9570:5;9537:39;:::i;:::-;9592:89;9674:6;9669:3;9592:89;:::i;:::-;9585:96;;9690:52;9735:6;9730:3;9723:4;9716:5;9712:16;9690:52;:::i;:::-;9767:6;9762:3;9758:16;9751:23;;9513:267;9403:377;;;;:::o;9786:366::-;9928:3;9949:67;10013:2;10008:3;9949:67;:::i;:::-;9942:74;;10025:93;10114:3;10025:93;:::i;:::-;10143:2;10138:3;10134:12;10127:19;;9786:366;;;:::o;10158:::-;10300:3;10321:67;10385:2;10380:3;10321:67;:::i;:::-;10314:74;;10397:93;10486:3;10397:93;:::i;:::-;10515:2;10510:3;10506:12;10499:19;;10158:366;;;:::o;10530:::-;10672:3;10693:67;10757:2;10752:3;10693:67;:::i;:::-;10686:74;;10769:93;10858:3;10769:93;:::i;:::-;10887:2;10882:3;10878:12;10871:19;;10530:366;;;:::o;10902:::-;11044:3;11065:67;11129:2;11124:3;11065:67;:::i;:::-;11058:74;;11141:93;11230:3;11141:93;:::i;:::-;11259:2;11254:3;11250:12;11243:19;;10902:366;;;:::o;11274:::-;11416:3;11437:67;11501:2;11496:3;11437:67;:::i;:::-;11430:74;;11513:93;11602:3;11513:93;:::i;:::-;11631:2;11626:3;11622:12;11615:19;;11274:366;;;:::o;11646:::-;11788:3;11809:67;11873:2;11868:3;11809:67;:::i;:::-;11802:74;;11885:93;11974:3;11885:93;:::i;:::-;12003:2;11998:3;11994:12;11987:19;;11646:366;;;:::o;12018:::-;12160:3;12181:67;12245:2;12240:3;12181:67;:::i;:::-;12174:74;;12257:93;12346:3;12257:93;:::i;:::-;12375:2;12370:3;12366:12;12359:19;;12018:366;;;:::o;12390:::-;12532:3;12553:67;12617:2;12612:3;12553:67;:::i;:::-;12546:74;;12629:93;12718:3;12629:93;:::i;:::-;12747:2;12742:3;12738:12;12731:19;;12390:366;;;:::o;12762:::-;12904:3;12925:67;12989:2;12984:3;12925:67;:::i;:::-;12918:74;;13001:93;13090:3;13001:93;:::i;:::-;13119:2;13114:3;13110:12;13103:19;;12762:366;;;:::o;13134:::-;13276:3;13297:67;13361:2;13356:3;13297:67;:::i;:::-;13290:74;;13373:93;13462:3;13373:93;:::i;:::-;13491:2;13486:3;13482:12;13475:19;;13134:366;;;:::o;13506:::-;13648:3;13669:67;13733:2;13728:3;13669:67;:::i;:::-;13662:74;;13745:93;13834:3;13745:93;:::i;:::-;13863:2;13858:3;13854:12;13847:19;;13506:366;;;:::o;13878:::-;14020:3;14041:67;14105:2;14100:3;14041:67;:::i;:::-;14034:74;;14117:93;14206:3;14117:93;:::i;:::-;14235:2;14230:3;14226:12;14219:19;;13878:366;;;:::o;14250:::-;14392:3;14413:67;14477:2;14472:3;14413:67;:::i;:::-;14406:74;;14489:93;14578:3;14489:93;:::i;:::-;14607:2;14602:3;14598:12;14591:19;;14250:366;;;:::o;14622:::-;14764:3;14785:67;14849:2;14844:3;14785:67;:::i;:::-;14778:74;;14861:93;14950:3;14861:93;:::i;:::-;14979:2;14974:3;14970:12;14963:19;;14622:366;;;:::o;14994:::-;15136:3;15157:67;15221:2;15216:3;15157:67;:::i;:::-;15150:74;;15233:93;15322:3;15233:93;:::i;:::-;15351:2;15346:3;15342:12;15335:19;;14994:366;;;:::o;15366:400::-;15526:3;15547:84;15629:1;15624:3;15547:84;:::i;:::-;15540:91;;15640:93;15729:3;15640:93;:::i;:::-;15758:1;15753:3;15749:11;15742:18;;15366:400;;;:::o;15772:366::-;15914:3;15935:67;15999:2;15994:3;15935:67;:::i;:::-;15928:74;;16011:93;16100:3;16011:93;:::i;:::-;16129:2;16124:3;16120:12;16113:19;;15772:366;;;:::o;16144:::-;16286:3;16307:67;16371:2;16366:3;16307:67;:::i;:::-;16300:74;;16383:93;16472:3;16383:93;:::i;:::-;16501:2;16496:3;16492:12;16485:19;;16144:366;;;:::o;16516:::-;16658:3;16679:67;16743:2;16738:3;16679:67;:::i;:::-;16672:74;;16755:93;16844:3;16755:93;:::i;:::-;16873:2;16868:3;16864:12;16857:19;;16516:366;;;:::o;16888:::-;17030:3;17051:67;17115:2;17110:3;17051:67;:::i;:::-;17044:74;;17127:93;17216:3;17127:93;:::i;:::-;17245:2;17240:3;17236:12;17229:19;;16888:366;;;:::o;17260:::-;17402:3;17423:67;17487:2;17482:3;17423:67;:::i;:::-;17416:74;;17499:93;17588:3;17499:93;:::i;:::-;17617:2;17612:3;17608:12;17601:19;;17260:366;;;:::o;17632:::-;17774:3;17795:67;17859:2;17854:3;17795:67;:::i;:::-;17788:74;;17871:93;17960:3;17871:93;:::i;:::-;17989:2;17984:3;17980:12;17973:19;;17632:366;;;:::o;18004:::-;18146:3;18167:67;18231:2;18226:3;18167:67;:::i;:::-;18160:74;;18243:93;18332:3;18243:93;:::i;:::-;18361:2;18356:3;18352:12;18345:19;;18004:366;;;:::o;18376:::-;18518:3;18539:67;18603:2;18598:3;18539:67;:::i;:::-;18532:74;;18615:93;18704:3;18615:93;:::i;:::-;18733:2;18728:3;18724:12;18717:19;;18376:366;;;:::o;18748:398::-;18907:3;18928:83;19009:1;19004:3;18928:83;:::i;:::-;18921:90;;19020:93;19109:3;19020:93;:::i;:::-;19138:1;19133:3;19129:11;19122:18;;18748:398;;;:::o;19152:366::-;19294:3;19315:67;19379:2;19374:3;19315:67;:::i;:::-;19308:74;;19391:93;19480:3;19391:93;:::i;:::-;19509:2;19504:3;19500:12;19493:19;;19152:366;;;:::o;19524:::-;19666:3;19687:67;19751:2;19746:3;19687:67;:::i;:::-;19680:74;;19763:93;19852:3;19763:93;:::i;:::-;19881:2;19876:3;19872:12;19865:19;;19524:366;;;:::o;19896:::-;20038:3;20059:67;20123:2;20118:3;20059:67;:::i;:::-;20052:74;;20135:93;20224:3;20135:93;:::i;:::-;20253:2;20248:3;20244:12;20237:19;;19896:366;;;:::o;20268:::-;20410:3;20431:67;20495:2;20490:3;20431:67;:::i;:::-;20424:74;;20507:93;20596:3;20507:93;:::i;:::-;20625:2;20620:3;20616:12;20609:19;;20268:366;;;:::o;20640:::-;20782:3;20803:67;20867:2;20862:3;20803:67;:::i;:::-;20796:74;;20879:93;20968:3;20879:93;:::i;:::-;20997:2;20992:3;20988:12;20981:19;;20640:366;;;:::o;21012:::-;21154:3;21175:67;21239:2;21234:3;21175:67;:::i;:::-;21168:74;;21251:93;21340:3;21251:93;:::i;:::-;21369:2;21364:3;21360:12;21353:19;;21012:366;;;:::o;21384:::-;21526:3;21547:67;21611:2;21606:3;21547:67;:::i;:::-;21540:74;;21623:93;21712:3;21623:93;:::i;:::-;21741:2;21736:3;21732:12;21725:19;;21384:366;;;:::o;21756:::-;21898:3;21919:67;21983:2;21978:3;21919:67;:::i;:::-;21912:74;;21995:93;22084:3;21995:93;:::i;:::-;22113:2;22108:3;22104:12;22097:19;;21756:366;;;:::o;22128:::-;22270:3;22291:67;22355:2;22350:3;22291:67;:::i;:::-;22284:74;;22367:93;22456:3;22367:93;:::i;:::-;22485:2;22480:3;22476:12;22469:19;;22128:366;;;:::o;22500:::-;22642:3;22663:67;22727:2;22722:3;22663:67;:::i;:::-;22656:74;;22739:93;22828:3;22739:93;:::i;:::-;22857:2;22852:3;22848:12;22841:19;;22500:366;;;:::o;22942:527::-;23101:4;23096:3;23092:14;23188:4;23181:5;23177:16;23171:23;23207:63;23264:4;23259:3;23255:14;23241:12;23207:63;:::i;:::-;23116:164;23372:4;23365:5;23361:16;23355:23;23391:61;23446:4;23441:3;23437:14;23423:12;23391:61;:::i;:::-;23290:172;23070:399;22942:527;;:::o;23475:118::-;23562:24;23580:5;23562:24;:::i;:::-;23557:3;23550:37;23475:118;;:::o;23599:105::-;23674:23;23691:5;23674:23;:::i;:::-;23669:3;23662:36;23599:105;;:::o;23710:701::-;23991:3;24013:95;24104:3;24095:6;24013:95;:::i;:::-;24006:102;;24125:95;24216:3;24207:6;24125:95;:::i;:::-;24118:102;;24237:148;24381:3;24237:148;:::i;:::-;24230:155;;24402:3;24395:10;;23710:701;;;;;:::o;24417:379::-;24601:3;24623:147;24766:3;24623:147;:::i;:::-;24616:154;;24787:3;24780:10;;24417:379;;;:::o;24802:222::-;24895:4;24933:2;24922:9;24918:18;24910:26;;24946:71;25014:1;25003:9;24999:17;24990:6;24946:71;:::i;:::-;24802:222;;;;:::o;25030:640::-;25225:4;25263:3;25252:9;25248:19;25240:27;;25277:71;25345:1;25334:9;25330:17;25321:6;25277:71;:::i;:::-;25358:72;25426:2;25415:9;25411:18;25402:6;25358:72;:::i;:::-;25440;25508:2;25497:9;25493:18;25484:6;25440:72;:::i;:::-;25559:9;25553:4;25549:20;25544:2;25533:9;25529:18;25522:48;25587:76;25658:4;25649:6;25587:76;:::i;:::-;25579:84;;25030:640;;;;;;;:::o;25676:210::-;25763:4;25801:2;25790:9;25786:18;25778:26;;25814:65;25876:1;25865:9;25861:17;25852:6;25814:65;:::i;:::-;25676:210;;;;:::o;25892:313::-;26005:4;26043:2;26032:9;26028:18;26020:26;;26092:9;26086:4;26082:20;26078:1;26067:9;26063:17;26056:47;26120:78;26193:4;26184:6;26120:78;:::i;:::-;26112:86;;25892:313;;;;:::o;26211:419::-;26377:4;26415:2;26404:9;26400:18;26392:26;;26464:9;26458:4;26454:20;26450:1;26439:9;26435:17;26428:47;26492:131;26618:4;26492:131;:::i;:::-;26484:139;;26211:419;;;:::o;26636:::-;26802:4;26840:2;26829:9;26825:18;26817:26;;26889:9;26883:4;26879:20;26875:1;26864:9;26860:17;26853:47;26917:131;27043:4;26917:131;:::i;:::-;26909:139;;26636:419;;;:::o;27061:::-;27227:4;27265:2;27254:9;27250:18;27242:26;;27314:9;27308:4;27304:20;27300:1;27289:9;27285:17;27278:47;27342:131;27468:4;27342:131;:::i;:::-;27334:139;;27061:419;;;:::o;27486:::-;27652:4;27690:2;27679:9;27675:18;27667:26;;27739:9;27733:4;27729:20;27725:1;27714:9;27710:17;27703:47;27767:131;27893:4;27767:131;:::i;:::-;27759:139;;27486:419;;;:::o;27911:::-;28077:4;28115:2;28104:9;28100:18;28092:26;;28164:9;28158:4;28154:20;28150:1;28139:9;28135:17;28128:47;28192:131;28318:4;28192:131;:::i;:::-;28184:139;;27911:419;;;:::o;28336:::-;28502:4;28540:2;28529:9;28525:18;28517:26;;28589:9;28583:4;28579:20;28575:1;28564:9;28560:17;28553:47;28617:131;28743:4;28617:131;:::i;:::-;28609:139;;28336:419;;;:::o;28761:::-;28927:4;28965:2;28954:9;28950:18;28942:26;;29014:9;29008:4;29004:20;29000:1;28989:9;28985:17;28978:47;29042:131;29168:4;29042:131;:::i;:::-;29034:139;;28761:419;;;:::o;29186:::-;29352:4;29390:2;29379:9;29375:18;29367:26;;29439:9;29433:4;29429:20;29425:1;29414:9;29410:17;29403:47;29467:131;29593:4;29467:131;:::i;:::-;29459:139;;29186:419;;;:::o;29611:::-;29777:4;29815:2;29804:9;29800:18;29792:26;;29864:9;29858:4;29854:20;29850:1;29839:9;29835:17;29828:47;29892:131;30018:4;29892:131;:::i;:::-;29884:139;;29611:419;;;:::o;30036:::-;30202:4;30240:2;30229:9;30225:18;30217:26;;30289:9;30283:4;30279:20;30275:1;30264:9;30260:17;30253:47;30317:131;30443:4;30317:131;:::i;:::-;30309:139;;30036:419;;;:::o;30461:::-;30627:4;30665:2;30654:9;30650:18;30642:26;;30714:9;30708:4;30704:20;30700:1;30689:9;30685:17;30678:47;30742:131;30868:4;30742:131;:::i;:::-;30734:139;;30461:419;;;:::o;30886:::-;31052:4;31090:2;31079:9;31075:18;31067:26;;31139:9;31133:4;31129:20;31125:1;31114:9;31110:17;31103:47;31167:131;31293:4;31167:131;:::i;:::-;31159:139;;30886:419;;;:::o;31311:::-;31477:4;31515:2;31504:9;31500:18;31492:26;;31564:9;31558:4;31554:20;31550:1;31539:9;31535:17;31528:47;31592:131;31718:4;31592:131;:::i;:::-;31584:139;;31311:419;;;:::o;31736:::-;31902:4;31940:2;31929:9;31925:18;31917:26;;31989:9;31983:4;31979:20;31975:1;31964:9;31960:17;31953:47;32017:131;32143:4;32017:131;:::i;:::-;32009:139;;31736:419;;;:::o;32161:::-;32327:4;32365:2;32354:9;32350:18;32342:26;;32414:9;32408:4;32404:20;32400:1;32389:9;32385:17;32378:47;32442:131;32568:4;32442:131;:::i;:::-;32434:139;;32161:419;;;:::o;32586:::-;32752:4;32790:2;32779:9;32775:18;32767:26;;32839:9;32833:4;32829:20;32825:1;32814:9;32810:17;32803:47;32867:131;32993:4;32867:131;:::i;:::-;32859:139;;32586:419;;;:::o;33011:::-;33177:4;33215:2;33204:9;33200:18;33192:26;;33264:9;33258:4;33254:20;33250:1;33239:9;33235:17;33228:47;33292:131;33418:4;33292:131;:::i;:::-;33284:139;;33011:419;;;:::o;33436:::-;33602:4;33640:2;33629:9;33625:18;33617:26;;33689:9;33683:4;33679:20;33675:1;33664:9;33660:17;33653:47;33717:131;33843:4;33717:131;:::i;:::-;33709:139;;33436:419;;;:::o;33861:::-;34027:4;34065:2;34054:9;34050:18;34042:26;;34114:9;34108:4;34104:20;34100:1;34089:9;34085:17;34078:47;34142:131;34268:4;34142:131;:::i;:::-;34134:139;;33861:419;;;:::o;34286:::-;34452:4;34490:2;34479:9;34475:18;34467:26;;34539:9;34533:4;34529:20;34525:1;34514:9;34510:17;34503:47;34567:131;34693:4;34567:131;:::i;:::-;34559:139;;34286:419;;;:::o;34711:::-;34877:4;34915:2;34904:9;34900:18;34892:26;;34964:9;34958:4;34954:20;34950:1;34939:9;34935:17;34928:47;34992:131;35118:4;34992:131;:::i;:::-;34984:139;;34711:419;;;:::o;35136:::-;35302:4;35340:2;35329:9;35325:18;35317:26;;35389:9;35383:4;35379:20;35375:1;35364:9;35360:17;35353:47;35417:131;35543:4;35417:131;:::i;:::-;35409:139;;35136:419;;;:::o;35561:::-;35727:4;35765:2;35754:9;35750:18;35742:26;;35814:9;35808:4;35804:20;35800:1;35789:9;35785:17;35778:47;35842:131;35968:4;35842:131;:::i;:::-;35834:139;;35561:419;;;:::o;35986:::-;36152:4;36190:2;36179:9;36175:18;36167:26;;36239:9;36233:4;36229:20;36225:1;36214:9;36210:17;36203:47;36267:131;36393:4;36267:131;:::i;:::-;36259:139;;35986:419;;;:::o;36411:::-;36577:4;36615:2;36604:9;36600:18;36592:26;;36664:9;36658:4;36654:20;36650:1;36639:9;36635:17;36628:47;36692:131;36818:4;36692:131;:::i;:::-;36684:139;;36411:419;;;:::o;36836:::-;37002:4;37040:2;37029:9;37025:18;37017:26;;37089:9;37083:4;37079:20;37075:1;37064:9;37060:17;37053:47;37117:131;37243:4;37117:131;:::i;:::-;37109:139;;36836:419;;;:::o;37261:::-;37427:4;37465:2;37454:9;37450:18;37442:26;;37514:9;37508:4;37504:20;37500:1;37489:9;37485:17;37478:47;37542:131;37668:4;37542:131;:::i;:::-;37534:139;;37261:419;;;:::o;37686:::-;37852:4;37890:2;37879:9;37875:18;37867:26;;37939:9;37933:4;37929:20;37925:1;37914:9;37910:17;37903:47;37967:131;38093:4;37967:131;:::i;:::-;37959:139;;37686:419;;;:::o;38111:::-;38277:4;38315:2;38304:9;38300:18;38292:26;;38364:9;38358:4;38354:20;38350:1;38339:9;38335:17;38328:47;38392:131;38518:4;38392:131;:::i;:::-;38384:139;;38111:419;;;:::o;38536:::-;38702:4;38740:2;38729:9;38725:18;38717:26;;38789:9;38783:4;38779:20;38775:1;38764:9;38760:17;38753:47;38817:131;38943:4;38817:131;:::i;:::-;38809:139;;38536:419;;;:::o;38961:::-;39127:4;39165:2;39154:9;39150:18;39142:26;;39214:9;39208:4;39204:20;39200:1;39189:9;39185:17;39178:47;39242:131;39368:4;39242:131;:::i;:::-;39234:139;;38961:419;;;:::o;39386:::-;39552:4;39590:2;39579:9;39575:18;39567:26;;39639:9;39633:4;39629:20;39625:1;39614:9;39610:17;39603:47;39667:131;39793:4;39667:131;:::i;:::-;39659:139;;39386:419;;;:::o;39811:::-;39977:4;40015:2;40004:9;40000:18;39992:26;;40064:9;40058:4;40054:20;40050:1;40039:9;40035:17;40028:47;40092:131;40218:4;40092:131;:::i;:::-;40084:139;;39811:419;;;:::o;40236:346::-;40391:4;40429:2;40418:9;40414:18;40406:26;;40442:133;40572:1;40561:9;40557:17;40548:6;40442:133;:::i;:::-;40236:346;;;;:::o;40588:222::-;40681:4;40719:2;40708:9;40704:18;40696:26;;40732:71;40800:1;40789:9;40785:17;40776:6;40732:71;:::i;:::-;40588:222;;;;:::o;40816:129::-;40850:6;40877:20;;:::i;:::-;40867:30;;40906:33;40934:4;40926:6;40906:33;:::i;:::-;40816:129;;;:::o;40951:75::-;40984:6;41017:2;41011:9;41001:19;;40951:75;:::o;41032:307::-;41093:4;41183:18;41175:6;41172:30;41169:56;;;41205:18;;:::i;:::-;41169:56;41243:29;41265:6;41243:29;:::i;:::-;41235:37;;41327:4;41321;41317:15;41309:23;;41032:307;;;:::o;41345:308::-;41407:4;41497:18;41489:6;41486:30;41483:56;;;41519:18;;:::i;:::-;41483:56;41557:29;41579:6;41557:29;:::i;:::-;41549:37;;41641:4;41635;41631:15;41623:23;;41345:308;;;:::o;41659:98::-;41710:6;41744:5;41738:12;41728:22;;41659:98;;;:::o;41763:99::-;41815:6;41849:5;41843:12;41833:22;;41763:99;;;:::o;41868:168::-;41951:11;41985:6;41980:3;41973:19;42025:4;42020:3;42016:14;42001:29;;41868:168;;;;:::o;42042:147::-;42143:11;42180:3;42165:18;;42042:147;;;;:::o;42195:169::-;42279:11;42313:6;42308:3;42301:19;42353:4;42348:3;42344:14;42329:29;;42195:169;;;;:::o;42370:148::-;42472:11;42509:3;42494:18;;42370:148;;;;:::o;42524:273::-;42564:3;42583:20;42601:1;42583:20;:::i;:::-;42578:25;;42617:20;42635:1;42617:20;:::i;:::-;42612:25;;42739:1;42703:34;42699:42;42696:1;42693:49;42690:75;;;42745:18;;:::i;:::-;42690:75;42789:1;42786;42782:9;42775:16;;42524:273;;;;:::o;42803:305::-;42843:3;42862:20;42880:1;42862:20;:::i;:::-;42857:25;;42896:20;42914:1;42896:20;:::i;:::-;42891:25;;43050:1;42982:66;42978:74;42975:1;42972:81;42969:107;;;43056:18;;:::i;:::-;42969:107;43100:1;43097;43093:9;43086:16;;42803:305;;;;:::o;43114:185::-;43154:1;43171:20;43189:1;43171:20;:::i;:::-;43166:25;;43205:20;43223:1;43205:20;:::i;:::-;43200:25;;43244:1;43234:35;;43249:18;;:::i;:::-;43234:35;43291:1;43288;43284:9;43279:14;;43114:185;;;;:::o;43305:348::-;43345:7;43368:20;43386:1;43368:20;:::i;:::-;43363:25;;43402:20;43420:1;43402:20;:::i;:::-;43397:25;;43590:1;43522:66;43518:74;43515:1;43512:81;43507:1;43500:9;43493:17;43489:105;43486:131;;;43597:18;;:::i;:::-;43486:131;43645:1;43642;43638:9;43627:20;;43305:348;;;;:::o;43659:191::-;43699:4;43719:20;43737:1;43719:20;:::i;:::-;43714:25;;43753:20;43771:1;43753:20;:::i;:::-;43748:25;;43792:1;43789;43786:8;43783:34;;;43797:18;;:::i;:::-;43783:34;43842:1;43839;43835:9;43827:17;;43659:191;;;;:::o;43856:::-;43896:4;43916:20;43934:1;43916:20;:::i;:::-;43911:25;;43950:20;43968:1;43950:20;:::i;:::-;43945:25;;43989:1;43986;43983:8;43980:34;;;43994:18;;:::i;:::-;43980:34;44039:1;44036;44032:9;44024:17;;43856:191;;;;:::o;44053:96::-;44090:7;44119:24;44137:5;44119:24;:::i;:::-;44108:35;;44053:96;;;:::o;44155:90::-;44189:7;44232:5;44225:13;44218:21;44207:32;;44155:90;;;:::o;44251:149::-;44287:7;44327:66;44320:5;44316:78;44305:89;;44251:149;;;:::o;44406:118::-;44443:7;44483:34;44476:5;44472:46;44461:57;;44406:118;;;:::o;44530:126::-;44567:7;44607:42;44600:5;44596:54;44585:65;;44530:126;;;:::o;44662:77::-;44699:7;44728:5;44717:16;;44662:77;;;:::o;44745:101::-;44781:7;44821:18;44814:5;44810:30;44799:41;;44745:101;;;:::o;44852:154::-;44936:6;44931:3;44926;44913:30;44998:1;44989:6;44984:3;44980:16;44973:27;44852:154;;;:::o;45012:307::-;45080:1;45090:113;45104:6;45101:1;45098:13;45090:113;;;45189:1;45184:3;45180:11;45174:18;45170:1;45165:3;45161:11;45154:39;45126:2;45123:1;45119:10;45114:15;;45090:113;;;45221:6;45218:1;45215:13;45212:101;;;45301:1;45292:6;45287:3;45283:16;45276:27;45212:101;45061:258;45012:307;;;:::o;45325:171::-;45364:3;45387:24;45405:5;45387:24;:::i;:::-;45378:33;;45433:4;45426:5;45423:15;45420:41;;;45441:18;;:::i;:::-;45420:41;45488:1;45481:5;45477:13;45470:20;;45325:171;;;:::o;45502:320::-;45546:6;45583:1;45577:4;45573:12;45563:22;;45630:1;45624:4;45620:12;45651:18;45641:81;;45707:4;45699:6;45695:17;45685:27;;45641:81;45769:2;45761:6;45758:14;45738:18;45735:38;45732:84;;;45788:18;;:::i;:::-;45732:84;45553:269;45502:320;;;:::o;45828:281::-;45911:27;45933:4;45911:27;:::i;:::-;45903:6;45899:40;46041:6;46029:10;46026:22;46005:18;45993:10;45990:34;45987:62;45984:88;;;46052:18;;:::i;:::-;45984:88;46092:10;46088:2;46081:22;45871:238;45828:281;;:::o;46115:233::-;46154:3;46177:24;46195:5;46177:24;:::i;:::-;46168:33;;46223:66;46216:5;46213:77;46210:103;;;46293:18;;:::i;:::-;46210:103;46340:1;46333:5;46329:13;46322:20;;46115:233;;;:::o;46354:176::-;46386:1;46403:20;46421:1;46403:20;:::i;:::-;46398:25;;46437:20;46455:1;46437:20;:::i;:::-;46432:25;;46476:1;46466:35;;46481:18;;:::i;:::-;46466:35;46522:1;46519;46515:9;46510:14;;46354:176;;;;:::o;46536:180::-;46584:77;46581:1;46574:88;46681:4;46678:1;46671:15;46705:4;46702:1;46695:15;46722:180;46770:77;46767:1;46760:88;46867:4;46864:1;46857:15;46891:4;46888:1;46881:15;46908:180;46956:77;46953:1;46946:88;47053:4;47050:1;47043:15;47077:4;47074:1;47067:15;47094:180;47142:77;47139:1;47132:88;47239:4;47236:1;47229:15;47263:4;47260:1;47253:15;47280:180;47328:77;47325:1;47318:88;47425:4;47422:1;47415:15;47449:4;47446:1;47439:15;47466:117;47575:1;47572;47565:12;47589:117;47698:1;47695;47688:12;47712:117;47821:1;47818;47811:12;47835:117;47944:1;47941;47934:12;47958:117;48067:1;48064;48057:12;48081:117;48190:1;48187;48180:12;48204:102;48245:6;48296:2;48292:7;48287:2;48280:5;48276:14;48272:28;48262:38;;48204:102;;;:::o;48312:221::-;48452:34;48448:1;48440:6;48436:14;48429:58;48521:4;48516:2;48508:6;48504:15;48497:29;48312:221;:::o;48539:225::-;48679:34;48675:1;48667:6;48663:14;48656:58;48748:8;48743:2;48735:6;48731:15;48724:33;48539:225;:::o;48770:229::-;48910:34;48906:1;48898:6;48894:14;48887:58;48979:12;48974:2;48966:6;48962:15;48955:37;48770:229;:::o;49005:222::-;49145:34;49141:1;49133:6;49129:14;49122:58;49214:5;49209:2;49201:6;49197:15;49190:30;49005:222;:::o;49233:::-;49373:34;49369:1;49361:6;49357:14;49350:58;49442:5;49437:2;49429:6;49425:15;49418:30;49233:222;:::o;49461:168::-;49601:20;49597:1;49589:6;49585:14;49578:44;49461:168;:::o;49635:224::-;49775:34;49771:1;49763:6;49759:14;49752:58;49844:7;49839:2;49831:6;49827:15;49820:32;49635:224;:::o;49865:175::-;50005:27;50001:1;49993:6;49989:14;49982:51;49865:175;:::o;50046:236::-;50186:34;50182:1;50174:6;50170:14;50163:58;50255:19;50250:2;50242:6;50238:15;50231:44;50046:236;:::o;50288:180::-;50428:32;50424:1;50416:6;50412:14;50405:56;50288:180;:::o;50474:244::-;50614:34;50610:1;50602:6;50598:14;50591:58;50683:27;50678:2;50670:6;50666:15;50659:52;50474:244;:::o;50724:230::-;50864:34;50860:1;50852:6;50848:14;50841:58;50933:13;50928:2;50920:6;50916:15;50909:38;50724:230;:::o;50960:225::-;51100:34;51096:1;51088:6;51084:14;51077:58;51169:8;51164:2;51156:6;51152:15;51145:33;50960:225;:::o;51191:179::-;51331:31;51327:1;51319:6;51315:14;51308:55;51191:179;:::o;51376:225::-;51516:34;51512:1;51504:6;51500:14;51493:58;51585:8;51580:2;51572:6;51568:15;51561:33;51376:225;:::o;51607:155::-;51747:7;51743:1;51735:6;51731:14;51724:31;51607:155;:::o;51768:227::-;51908:34;51904:1;51896:6;51892:14;51885:58;51977:10;51972:2;51964:6;51960:15;51953:35;51768:227;:::o;52001:175::-;52141:27;52137:1;52129:6;52125:14;52118:51;52001:175;:::o;52182:182::-;52322:34;52318:1;52310:6;52306:14;52299:58;52182:182;:::o;52370:234::-;52510:34;52506:1;52498:6;52494:14;52487:58;52579:17;52574:2;52566:6;52562:15;52555:42;52370:234;:::o;52610:176::-;52750:28;52746:1;52738:6;52734:14;52727:52;52610:176;:::o;52792:237::-;52932:34;52928:1;52920:6;52916:14;52909:58;53001:20;52996:2;52988:6;52984:15;52977:45;52792:237;:::o;53035:228::-;53175:34;53171:1;53163:6;53159:14;53152:58;53244:11;53239:2;53231:6;53227:15;53220:36;53035:228;:::o;53269:221::-;53409:34;53405:1;53397:6;53393:14;53386:58;53478:4;53473:2;53465:6;53461:15;53454:29;53269:221;:::o;53496:114::-;;:::o;53616:166::-;53756:18;53752:1;53744:6;53740:14;53733:42;53616:166;:::o;53788:238::-;53928:34;53924:1;53916:6;53912:14;53905:58;53997:21;53992:2;53984:6;53980:15;53973:46;53788:238;:::o;54032:179::-;54172:31;54168:1;54160:6;54156:14;54149:55;54032:179;:::o;54217:220::-;54357:34;54353:1;54345:6;54341:14;54334:58;54426:3;54421:2;54413:6;54409:15;54402:28;54217:220;:::o;54443:180::-;54583:32;54579:1;54571:6;54567:14;54560:56;54443:180;:::o;54629:233::-;54769:34;54765:1;54757:6;54753:14;54746:58;54838:16;54833:2;54825:6;54821:15;54814:41;54629:233;:::o;54868:181::-;55008:33;55004:1;54996:6;54992:14;54985:57;54868:181;:::o;55055:234::-;55195:34;55191:1;55183:6;55179:14;55172:58;55264:17;55259:2;55251:6;55247:15;55240:42;55055:234;:::o;55295:232::-;55435:34;55431:1;55423:6;55419:14;55412:58;55504:15;55499:2;55491:6;55487:15;55480:40;55295:232;:::o;55533:221::-;55673:34;55669:1;55661:6;55657:14;55650:58;55742:4;55737:2;55729:6;55725:15;55718:29;55533:221;:::o;55760:122::-;55833:24;55851:5;55833:24;:::i;:::-;55826:5;55823:35;55813:63;;55872:1;55869;55862:12;55813:63;55760:122;:::o;55888:116::-;55958:21;55973:5;55958:21;:::i;:::-;55951:5;55948:32;55938:60;;55994:1;55991;55984:12;55938:60;55888:116;:::o;56010:120::-;56082:23;56099:5;56082:23;:::i;:::-;56075:5;56072:34;56062:62;;56120:1;56117;56110:12;56062:62;56010:120;:::o;56136:122::-;56209:24;56227:5;56209:24;:::i;:::-;56202:5;56199:35;56189:63;;56248:1;56245;56238:12;56189:63;56136:122;:::o

Swarm Source

ipfs://2c18b93757580dde2174c7eded5b23df7188d4fc4d8dc2a9ad40ee97aaf7b0fa
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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