ETH Price: $3,108.07 (+1.51%)
Gas: 5 Gwei

Token

KanjiOdoko (KanjiOdoko)
 

Overview

Max Total Supply

78 KanjiOdoko

Holders

45

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
solecity.eth
Balance
3 KanjiOdoko
0x724DaEbd22c0D403De40aa5ee6cD2e0E2d11Afb2
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:
KanjiOdoko

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-02-25
*/

/**
 *Submitted for verification at Etherscan.io on 2022-02-09
*/

// 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 = 0;

  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;
  } 
  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 KanjiOdoko is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;


  uint256 public MAX_PER_Transtion = 2; // maximam amount that user can mint
  uint256 public MAX_PER_Address = 2; // maximam amount that user can mint

  uint256 public  PRICE = 0.08 ether ;

  uint256 private constant TotalCollectionSize_ = 6666; // total number of nfts
  uint256 private constant MaxMintPerBatch_ = 2; //max mint per traction

  string private _baseTokenURI;

  uint8 public status = 3; //0-pause 2-whitelist 3-public

  uint256 public reserved = 0;

  mapping(address => bool) private whitelistedAddresses;

  constructor() ERC721A("KanjiOdoko","KanjiOdoko", MaxMintPerBatch_, TotalCollectionSize_) {
    _baseTokenURI = "https://gateway.pinata.cloud/ipfs/QmTbZnHExQvUteEZWbbVQ3F19eyAq3i2c9VLLRW4ixKvhQ/";
  }
  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }
 
  function mint(uint256 quantity) external payable callerIsUser {
    require(status == 1 && whitelistedAddresses[msg.sender] || status == 2 , "Sale is not Active");
    require(totalSupply() + quantity <= collectionSize - reserved, "reached max supply");
    require( ( numberMinted(msg.sender) + quantity <= MAX_PER_Address ) , "Quantity exceeds allowed Mints" );
    require(  quantity <= MAX_PER_Transtion,"can not mint this many");
    require(msg.value >= PRICE * quantity, "Need to send more ETH.");
    _safeMint(msg.sender, quantity);    
  }

   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+1).toString(), ".json")) : "";
  }

  function isWhitelisted(address _user) public view returns (bool) {
    return whitelistedAddresses[_user];
  }

  
  function addNewWhitelistUsers(address[] calldata _users) public onlyOwner {
    // ["","",""]
    for(uint i=0;i<_users.length;i++)
        whitelistedAddresses[_users[i]] = true;
  }

  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 changeMintPrice(uint256 _newPrice) external onlyOwner
  {
      PRICE = _newPrice;
  }
  function getPrice() external returns(uint256){
      return PRICE;
  }
  function changeMAX_PER_Transtion(uint256 q) external onlyOwner{
      MAX_PER_Transtion = q;
  }
  function changeMAX_PER_Address(uint256 q) external onlyOwner {
      MAX_PER_Address = q;
  }

  function setStatus(uint8 s)external onlyOwner {
      status = s;
  }
  function setREserved(uint256 r)external onlyOwner {
      reserved = r;
  }
  function getStatus()public view returns(uint) {
      return status;
  }
  function giveaway(address a, uint q)public onlyOwner {
    _safeMint(a, q);
  }
  function contractURI() public view returns (string memory) {
        string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Kanji Odoko", "description": "KanjiOdoko is a lifelong collection revolving around anime inspired characters, each individually designed and made for future utility. The first collection will consist of the Genesis Mint Pass that is the key to all future airdrops. Our core team is situated in Tokyo procuring future collaborations for all pass holders. We currently have majority of 2022 all planned out and will soon be working past this.", "seller_fee_basis_points": 500, "fee_recipient": "0xD50F84E48F6eecC4756eB633eE8F33c76608aa69"}'))));
        json = string(abi.encodePacked('data:application/json;base64,', json));
        return json;
    }
}

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_Address","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addNewWhitelistUsers","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":"q","type":"uint256"}],"name":"changeMAX_PER_Address","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":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getStatus","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":"isWhitelisted","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":[],"name":"reserved","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":"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":"r","type":"uint256"}],"name":"setREserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"s","type":"uint8"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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"}]

60c0604052600060015560006008556002600a556002600b5567011c37937e080000600c556003600e60006101000a81548160ff021916908360ff1602179055506000600f553480156200005257600080fd5b506040518060400160405280600a81526020017f4b616e6a694f646f6b6f000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f4b616e6a694f646f6b6f000000000000000000000000000000000000000000008152506002611a0a620000e4620000d8620001f660201b60201c565b620001fe60201b60201c565b600081116200012a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012190620003e2565b60405180910390fd5b6000821162000170576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016790620003c0565b60405180910390fd5b836002908051906020019062000188929190620002c2565b508260039080519060200190620001a1929190620002c2565b508160a08181525050806080818152505050505050600160098190555060405180608001604052806051815260200162005b9860519139600d9080519060200190620001ef929190620002c2565b5062000518565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002d09062000415565b90600052602060002090601f016020900481019282620002f4576000855562000340565b82601f106200030f57805160ff191683800117855562000340565b8280016001018555821562000340579182015b828111156200033f57825182559160200191906001019062000322565b5b5090506200034f919062000353565b5090565b5b808211156200036e57600081600090555060010162000354565b5090565b60006200038160278362000404565b91506200038e826200047a565b604082019050919050565b6000620003a8602e8362000404565b9150620003b582620004c9565b604082019050919050565b60006020820190508181036000830152620003db8162000372565b9050919050565b60006020820190508181036000830152620003fd8162000399565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200042e57607f821691505b602082108114156200044557620004446200044b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a05161564c6200054c600039600081816127b0015281816127d901526130f001526000611840015261564c6000f3fe6080604052600436106102465760003560e01c80636352211e11610139578063ac446002116100b6578063d7224ba01161007a578063d7224ba01461087d578063dc33e681146108a8578063e8a3d485146108e5578063e985e9c514610910578063f2fde38b1461094d578063fe60d12c1461097657610246565b8063ac446002146107ac578063af7b26e9146107c3578063b88d4fde146107ec578063c87b56dd14610815578063d04950a11461085257610246565b80639231ab2a116100fd5780639231ab2a146106d457806395d89b411461071157806398d5fdca1461073c578063a0712d6814610767578063a22cb4651461078357610246565b80636352211e146105ed57806370a082311461062a578063715018a6146106675780638d859f3e1461067e5780638da5cb5b146106a957610246565b806323b872dd116101c75780633fd173661161018b5780633fd173661461050a57806342842e0e146105335780634e69d5601461055c5780634f6ccce71461058757806355f804b3146105c457610246565b806323b872dd146104135780632e49d78b1461043c5780632f2ffc57146104655780632f745c59146104905780633af32abf146104cd57610246565b8063095ea7b31161020e578063095ea7b3146103425780630c4061b01461036b57806318160ddd146103945780631d428c12146103bf578063200d2ed2146103e857610246565b80630199e3471461024b57806301ffc9a714610274578063050225ea146102b157806306fdde03146102da578063081812fc14610305575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613a71565b6109a1565b005b34801561028057600080fd5b5061029b600480360381019061029691906139ce565b610a27565b6040516102a8919061415e565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d39190613941565b610b71565b005b3480156102e657600080fd5b506102ef610bfb565b6040516102fc9190614179565b60405180910390f35b34801561031157600080fd5b5061032c60048036038101906103279190613a71565b610c8d565b60405161033991906140f7565b60405180910390f35b34801561034e57600080fd5b5061036960048036038101906103649190613941565b610d12565b005b34801561037757600080fd5b50610392600480360381019061038d9190613a71565b610e2b565b005b3480156103a057600080fd5b506103a9610eb1565b6040516103b69190614556565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190613981565b610ebb565b005b3480156103f457600080fd5b506103fd610fdc565b60405161040a9190614571565b60405180910390f35b34801561041f57600080fd5b5061043a6004803603810190610435919061382b565b610fef565b005b34801561044857600080fd5b50610463600480360381019061045e9190613a9e565b610fff565b005b34801561047157600080fd5b5061047a611099565b6040516104879190614556565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613941565b61109f565b6040516104c49190614556565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906137be565b61129d565b604051610501919061415e565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190613a71565b6112f3565b005b34801561053f57600080fd5b5061055a6004803603810190610555919061382b565b611379565b005b34801561056857600080fd5b50610571611399565b60405161057e9190614556565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a99190613a71565b6113b3565b6040516105bb9190614556565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190613a28565b611406565b005b3480156105f957600080fd5b50610614600480360381019061060f9190613a71565b61149c565b60405161062191906140f7565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c91906137be565b6114b2565b60405161065e9190614556565b60405180910390f35b34801561067357600080fd5b5061067c61159b565b005b34801561068a57600080fd5b50610693611623565b6040516106a09190614556565b60405180910390f35b3480156106b557600080fd5b506106be611629565b6040516106cb91906140f7565b60405180910390f35b3480156106e057600080fd5b506106fb60048036038101906106f69190613a71565b611652565b604051610708919061453b565b60405180910390f35b34801561071d57600080fd5b5061072661166a565b6040516107339190614179565b60405180910390f35b34801561074857600080fd5b506107516116fc565b60405161075e9190614556565b60405180910390f35b610781600480360381019061077c9190613a71565b611706565b005b34801561078f57600080fd5b506107aa60048036038101906107a59190613901565b6119b7565b005b3480156107b857600080fd5b506107c1611b38565b005b3480156107cf57600080fd5b506107ea60048036038101906107e59190613a71565b611cb9565b005b3480156107f857600080fd5b50610813600480360381019061080e919061387e565b611d3f565b005b34801561082157600080fd5b5061083c60048036038101906108379190613a71565b611d9b565b6040516108499190614179565b60405180910390f35b34801561085e57600080fd5b50610867611e4e565b6040516108749190614556565b60405180910390f35b34801561088957600080fd5b50610892611e54565b60405161089f9190614556565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca91906137be565b611e5a565b6040516108dc9190614556565b60405180910390f35b3480156108f157600080fd5b506108fa611e6c565b6040516109079190614179565b60405180910390f35b34801561091c57600080fd5b50610937600480360381019061093291906137eb565b611ec1565b604051610944919061415e565b60405180910390f35b34801561095957600080fd5b50610974600480360381019061096f91906137be565b611f55565b005b34801561098257600080fd5b5061098b61204d565b6040516109989190614556565b60405180910390f35b6109a9612053565b73ffffffffffffffffffffffffffffffffffffffff166109c7611629565b73ffffffffffffffffffffffffffffffffffffffff1614610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a149061433b565b60405180910390fd5b80600b8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b5a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b6a5750610b698261205b565b5b9050919050565b610b79612053565b73ffffffffffffffffffffffffffffffffffffffff16610b97611629565b73ffffffffffffffffffffffffffffffffffffffff1614610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be49061433b565b60405180910390fd5b610bf782826120c5565b5050565b606060028054610c0a9061490d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c369061490d565b8015610c835780601f10610c5857610100808354040283529160200191610c83565b820191906000526020600020905b815481529060010190602001808311610c6657829003601f168201915b5050505050905090565b6000610c98826120e3565b610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce906144fb565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d1d8261149c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d85906143bb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dad612053565b73ffffffffffffffffffffffffffffffffffffffff161480610ddc5750610ddb81610dd6612053565b611ec1565b5b610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e129061429b565b60405180910390fd5b610e268383836120f1565b505050565b610e33612053565b73ffffffffffffffffffffffffffffffffffffffff16610e51611629565b73ffffffffffffffffffffffffffffffffffffffff1614610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e9061433b565b60405180910390fd5b80600f8190555050565b6000600154905090565b610ec3612053565b73ffffffffffffffffffffffffffffffffffffffff16610ee1611629565b73ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e9061433b565b60405180910390fd5b60005b82829050811015610fd757600160106000858585818110610f5e57610f5d614a77565b5b9050602002016020810190610f7391906137be565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610fcf90614970565b915050610f3a565b505050565b600e60009054906101000a900460ff1681565b610ffa8383836121a3565b505050565b611007612053565b73ffffffffffffffffffffffffffffffffffffffff16611025611629565b73ffffffffffffffffffffffffffffffffffffffff161461107b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110729061433b565b60405180910390fd5b80600e60006101000a81548160ff021916908360ff16021790555050565b600b5481565b60006110aa836114b2565b82106110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e29061419b565b60405180910390fd5b60006110f5610eb1565b905060008060005b8381101561125b576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111ef57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112475786841415611238578195505050505050611297565b838061124390614970565b9450505b50808061125390614970565b9150506110fd565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e9061449b565b60405180910390fd5b92915050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112fb612053565b73ffffffffffffffffffffffffffffffffffffffff16611319611629565b73ffffffffffffffffffffffffffffffffffffffff161461136f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113669061433b565b60405180910390fd5b80600c8190555050565b61139483838360405180602001604052806000815250611d3f565b505050565b6000600e60009054906101000a900460ff1660ff16905090565b60006113bd610eb1565b82106113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f5906141fb565b60405180910390fd5b819050919050565b61140e612053565b73ffffffffffffffffffffffffffffffffffffffff1661142c611629565b73ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114799061433b565b60405180910390fd5b80600d908051906020019061149892919061352d565b5050565b60006114a78261275c565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a906142db565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115a3612053565b73ffffffffffffffffffffffffffffffffffffffff166115c1611629565b73ffffffffffffffffffffffffffffffffffffffff1614611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e9061433b565b60405180910390fd5b611621600061295f565b565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61165a6135b3565b6116638261275c565b9050919050565b6060600380546116799061490d565b80601f01602080910402602001604051908101604052809291908181526020018280546116a59061490d565b80156116f25780601f106116c7576101008083540402835291602001916116f2565b820191906000526020600020905b8154815290600101906020018083116116d557829003601f168201915b5050505050905090565b6000600c54905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b9061427b565b60405180910390fd5b6001600e60009054906101000a900460ff1660ff161480156117df5750601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806117fc57506002600e60009054906101000a900460ff1660ff16145b61183b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118329061425b565b60405180910390fd5b600f547f000000000000000000000000000000000000000000000000000000000000000061186991906147bc565b81611872610eb1565b61187c91906146a7565b11156118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b4906142fb565b60405180910390fd5b600b54816118ca33611e5a565b6118d491906146a7565b1115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c906142bb565b60405180910390fd5b600a5481111561195a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119519061447b565b60405180910390fd5b80600c54611968919061472e565b3410156119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a19061441b565b60405180910390fd5b6119b433826120c5565b50565b6119bf612053565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a249061437b565b60405180910390fd5b8060076000611a3a612053565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ae7612053565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b2c919061415e565b60405180910390a35050565b611b40612053565b73ffffffffffffffffffffffffffffffffffffffff16611b5e611629565b73ffffffffffffffffffffffffffffffffffffffff1614611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab9061433b565b60405180910390fd5b60026009541415611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906144bb565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611c28906140e2565b60006040518083038185875af1925050503d8060008114611c65576040519150601f19603f3d011682016040523d82523d6000602084013e611c6a565b606091505b5050905080611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca5906143db565b60405180910390fd5b506001600981905550565b611cc1612053565b73ffffffffffffffffffffffffffffffffffffffff16611cdf611629565b73ffffffffffffffffffffffffffffffffffffffff1614611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c9061433b565b60405180910390fd5b80600a8190555050565b611d4a8484846121a3565b611d5684848484612a23565b611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8c906143fb565b60405180910390fd5b50505050565b6060611da6826120e3565b611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc9061435b565b60405180910390fd5b6000611def612bba565b90506000815111611e0f5760405180602001604052806000815250611e46565b80611e25600185611e2091906146a7565b612c4c565b604051602001611e3692919061407c565b6040516020818303038152906040525b915050919050565b600a5481565b60085481565b6000611e6582612dad565b9050919050565b60606000611e96604051602001611e82906140ab565b604051602081830303815290604052612e96565b905080604051602001611ea991906140c0565b60405160208183030381529060405290508091505090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f5d612053565b73ffffffffffffffffffffffffffffffffffffffff16611f7b611629565b73ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc89061433b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612041576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612038906141bb565b60405180910390fd5b61204a8161295f565b50565b600f5481565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6120df82826040518060200160405280600081525061302e565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121ae8261275c565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166121d5612053565b73ffffffffffffffffffffffffffffffffffffffff16148061223157506121fa612053565b73ffffffffffffffffffffffffffffffffffffffff1661221984610c8d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061224d575061224c8260000151612247612053565b611ec1565b5b90508061228f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122869061439b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f89061431b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612371576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123689061421b565b60405180910390fd5b61237e858585600161350e565b61238e60008484600001516120f1565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166123fc9190614788565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124a09190614661565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846125a691906146a7565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126ec5761261c816120e3565b156126eb576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127548686866001613514565b505050505050565b6127646135b3565b61276d826120e3565b6127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a3906141db565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106128105760017f00000000000000000000000000000000000000000000000000000000000000008461280391906147bc565b61280d91906146a7565b90505b60008390505b81811061291e576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461290a5780935050505061295a565b508080612916906148e3565b915050612816565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612951906144db565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612a448473ffffffffffffffffffffffffffffffffffffffff1661351a565b15612bad578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a6d612053565b8786866040518563ffffffff1660e01b8152600401612a8f9493929190614112565b602060405180830381600087803b158015612aa957600080fd5b505af1925050508015612ada57506040513d601f19601f82011682018060405250810190612ad791906139fb565b60015b612b5d573d8060008114612b0a576040519150601f19603f3d011682016040523d82523d6000602084013e612b0f565b606091505b50600081511415612b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4c906143fb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bb2565b600190505b949350505050565b6060600d8054612bc99061490d565b80601f0160208091040260200160405190810160405280929190818152602001828054612bf59061490d565b8015612c425780601f10612c1757610100808354040283529160200191612c42565b820191906000526020600020905b815481529060010190602001808311612c2557829003601f168201915b5050505050905090565b60606000821415612c94576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612da8565b600082905060005b60008214612cc6578080612caf90614970565b915050600a82612cbf91906146fd565b9150612c9c565b60008167ffffffffffffffff811115612ce257612ce1614aa6565b5b6040519080825280601f01601f191660200182016040528015612d145781602001600182028036833780820191505090505b5090505b60008514612da157600182612d2d91906147bc565b9150600a85612d3c91906149b9565b6030612d4891906146a7565b60f81b818381518110612d5e57612d5d614a77565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d9a91906146fd565b9450612d18565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e159061423b565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60606000825190506000811415612ebf5760405180602001604052806000815250915050613029565b60006003600283612ed091906146a7565b612eda91906146fd565b6004612ee6919061472e565b90506000602082612ef791906146a7565b67ffffffffffffffff811115612f1057612f0f614aa6565b5b6040519080825280601f01601f191660200182016040528015612f425781602001600182028036833780820191505090505b50905060006040518060600160405280604081526020016155d7604091399050600181016020830160005b86811015612fe65760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612f6d565b50600386066001811461300057600281146130105761301b565b613d3d60f01b600283035261301b565b603d60f81b60018303525b508484525050819450505050505b919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156130a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309c9061445b565b60405180910390fd5b6130ae816120e3565b156130ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e59061443b565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131489061451b565b60405180910390fd5b61315e600085838661350e565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161325b9190614661565b6fffffffffffffffffffffffffffffffff1681526020018583602001516132829190614661565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156134f157818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134916000888488612a23565b6134d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c7906143fb565b60405180910390fd5b81806134db90614970565b92505080806134e990614970565b915050613420565b50806001819055506135066000878588613514565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b8280546135399061490d565b90600052602060002090601f01602090048101928261355b57600085556135a2565b82601f1061357457805160ff19168380011785556135a2565b828001600101855582156135a2579182015b828111156135a1578251825591602001919060010190613586565b5b5090506135af91906135ed565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156136065760008160009055506001016135ee565b5090565b600061361d613618846145b1565b61458c565b90508281526020810184848401111561363957613638614ae4565b5b6136448482856148a1565b509392505050565b600061365f61365a846145e2565b61458c565b90508281526020810184848401111561367b5761367a614ae4565b5b6136868482856148a1565b509392505050565b60008135905061369d81615563565b92915050565b60008083601f8401126136b9576136b8614ada565b5b8235905067ffffffffffffffff8111156136d6576136d5614ad5565b5b6020830191508360208202830111156136f2576136f1614adf565b5b9250929050565b6000813590506137088161557a565b92915050565b60008135905061371d81615591565b92915050565b60008151905061373281615591565b92915050565b600082601f83011261374d5761374c614ada565b5b813561375d84826020860161360a565b91505092915050565b600082601f83011261377b5761377a614ada565b5b813561378b84826020860161364c565b91505092915050565b6000813590506137a3816155a8565b92915050565b6000813590506137b8816155bf565b92915050565b6000602082840312156137d4576137d3614aee565b5b60006137e28482850161368e565b91505092915050565b6000806040838503121561380257613801614aee565b5b60006138108582860161368e565b92505060206138218582860161368e565b9150509250929050565b60008060006060848603121561384457613843614aee565b5b60006138528682870161368e565b93505060206138638682870161368e565b925050604061387486828701613794565b9150509250925092565b6000806000806080858703121561389857613897614aee565b5b60006138a68782880161368e565b94505060206138b78782880161368e565b93505060406138c887828801613794565b925050606085013567ffffffffffffffff8111156138e9576138e8614ae9565b5b6138f587828801613738565b91505092959194509250565b6000806040838503121561391857613917614aee565b5b60006139268582860161368e565b9250506020613937858286016136f9565b9150509250929050565b6000806040838503121561395857613957614aee565b5b60006139668582860161368e565b925050602061397785828601613794565b9150509250929050565b6000806020838503121561399857613997614aee565b5b600083013567ffffffffffffffff8111156139b6576139b5614ae9565b5b6139c2858286016136a3565b92509250509250929050565b6000602082840312156139e4576139e3614aee565b5b60006139f28482850161370e565b91505092915050565b600060208284031215613a1157613a10614aee565b5b6000613a1f84828501613723565b91505092915050565b600060208284031215613a3e57613a3d614aee565b5b600082013567ffffffffffffffff811115613a5c57613a5b614ae9565b5b613a6884828501613766565b91505092915050565b600060208284031215613a8757613a86614aee565b5b6000613a9584828501613794565b91505092915050565b600060208284031215613ab457613ab3614aee565b5b6000613ac2848285016137a9565b91505092915050565b613ad4816147f0565b82525050565b613ae3816147f0565b82525050565b613af281614802565b82525050565b6000613b0382614613565b613b0d8185614629565b9350613b1d8185602086016148b0565b613b2681614af3565b840191505092915050565b6000613b3c8261461e565b613b468185614645565b9350613b568185602086016148b0565b613b5f81614af3565b840191505092915050565b6000613b758261461e565b613b7f8185614656565b9350613b8f8185602086016148b0565b80840191505092915050565b6000613ba8602283614645565b9150613bb382614b04565b604082019050919050565b6000613bcb602683614645565b9150613bd682614b53565b604082019050919050565b6000613bee602a83614645565b9150613bf982614ba2565b604082019050919050565b6000613c11602383614645565b9150613c1c82614bf1565b604082019050919050565b6000613c34602583614645565b9150613c3f82614c40565b604082019050919050565b6000613c57603183614645565b9150613c6282614c8f565b604082019050919050565b6000613c7a601283614645565b9150613c8582614cde565b602082019050919050565b6000613c9e61022383614656565b9150613ca982614d07565b61022382019050919050565b6000613cc2601e83614645565b9150613ccd82614fc0565b602082019050919050565b6000613ce5603983614645565b9150613cf082614fe9565b604082019050919050565b6000613d08601e83614645565b9150613d1382615038565b602082019050919050565b6000613d2b602b83614645565b9150613d3682615061565b604082019050919050565b6000613d4e601283614645565b9150613d59826150b0565b602082019050919050565b6000613d71602683614645565b9150613d7c826150d9565b604082019050919050565b6000613d94600583614656565b9150613d9f82615128565b600582019050919050565b6000613db7602083614645565b9150613dc282615151565b602082019050919050565b6000613dda602f83614645565b9150613de58261517a565b604082019050919050565b6000613dfd601a83614645565b9150613e08826151c9565b602082019050919050565b6000613e20603283614645565b9150613e2b826151f2565b604082019050919050565b6000613e43601d83614656565b9150613e4e82615241565b601d82019050919050565b6000613e66602283614645565b9150613e718261526a565b604082019050919050565b6000613e8960008361463a565b9150613e94826152b9565b600082019050919050565b6000613eac601083614645565b9150613eb7826152bc565b602082019050919050565b6000613ecf603383614645565b9150613eda826152e5565b604082019050919050565b6000613ef2601683614645565b9150613efd82615334565b602082019050919050565b6000613f15601d83614645565b9150613f208261535d565b602082019050919050565b6000613f38602183614645565b9150613f4382615386565b604082019050919050565b6000613f5b601683614645565b9150613f66826153d5565b602082019050919050565b6000613f7e602e83614645565b9150613f89826153fe565b604082019050919050565b6000613fa1601f83614645565b9150613fac8261544d565b602082019050919050565b6000613fc4602f83614645565b9150613fcf82615476565b604082019050919050565b6000613fe7602d83614645565b9150613ff2826154c5565b604082019050919050565b600061400a602283614645565b915061401582615514565b604082019050919050565b6040820160008201516140366000850182613acb565b506020820151614049602085018261405e565b50505050565b61405881614876565b82525050565b61406781614880565b82525050565b61407681614894565b82525050565b60006140888285613b6a565b91506140948284613b6a565b915061409f82613d87565b91508190509392505050565b60006140b682613c90565b9150819050919050565b60006140cb82613e36565b91506140d78284613b6a565b915081905092915050565b60006140ed82613e7c565b9150819050919050565b600060208201905061410c6000830184613ada565b92915050565b60006080820190506141276000830187613ada565b6141346020830186613ada565b614141604083018561404f565b81810360608301526141538184613af8565b905095945050505050565b60006020820190506141736000830184613ae9565b92915050565b600060208201905081810360008301526141938184613b31565b905092915050565b600060208201905081810360008301526141b481613b9b565b9050919050565b600060208201905081810360008301526141d481613bbe565b9050919050565b600060208201905081810360008301526141f481613be1565b9050919050565b6000602082019050818103600083015261421481613c04565b9050919050565b6000602082019050818103600083015261423481613c27565b9050919050565b6000602082019050818103600083015261425481613c4a565b9050919050565b6000602082019050818103600083015261427481613c6d565b9050919050565b6000602082019050818103600083015261429481613cb5565b9050919050565b600060208201905081810360008301526142b481613cd8565b9050919050565b600060208201905081810360008301526142d481613cfb565b9050919050565b600060208201905081810360008301526142f481613d1e565b9050919050565b6000602082019050818103600083015261431481613d41565b9050919050565b6000602082019050818103600083015261433481613d64565b9050919050565b6000602082019050818103600083015261435481613daa565b9050919050565b6000602082019050818103600083015261437481613dcd565b9050919050565b6000602082019050818103600083015261439481613df0565b9050919050565b600060208201905081810360008301526143b481613e13565b9050919050565b600060208201905081810360008301526143d481613e59565b9050919050565b600060208201905081810360008301526143f481613e9f565b9050919050565b6000602082019050818103600083015261441481613ec2565b9050919050565b6000602082019050818103600083015261443481613ee5565b9050919050565b6000602082019050818103600083015261445481613f08565b9050919050565b6000602082019050818103600083015261447481613f2b565b9050919050565b6000602082019050818103600083015261449481613f4e565b9050919050565b600060208201905081810360008301526144b481613f71565b9050919050565b600060208201905081810360008301526144d481613f94565b9050919050565b600060208201905081810360008301526144f481613fb7565b9050919050565b6000602082019050818103600083015261451481613fda565b9050919050565b6000602082019050818103600083015261453481613ffd565b9050919050565b60006040820190506145506000830184614020565b92915050565b600060208201905061456b600083018461404f565b92915050565b6000602082019050614586600083018461406d565b92915050565b60006145966145a7565b90506145a2828261493f565b919050565b6000604051905090565b600067ffffffffffffffff8211156145cc576145cb614aa6565b5b6145d582614af3565b9050602081019050919050565b600067ffffffffffffffff8211156145fd576145fc614aa6565b5b61460682614af3565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061466c8261483a565b91506146778361483a565b9250826fffffffffffffffffffffffffffffffff0382111561469c5761469b6149ea565b5b828201905092915050565b60006146b282614876565b91506146bd83614876565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146f2576146f16149ea565b5b828201905092915050565b600061470882614876565b915061471383614876565b92508261472357614722614a19565b5b828204905092915050565b600061473982614876565b915061474483614876565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561477d5761477c6149ea565b5b828202905092915050565b60006147938261483a565b915061479e8361483a565b9250828210156147b1576147b06149ea565b5b828203905092915050565b60006147c782614876565b91506147d283614876565b9250828210156147e5576147e46149ea565b5b828203905092915050565b60006147fb82614856565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156148ce5780820151818401526020810190506148b3565b838111156148dd576000848401525b50505050565b60006148ee82614876565b91506000821415614902576149016149ea565b5b600182039050919050565b6000600282049050600182168061492557607f821691505b6020821081141561493957614938614a48565b5b50919050565b61494882614af3565b810181811067ffffffffffffffff8211171561496757614966614aa6565b5b80604052505050565b600061497b82614876565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149ae576149ad6149ea565b5b600182019050919050565b60006149c482614876565b91506149cf83614876565b9250826149df576149de614a19565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f7b226e616d65223a20224b616e6a69204f646f6b6f222c20226465736372697060008201527f74696f6e223a20224b616e6a694f646f6b6f2069732061206c6966656c6f6e6760208201527f20636f6c6c656374696f6e207265766f6c76696e672061726f756e6420616e6960408201527f6d6520696e73706972656420636861726163746572732c206561636820696e6460608201527f6976696475616c6c792064657369676e656420616e64206d61646520666f722060808201527f667574757265207574696c6974792e2054686520666972737420636f6c6c656360a08201527f74696f6e2077696c6c20636f6e73697374206f66207468652047656e6573697360c08201527f204d696e742050617373207468617420697320746865206b657920746f20616c60e08201527f6c206675747572652061697264726f70732e204f757220636f7265207465616d6101008201527f20697320736974756174656420696e20546f6b796f2070726f637572696e67206101208201527f66757475726520636f6c6c61626f726174696f6e7320666f7220616c6c2070616101408201527f737320686f6c646572732e2057652063757272656e746c792068617665206d616101608201527f6a6f72697479206f66203230323220616c6c20706c616e6e6564206f757420616101808201527f6e642077696c6c20736f6f6e20626520776f726b696e672070617374207468696101a08201527f732e222c202273656c6c65725f6665655f62617369735f706f696e7473223a206101c08201527f3530302c20226665655f726563697069656e74223a20223078443530463834456101e08201527f34384636656563433437353665423633336545384633336337363630386161366102008201527f39227d000000000000000000000000000000000000000000000000000000000061022082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61556c816147f0565b811461557757600080fd5b50565b61558381614802565b811461558e57600080fd5b50565b61559a8161480e565b81146155a557600080fd5b50565b6155b181614876565b81146155bc57600080fd5b50565b6155c881614894565b81146155d357600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220bff19bcaa896a4ee82e588bc36d05d87a3957a393e4c3aedf3e3f57552cca8f464736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d54625a6e4845785176557465455a576262565133463139657941713369326339564c4c52573469784b7668512f

Deployed Bytecode

0x6080604052600436106102465760003560e01c80636352211e11610139578063ac446002116100b6578063d7224ba01161007a578063d7224ba01461087d578063dc33e681146108a8578063e8a3d485146108e5578063e985e9c514610910578063f2fde38b1461094d578063fe60d12c1461097657610246565b8063ac446002146107ac578063af7b26e9146107c3578063b88d4fde146107ec578063c87b56dd14610815578063d04950a11461085257610246565b80639231ab2a116100fd5780639231ab2a146106d457806395d89b411461071157806398d5fdca1461073c578063a0712d6814610767578063a22cb4651461078357610246565b80636352211e146105ed57806370a082311461062a578063715018a6146106675780638d859f3e1461067e5780638da5cb5b146106a957610246565b806323b872dd116101c75780633fd173661161018b5780633fd173661461050a57806342842e0e146105335780634e69d5601461055c5780634f6ccce71461058757806355f804b3146105c457610246565b806323b872dd146104135780632e49d78b1461043c5780632f2ffc57146104655780632f745c59146104905780633af32abf146104cd57610246565b8063095ea7b31161020e578063095ea7b3146103425780630c4061b01461036b57806318160ddd146103945780631d428c12146103bf578063200d2ed2146103e857610246565b80630199e3471461024b57806301ffc9a714610274578063050225ea146102b157806306fdde03146102da578063081812fc14610305575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613a71565b6109a1565b005b34801561028057600080fd5b5061029b600480360381019061029691906139ce565b610a27565b6040516102a8919061415e565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d39190613941565b610b71565b005b3480156102e657600080fd5b506102ef610bfb565b6040516102fc9190614179565b60405180910390f35b34801561031157600080fd5b5061032c60048036038101906103279190613a71565b610c8d565b60405161033991906140f7565b60405180910390f35b34801561034e57600080fd5b5061036960048036038101906103649190613941565b610d12565b005b34801561037757600080fd5b50610392600480360381019061038d9190613a71565b610e2b565b005b3480156103a057600080fd5b506103a9610eb1565b6040516103b69190614556565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190613981565b610ebb565b005b3480156103f457600080fd5b506103fd610fdc565b60405161040a9190614571565b60405180910390f35b34801561041f57600080fd5b5061043a6004803603810190610435919061382b565b610fef565b005b34801561044857600080fd5b50610463600480360381019061045e9190613a9e565b610fff565b005b34801561047157600080fd5b5061047a611099565b6040516104879190614556565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613941565b61109f565b6040516104c49190614556565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906137be565b61129d565b604051610501919061415e565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190613a71565b6112f3565b005b34801561053f57600080fd5b5061055a6004803603810190610555919061382b565b611379565b005b34801561056857600080fd5b50610571611399565b60405161057e9190614556565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a99190613a71565b6113b3565b6040516105bb9190614556565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190613a28565b611406565b005b3480156105f957600080fd5b50610614600480360381019061060f9190613a71565b61149c565b60405161062191906140f7565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c91906137be565b6114b2565b60405161065e9190614556565b60405180910390f35b34801561067357600080fd5b5061067c61159b565b005b34801561068a57600080fd5b50610693611623565b6040516106a09190614556565b60405180910390f35b3480156106b557600080fd5b506106be611629565b6040516106cb91906140f7565b60405180910390f35b3480156106e057600080fd5b506106fb60048036038101906106f69190613a71565b611652565b604051610708919061453b565b60405180910390f35b34801561071d57600080fd5b5061072661166a565b6040516107339190614179565b60405180910390f35b34801561074857600080fd5b506107516116fc565b60405161075e9190614556565b60405180910390f35b610781600480360381019061077c9190613a71565b611706565b005b34801561078f57600080fd5b506107aa60048036038101906107a59190613901565b6119b7565b005b3480156107b857600080fd5b506107c1611b38565b005b3480156107cf57600080fd5b506107ea60048036038101906107e59190613a71565b611cb9565b005b3480156107f857600080fd5b50610813600480360381019061080e919061387e565b611d3f565b005b34801561082157600080fd5b5061083c60048036038101906108379190613a71565b611d9b565b6040516108499190614179565b60405180910390f35b34801561085e57600080fd5b50610867611e4e565b6040516108749190614556565b60405180910390f35b34801561088957600080fd5b50610892611e54565b60405161089f9190614556565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca91906137be565b611e5a565b6040516108dc9190614556565b60405180910390f35b3480156108f157600080fd5b506108fa611e6c565b6040516109079190614179565b60405180910390f35b34801561091c57600080fd5b50610937600480360381019061093291906137eb565b611ec1565b604051610944919061415e565b60405180910390f35b34801561095957600080fd5b50610974600480360381019061096f91906137be565b611f55565b005b34801561098257600080fd5b5061098b61204d565b6040516109989190614556565b60405180910390f35b6109a9612053565b73ffffffffffffffffffffffffffffffffffffffff166109c7611629565b73ffffffffffffffffffffffffffffffffffffffff1614610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a149061433b565b60405180910390fd5b80600b8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b5a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b6a5750610b698261205b565b5b9050919050565b610b79612053565b73ffffffffffffffffffffffffffffffffffffffff16610b97611629565b73ffffffffffffffffffffffffffffffffffffffff1614610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be49061433b565b60405180910390fd5b610bf782826120c5565b5050565b606060028054610c0a9061490d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c369061490d565b8015610c835780601f10610c5857610100808354040283529160200191610c83565b820191906000526020600020905b815481529060010190602001808311610c6657829003601f168201915b5050505050905090565b6000610c98826120e3565b610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce906144fb565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d1d8261149c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d85906143bb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dad612053565b73ffffffffffffffffffffffffffffffffffffffff161480610ddc5750610ddb81610dd6612053565b611ec1565b5b610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e129061429b565b60405180910390fd5b610e268383836120f1565b505050565b610e33612053565b73ffffffffffffffffffffffffffffffffffffffff16610e51611629565b73ffffffffffffffffffffffffffffffffffffffff1614610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e9061433b565b60405180910390fd5b80600f8190555050565b6000600154905090565b610ec3612053565b73ffffffffffffffffffffffffffffffffffffffff16610ee1611629565b73ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e9061433b565b60405180910390fd5b60005b82829050811015610fd757600160106000858585818110610f5e57610f5d614a77565b5b9050602002016020810190610f7391906137be565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610fcf90614970565b915050610f3a565b505050565b600e60009054906101000a900460ff1681565b610ffa8383836121a3565b505050565b611007612053565b73ffffffffffffffffffffffffffffffffffffffff16611025611629565b73ffffffffffffffffffffffffffffffffffffffff161461107b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110729061433b565b60405180910390fd5b80600e60006101000a81548160ff021916908360ff16021790555050565b600b5481565b60006110aa836114b2565b82106110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e29061419b565b60405180910390fd5b60006110f5610eb1565b905060008060005b8381101561125b576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111ef57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112475786841415611238578195505050505050611297565b838061124390614970565b9450505b50808061125390614970565b9150506110fd565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e9061449b565b60405180910390fd5b92915050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112fb612053565b73ffffffffffffffffffffffffffffffffffffffff16611319611629565b73ffffffffffffffffffffffffffffffffffffffff161461136f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113669061433b565b60405180910390fd5b80600c8190555050565b61139483838360405180602001604052806000815250611d3f565b505050565b6000600e60009054906101000a900460ff1660ff16905090565b60006113bd610eb1565b82106113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f5906141fb565b60405180910390fd5b819050919050565b61140e612053565b73ffffffffffffffffffffffffffffffffffffffff1661142c611629565b73ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114799061433b565b60405180910390fd5b80600d908051906020019061149892919061352d565b5050565b60006114a78261275c565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a906142db565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115a3612053565b73ffffffffffffffffffffffffffffffffffffffff166115c1611629565b73ffffffffffffffffffffffffffffffffffffffff1614611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e9061433b565b60405180910390fd5b611621600061295f565b565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61165a6135b3565b6116638261275c565b9050919050565b6060600380546116799061490d565b80601f01602080910402602001604051908101604052809291908181526020018280546116a59061490d565b80156116f25780601f106116c7576101008083540402835291602001916116f2565b820191906000526020600020905b8154815290600101906020018083116116d557829003601f168201915b5050505050905090565b6000600c54905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b9061427b565b60405180910390fd5b6001600e60009054906101000a900460ff1660ff161480156117df5750601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806117fc57506002600e60009054906101000a900460ff1660ff16145b61183b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118329061425b565b60405180910390fd5b600f547f0000000000000000000000000000000000000000000000000000000000001a0a61186991906147bc565b81611872610eb1565b61187c91906146a7565b11156118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b4906142fb565b60405180910390fd5b600b54816118ca33611e5a565b6118d491906146a7565b1115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c906142bb565b60405180910390fd5b600a5481111561195a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119519061447b565b60405180910390fd5b80600c54611968919061472e565b3410156119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a19061441b565b60405180910390fd5b6119b433826120c5565b50565b6119bf612053565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a249061437b565b60405180910390fd5b8060076000611a3a612053565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ae7612053565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b2c919061415e565b60405180910390a35050565b611b40612053565b73ffffffffffffffffffffffffffffffffffffffff16611b5e611629565b73ffffffffffffffffffffffffffffffffffffffff1614611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab9061433b565b60405180910390fd5b60026009541415611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906144bb565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611c28906140e2565b60006040518083038185875af1925050503d8060008114611c65576040519150601f19603f3d011682016040523d82523d6000602084013e611c6a565b606091505b5050905080611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca5906143db565b60405180910390fd5b506001600981905550565b611cc1612053565b73ffffffffffffffffffffffffffffffffffffffff16611cdf611629565b73ffffffffffffffffffffffffffffffffffffffff1614611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c9061433b565b60405180910390fd5b80600a8190555050565b611d4a8484846121a3565b611d5684848484612a23565b611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8c906143fb565b60405180910390fd5b50505050565b6060611da6826120e3565b611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc9061435b565b60405180910390fd5b6000611def612bba565b90506000815111611e0f5760405180602001604052806000815250611e46565b80611e25600185611e2091906146a7565b612c4c565b604051602001611e3692919061407c565b6040516020818303038152906040525b915050919050565b600a5481565b60085481565b6000611e6582612dad565b9050919050565b60606000611e96604051602001611e82906140ab565b604051602081830303815290604052612e96565b905080604051602001611ea991906140c0565b60405160208183030381529060405290508091505090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f5d612053565b73ffffffffffffffffffffffffffffffffffffffff16611f7b611629565b73ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc89061433b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612041576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612038906141bb565b60405180910390fd5b61204a8161295f565b50565b600f5481565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6120df82826040518060200160405280600081525061302e565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121ae8261275c565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166121d5612053565b73ffffffffffffffffffffffffffffffffffffffff16148061223157506121fa612053565b73ffffffffffffffffffffffffffffffffffffffff1661221984610c8d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061224d575061224c8260000151612247612053565b611ec1565b5b90508061228f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122869061439b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f89061431b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612371576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123689061421b565b60405180910390fd5b61237e858585600161350e565b61238e60008484600001516120f1565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166123fc9190614788565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124a09190614661565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846125a691906146a7565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126ec5761261c816120e3565b156126eb576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127548686866001613514565b505050505050565b6127646135b3565b61276d826120e3565b6127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a3906141db565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000283106128105760017f00000000000000000000000000000000000000000000000000000000000000028461280391906147bc565b61280d91906146a7565b90505b60008390505b81811061291e576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461290a5780935050505061295a565b508080612916906148e3565b915050612816565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612951906144db565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612a448473ffffffffffffffffffffffffffffffffffffffff1661351a565b15612bad578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a6d612053565b8786866040518563ffffffff1660e01b8152600401612a8f9493929190614112565b602060405180830381600087803b158015612aa957600080fd5b505af1925050508015612ada57506040513d601f19601f82011682018060405250810190612ad791906139fb565b60015b612b5d573d8060008114612b0a576040519150601f19603f3d011682016040523d82523d6000602084013e612b0f565b606091505b50600081511415612b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4c906143fb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bb2565b600190505b949350505050565b6060600d8054612bc99061490d565b80601f0160208091040260200160405190810160405280929190818152602001828054612bf59061490d565b8015612c425780601f10612c1757610100808354040283529160200191612c42565b820191906000526020600020905b815481529060010190602001808311612c2557829003601f168201915b5050505050905090565b60606000821415612c94576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612da8565b600082905060005b60008214612cc6578080612caf90614970565b915050600a82612cbf91906146fd565b9150612c9c565b60008167ffffffffffffffff811115612ce257612ce1614aa6565b5b6040519080825280601f01601f191660200182016040528015612d145781602001600182028036833780820191505090505b5090505b60008514612da157600182612d2d91906147bc565b9150600a85612d3c91906149b9565b6030612d4891906146a7565b60f81b818381518110612d5e57612d5d614a77565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d9a91906146fd565b9450612d18565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e159061423b565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60606000825190506000811415612ebf5760405180602001604052806000815250915050613029565b60006003600283612ed091906146a7565b612eda91906146fd565b6004612ee6919061472e565b90506000602082612ef791906146a7565b67ffffffffffffffff811115612f1057612f0f614aa6565b5b6040519080825280601f01601f191660200182016040528015612f425781602001600182028036833780820191505090505b50905060006040518060600160405280604081526020016155d7604091399050600181016020830160005b86811015612fe65760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612f6d565b50600386066001811461300057600281146130105761301b565b613d3d60f01b600283035261301b565b603d60f81b60018303525b508484525050819450505050505b919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156130a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309c9061445b565b60405180910390fd5b6130ae816120e3565b156130ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e59061443b565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000002831115613151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131489061451b565b60405180910390fd5b61315e600085838661350e565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161325b9190614661565b6fffffffffffffffffffffffffffffffff1681526020018583602001516132829190614661565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156134f157818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134916000888488612a23565b6134d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c7906143fb565b60405180910390fd5b81806134db90614970565b92505080806134e990614970565b915050613420565b50806001819055506135066000878588613514565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b8280546135399061490d565b90600052602060002090601f01602090048101928261355b57600085556135a2565b82601f1061357457805160ff19168380011785556135a2565b828001600101855582156135a2579182015b828111156135a1578251825591602001919060010190613586565b5b5090506135af91906135ed565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156136065760008160009055506001016135ee565b5090565b600061361d613618846145b1565b61458c565b90508281526020810184848401111561363957613638614ae4565b5b6136448482856148a1565b509392505050565b600061365f61365a846145e2565b61458c565b90508281526020810184848401111561367b5761367a614ae4565b5b6136868482856148a1565b509392505050565b60008135905061369d81615563565b92915050565b60008083601f8401126136b9576136b8614ada565b5b8235905067ffffffffffffffff8111156136d6576136d5614ad5565b5b6020830191508360208202830111156136f2576136f1614adf565b5b9250929050565b6000813590506137088161557a565b92915050565b60008135905061371d81615591565b92915050565b60008151905061373281615591565b92915050565b600082601f83011261374d5761374c614ada565b5b813561375d84826020860161360a565b91505092915050565b600082601f83011261377b5761377a614ada565b5b813561378b84826020860161364c565b91505092915050565b6000813590506137a3816155a8565b92915050565b6000813590506137b8816155bf565b92915050565b6000602082840312156137d4576137d3614aee565b5b60006137e28482850161368e565b91505092915050565b6000806040838503121561380257613801614aee565b5b60006138108582860161368e565b92505060206138218582860161368e565b9150509250929050565b60008060006060848603121561384457613843614aee565b5b60006138528682870161368e565b93505060206138638682870161368e565b925050604061387486828701613794565b9150509250925092565b6000806000806080858703121561389857613897614aee565b5b60006138a68782880161368e565b94505060206138b78782880161368e565b93505060406138c887828801613794565b925050606085013567ffffffffffffffff8111156138e9576138e8614ae9565b5b6138f587828801613738565b91505092959194509250565b6000806040838503121561391857613917614aee565b5b60006139268582860161368e565b9250506020613937858286016136f9565b9150509250929050565b6000806040838503121561395857613957614aee565b5b60006139668582860161368e565b925050602061397785828601613794565b9150509250929050565b6000806020838503121561399857613997614aee565b5b600083013567ffffffffffffffff8111156139b6576139b5614ae9565b5b6139c2858286016136a3565b92509250509250929050565b6000602082840312156139e4576139e3614aee565b5b60006139f28482850161370e565b91505092915050565b600060208284031215613a1157613a10614aee565b5b6000613a1f84828501613723565b91505092915050565b600060208284031215613a3e57613a3d614aee565b5b600082013567ffffffffffffffff811115613a5c57613a5b614ae9565b5b613a6884828501613766565b91505092915050565b600060208284031215613a8757613a86614aee565b5b6000613a9584828501613794565b91505092915050565b600060208284031215613ab457613ab3614aee565b5b6000613ac2848285016137a9565b91505092915050565b613ad4816147f0565b82525050565b613ae3816147f0565b82525050565b613af281614802565b82525050565b6000613b0382614613565b613b0d8185614629565b9350613b1d8185602086016148b0565b613b2681614af3565b840191505092915050565b6000613b3c8261461e565b613b468185614645565b9350613b568185602086016148b0565b613b5f81614af3565b840191505092915050565b6000613b758261461e565b613b7f8185614656565b9350613b8f8185602086016148b0565b80840191505092915050565b6000613ba8602283614645565b9150613bb382614b04565b604082019050919050565b6000613bcb602683614645565b9150613bd682614b53565b604082019050919050565b6000613bee602a83614645565b9150613bf982614ba2565b604082019050919050565b6000613c11602383614645565b9150613c1c82614bf1565b604082019050919050565b6000613c34602583614645565b9150613c3f82614c40565b604082019050919050565b6000613c57603183614645565b9150613c6282614c8f565b604082019050919050565b6000613c7a601283614645565b9150613c8582614cde565b602082019050919050565b6000613c9e61022383614656565b9150613ca982614d07565b61022382019050919050565b6000613cc2601e83614645565b9150613ccd82614fc0565b602082019050919050565b6000613ce5603983614645565b9150613cf082614fe9565b604082019050919050565b6000613d08601e83614645565b9150613d1382615038565b602082019050919050565b6000613d2b602b83614645565b9150613d3682615061565b604082019050919050565b6000613d4e601283614645565b9150613d59826150b0565b602082019050919050565b6000613d71602683614645565b9150613d7c826150d9565b604082019050919050565b6000613d94600583614656565b9150613d9f82615128565b600582019050919050565b6000613db7602083614645565b9150613dc282615151565b602082019050919050565b6000613dda602f83614645565b9150613de58261517a565b604082019050919050565b6000613dfd601a83614645565b9150613e08826151c9565b602082019050919050565b6000613e20603283614645565b9150613e2b826151f2565b604082019050919050565b6000613e43601d83614656565b9150613e4e82615241565b601d82019050919050565b6000613e66602283614645565b9150613e718261526a565b604082019050919050565b6000613e8960008361463a565b9150613e94826152b9565b600082019050919050565b6000613eac601083614645565b9150613eb7826152bc565b602082019050919050565b6000613ecf603383614645565b9150613eda826152e5565b604082019050919050565b6000613ef2601683614645565b9150613efd82615334565b602082019050919050565b6000613f15601d83614645565b9150613f208261535d565b602082019050919050565b6000613f38602183614645565b9150613f4382615386565b604082019050919050565b6000613f5b601683614645565b9150613f66826153d5565b602082019050919050565b6000613f7e602e83614645565b9150613f89826153fe565b604082019050919050565b6000613fa1601f83614645565b9150613fac8261544d565b602082019050919050565b6000613fc4602f83614645565b9150613fcf82615476565b604082019050919050565b6000613fe7602d83614645565b9150613ff2826154c5565b604082019050919050565b600061400a602283614645565b915061401582615514565b604082019050919050565b6040820160008201516140366000850182613acb565b506020820151614049602085018261405e565b50505050565b61405881614876565b82525050565b61406781614880565b82525050565b61407681614894565b82525050565b60006140888285613b6a565b91506140948284613b6a565b915061409f82613d87565b91508190509392505050565b60006140b682613c90565b9150819050919050565b60006140cb82613e36565b91506140d78284613b6a565b915081905092915050565b60006140ed82613e7c565b9150819050919050565b600060208201905061410c6000830184613ada565b92915050565b60006080820190506141276000830187613ada565b6141346020830186613ada565b614141604083018561404f565b81810360608301526141538184613af8565b905095945050505050565b60006020820190506141736000830184613ae9565b92915050565b600060208201905081810360008301526141938184613b31565b905092915050565b600060208201905081810360008301526141b481613b9b565b9050919050565b600060208201905081810360008301526141d481613bbe565b9050919050565b600060208201905081810360008301526141f481613be1565b9050919050565b6000602082019050818103600083015261421481613c04565b9050919050565b6000602082019050818103600083015261423481613c27565b9050919050565b6000602082019050818103600083015261425481613c4a565b9050919050565b6000602082019050818103600083015261427481613c6d565b9050919050565b6000602082019050818103600083015261429481613cb5565b9050919050565b600060208201905081810360008301526142b481613cd8565b9050919050565b600060208201905081810360008301526142d481613cfb565b9050919050565b600060208201905081810360008301526142f481613d1e565b9050919050565b6000602082019050818103600083015261431481613d41565b9050919050565b6000602082019050818103600083015261433481613d64565b9050919050565b6000602082019050818103600083015261435481613daa565b9050919050565b6000602082019050818103600083015261437481613dcd565b9050919050565b6000602082019050818103600083015261439481613df0565b9050919050565b600060208201905081810360008301526143b481613e13565b9050919050565b600060208201905081810360008301526143d481613e59565b9050919050565b600060208201905081810360008301526143f481613e9f565b9050919050565b6000602082019050818103600083015261441481613ec2565b9050919050565b6000602082019050818103600083015261443481613ee5565b9050919050565b6000602082019050818103600083015261445481613f08565b9050919050565b6000602082019050818103600083015261447481613f2b565b9050919050565b6000602082019050818103600083015261449481613f4e565b9050919050565b600060208201905081810360008301526144b481613f71565b9050919050565b600060208201905081810360008301526144d481613f94565b9050919050565b600060208201905081810360008301526144f481613fb7565b9050919050565b6000602082019050818103600083015261451481613fda565b9050919050565b6000602082019050818103600083015261453481613ffd565b9050919050565b60006040820190506145506000830184614020565b92915050565b600060208201905061456b600083018461404f565b92915050565b6000602082019050614586600083018461406d565b92915050565b60006145966145a7565b90506145a2828261493f565b919050565b6000604051905090565b600067ffffffffffffffff8211156145cc576145cb614aa6565b5b6145d582614af3565b9050602081019050919050565b600067ffffffffffffffff8211156145fd576145fc614aa6565b5b61460682614af3565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061466c8261483a565b91506146778361483a565b9250826fffffffffffffffffffffffffffffffff0382111561469c5761469b6149ea565b5b828201905092915050565b60006146b282614876565b91506146bd83614876565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146f2576146f16149ea565b5b828201905092915050565b600061470882614876565b915061471383614876565b92508261472357614722614a19565b5b828204905092915050565b600061473982614876565b915061474483614876565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561477d5761477c6149ea565b5b828202905092915050565b60006147938261483a565b915061479e8361483a565b9250828210156147b1576147b06149ea565b5b828203905092915050565b60006147c782614876565b91506147d283614876565b9250828210156147e5576147e46149ea565b5b828203905092915050565b60006147fb82614856565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156148ce5780820151818401526020810190506148b3565b838111156148dd576000848401525b50505050565b60006148ee82614876565b91506000821415614902576149016149ea565b5b600182039050919050565b6000600282049050600182168061492557607f821691505b6020821081141561493957614938614a48565b5b50919050565b61494882614af3565b810181811067ffffffffffffffff8211171561496757614966614aa6565b5b80604052505050565b600061497b82614876565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149ae576149ad6149ea565b5b600182019050919050565b60006149c482614876565b91506149cf83614876565b9250826149df576149de614a19565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f7b226e616d65223a20224b616e6a69204f646f6b6f222c20226465736372697060008201527f74696f6e223a20224b616e6a694f646f6b6f2069732061206c6966656c6f6e6760208201527f20636f6c6c656374696f6e207265766f6c76696e672061726f756e6420616e6960408201527f6d6520696e73706972656420636861726163746572732c206561636820696e6460608201527f6976696475616c6c792064657369676e656420616e64206d61646520666f722060808201527f667574757265207574696c6974792e2054686520666972737420636f6c6c656360a08201527f74696f6e2077696c6c20636f6e73697374206f66207468652047656e6573697360c08201527f204d696e742050617373207468617420697320746865206b657920746f20616c60e08201527f6c206675747572652061697264726f70732e204f757220636f7265207465616d6101008201527f20697320736974756174656420696e20546f6b796f2070726f637572696e67206101208201527f66757475726520636f6c6c61626f726174696f6e7320666f7220616c6c2070616101408201527f737320686f6c646572732e2057652063757272656e746c792068617665206d616101608201527f6a6f72697479206f66203230323220616c6c20706c616e6e6564206f757420616101808201527f6e642077696c6c20736f6f6e20626520776f726b696e672070617374207468696101a08201527f732e222c202273656c6c65725f6665655f62617369735f706f696e7473223a206101c08201527f3530302c20226665655f726563697069656e74223a20223078443530463834456101e08201527f34384636656563433437353665423633336545384633336337363630386161366102008201527f39227d000000000000000000000000000000000000000000000000000000000061022082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61556c816147f0565b811461557757600080fd5b50565b61558381614802565b811461558e57600080fd5b50565b61559a8161480e565b81146155a557600080fd5b50565b6155b181614876565b81146155bc57600080fd5b50565b6155c881614894565b81146155d357600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220bff19bcaa896a4ee82e588bc36d05d87a3957a393e4c3aedf3e3f57552cca8f464736f6c63430008070033

Deployed Bytecode Sourcemap

19921:4361:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23060:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11238:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23395:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12810:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14011:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13627:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23236:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10208:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21926:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20409:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14694:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23161:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20097:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10489:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21804:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22780:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14841:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23317:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10307:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22119:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12687:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11613:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2697:103;;;;;;;;;;;;;:::i;:::-;;20175:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2474:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22444:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12909:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22882:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20887:556;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14220:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22595:181;;;;;;;;;;;;;:::i;:::-;;22958:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15003:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21450:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20019:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18133:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22333:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23480:799;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14501:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2809:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20470:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23060:95;2619:12;:10;:12::i;:::-;2608:23;;:7;:5;:7::i;:::-;:23;;;2600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23148:1:::1;23130:15;:19;;;;23060:95:::0;:::o;11238:370::-;11365:4;11410:25;11395:40;;;:11;:40;;;;:99;;;;11461:33;11446:48;;;:11;:48;;;;11395:99;:160;;;;11520:35;11505:50;;;:11;:50;;;;11395:160;:207;;;;11566:36;11590:11;11566:23;:36::i;:::-;11395:207;11381:221;;11238:370;;;:::o;23395:81::-;2619:12;:10;:12::i;:::-;2608:23;;:7;:5;:7::i;:::-;:23;;;2600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23455:15:::1;23465:1;23468;23455:9;:15::i;:::-;23395:81:::0;;:::o;12810:94::-;12864:13;12893:5;12886:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12810:94;:::o;14011:204::-;14079:7;14103:16;14111:7;14103;:16::i;:::-;14095:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14185:15;:24;14201:7;14185:24;;;;;;;;;;;;;;;;;;;;;14178:31;;14011:204;;;:::o;13627:379::-;13696:13;13712:24;13728:7;13712:15;:24::i;:::-;13696:40;;13757:5;13751:11;;:2;:11;;;;13743:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;13842:5;13826:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;13851:37;13868:5;13875:12;:10;:12::i;:::-;13851:16;:37::i;:::-;13826:62;13810:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;13972:28;13981:2;13985:7;13994:5;13972:8;:28::i;:::-;13689:317;13627:379;;:::o;23236:77::-;2619:12;:10;:12::i;:::-;2608:23;;:7;:5;:7::i;:::-;:23;;;2600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23306:1:::1;23295:8;:12;;;;23236:77:::0;:::o;10208:94::-;10261:7;10284:12;;10277:19;;10208:94;:::o;21926:187::-;2619:12;:10;:12::i;:::-;2608:23;;:7;:5;:7::i;:::-;:23;;;2600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22030:6:::1;22026:81;22041:6;;:13;;22039:1;:15;22026:81;;;22103:4;22069:20;:31;22090:6;;22097:1;22090:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22069:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;22055:3;;;;;:::i;:::-;;;;22026:81;;;;21926:187:::0;;:::o;20409:23::-;;;;;;;;;;;;;:::o;14694:142::-;14802:28;14812:4;14818:2;14822:7;14802:9;:28::i;:::-;14694:142;;;:::o;23161:71::-;2619:12;:10;:12::i;:::-;2608:23;;:7;:5;:7::i;:::-;:23;;;2600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23225:1:::1;23216:6;;:10;;;;;;;;;;;;;;;;;;23161:71:::0;:::o;20097:34::-;;;;:::o;10489:744::-;10598:7;10633:16;10643:5;10633:9;:16::i;:::-;10625:5;:24;10617:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10695:22;10720:13;:11;:13::i;:::-;10695:38;;10740:19;10770:25;10820:9;10815:350;10839:14;10835:1;:18;10815:350;;;10869:31;10903:11;:14;10915:1;10903:14;;;;;;;;;;;10869:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10956:1;10930:28;;:9;:14;;;:28;;;10926:89;;10991:9;:14;;;10971:34;;10926:89;11048:5;11027:26;;:17;:26;;;11023:135;;;11085:5;11070:11;:20;11066:59;;;11112:1;11105:8;;;;;;;;;11066:59;11135:13;;;;;:::i;:::-;;;;11023:135;10860:305;10855:3;;;;;:::i;:::-;;;;10815:350;;;;11171:56;;;;;;;;;;:::i;:::-;;;;;;;;10489:744;;;;;:::o;21804:112::-;21863:4;21883:20;:27;21904:5;21883:27;;;;;;;;;;;;;;;;;;;;;;;;;21876:34;;21804:112;;;:::o;22780:98::-;2619:12;:10;:12::i;:::-;2608:23;;:7;:5;:7::i;:::-;:23;;;2600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22863:9:::1;22855:5;:17;;;;22780:98:::0;:::o;14841:157::-;14953:39;14970:4;14976:2;14980:7;14953:39;;;;;;;;;;;;:16;:39::i;:::-;14841:157;;;:::o;23317:74::-;23357:4;23379:6;;;;;;;;;;;23372:13;;;;23317:74;:::o;10307:177::-;10374:7;10406:13;:11;:13::i;:::-;10398:5;:21;10390:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;10473:5;10466:12;;10307:177;;;:::o;22119:98::-;2619:12;:10;:12::i;:::-;2608:23;;:7;:5;:7::i;:::-;:23;;;2600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22204:7:::1;22188:13;:23;;;;;;;;;;;;:::i;:::-;;22119:98:::0;:::o;12687:118::-;12751:7;12774:20;12786:7;12774:11;:20::i;:::-;:25;;;12767:32;;12687:118;;;:::o;11613:211::-;11677:7;11718:1;11701:19;;:5;:19;;;;11693:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;11790:12;:19;11803:5;11790:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;11782:36;;11775:43;;11613:211;;;:::o;2697:103::-;2619:12;:10;:12::i;:::-;2608:23;;:7;:5;:7::i;:::-;:23;;;2600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2762:30:::1;2789:1;2762:18;:30::i;:::-;2697:103::o:0;20175:34::-;;;;:::o;2474:87::-;2520:7;2547:6;;;;;;;;;;;2540:13;;2474:87;:::o;22444:147::-;22525:21;;:::i;:::-;22565:20;22577:7;22565:11;:20::i;:::-;22558:27;;22444:147;;;:::o;12909:98::-;12965:13;12994:7;12987:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12909:98;:::o;22882:72::-;22919:7;22943:5;;22936:12;;22882:72;:::o;20887:556::-;20821:10;20808:23;;:9;:23;;;20800:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;20974:1:::1;20964:6;;;;;;;;;;;:11;;;:47;;;;;20979:20;:32;21000:10;20979:32;;;;;;;;;;;;;;;;;;;;;;;;;20964:47;:62;;;;21025:1;21015:6;;;;;;;;;;;:11;;;20964:62;20956:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;21110:8;;21093:14;:25;;;;:::i;:::-;21081:8;21065:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:53;;21057:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;21198:15;;21186:8;21159:24;21172:10;21159:12;:24::i;:::-;:35;;;;:::i;:::-;:54;;21148:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;21281:17;;21269:8;:29;;21259:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21360:8;21352:5;;:16;;;;:::i;:::-;21339:9;:29;;21331:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21402:31;21412:10;21424:8;21402:9;:31::i;:::-;20887:556:::0;:::o;14220:274::-;14323:12;:10;:12::i;:::-;14311:24;;:8;:24;;;;14303:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14420:8;14375:18;:32;14394:12;:10;:12::i;:::-;14375:32;;;;;;;;;;;;;;;:42;14408:8;14375:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;14469:8;14440:48;;14455:12;:10;:12::i;:::-;14440:48;;;14479:8;14440:48;;;;;;:::i;:::-;;;;;;;;14220:274;;:::o;22595:181::-;2619:12;:10;:12::i;:::-;2608:23;;:7;:5;:7::i;:::-;:23;;;2600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;256:1:::1;402:7;;:19;;394:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;256:1;463:7;:18;;;;22660:12:::2;22678:10;:15;;22701:21;22678:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22659:68;;;22742:7;22734:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;22652:124;212:1:::1;506:7;:22;;;;22595:181::o:0;22958:98::-;2619:12;:10;:12::i;:::-;2608:23;;:7;:5;:7::i;:::-;:23;;;2600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23049:1:::1;23029:17;:21;;;;22958:98:::0;:::o;15003:311::-;15140:28;15150:4;15156:2;15160:7;15140:9;:28::i;:::-;15191:48;15214:4;15220:2;15224:7;15233:5;15191:22;:48::i;:::-;15175:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;15003:311;;;;:::o;21450:348::-;21523:13;21559:16;21567:7;21559;:16::i;:::-;21551:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;21639:21;21663:10;:8;:10::i;:::-;21639:34;;21717:1;21699:7;21693:21;:25;:99;;;;;;;;;;;;;;;;;21745:7;21754:22;21763:1;21755:7;:9;;;;:::i;:::-;21754:20;:22::i;:::-;21728:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21693:99;21686:106;;;21450:348;;;:::o;20019:36::-;;;;:::o;18133:43::-;;;;:::o;22333:107::-;22391:7;22414:20;22428:5;22414:13;:20::i;:::-;22407:27;;22333:107;;;:::o;23480:799::-;23524:13;23550:18;23571:597;23598:567;;;;;;;:::i;:::-;;;;;;;;;;;;;23571:13;:597::i;:::-;23550:618;;24243:4;24193:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;24179:70;;24267:4;24260:11;;;23480:799;:::o;14501:186::-;14623:4;14646:18;:25;14665:5;14646:25;;;;;;;;;;;;;;;:35;14672:8;14646:35;;;;;;;;;;;;;;;;;;;;;;;;;14639:42;;14501:186;;;;:::o;2809:201::-;2619:12;:10;:12::i;:::-;2608:23;;:7;:5;:7::i;:::-;:23;;;2600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2918:1:::1;2898:22;;:8;:22;;;;2890:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2974:28;2993:8;2974:18;:28::i;:::-;2809:201:::0;:::o;20470:27::-;;;;:::o;2017:98::-;2070:7;2097:10;2090:17;;2017:98;:::o;7127:157::-;7212:4;7251:25;7236:40;;;:11;:40;;;;7229:47;;7127:157;;;:::o;15430:98::-;15495:27;15505:2;15509:8;15495:27;;;;;;;;;;;;:9;:27::i;:::-;15430:98;;:::o;15319:105::-;15376:4;15406:12;;15396:7;:22;15389:29;;15319:105;;;:::o;17955:172::-;18079:2;18052:15;:24;18068:7;18052:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;18113:7;18109:2;18093:28;;18102:5;18093:28;;;;;;;;;;;;17955:172;;;:::o;16690:1260::-;16787:35;16825:20;16837:7;16825:11;:20::i;:::-;16787:58;;16854:22;16896:13;:18;;;16880:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;16949:12;:10;:12::i;:::-;16925:36;;:20;16937:7;16925:11;:20::i;:::-;:36;;;16880:81;:142;;;;16972:50;16989:13;:18;;;17009:12;:10;:12::i;:::-;16972:16;:50::i;:::-;16880:142;16854:169;;17048:17;17032:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;17180:4;17158:26;;:13;:18;;;:26;;;17142:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;17269:1;17255:16;;:2;:16;;;;17247:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;17322:43;17344:4;17350:2;17354:7;17363:1;17322:21;:43::i;:::-;17373:49;17390:1;17394:7;17403:13;:18;;;17373:8;:49::i;:::-;17461:1;17431:12;:18;17444:4;17431:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17497:1;17469:12;:16;17482:2;17469:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17528:43;;;;;;;;17543:2;17528:43;;;;;;17554:15;17528:43;;;;;17505:11;:20;17517:7;17505:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17579:19;17611:1;17601:7;:11;;;;:::i;:::-;17579:33;;17664:1;17623:43;;:11;:24;17635:11;17623:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;17619:236;;;17681:20;17689:11;17681:7;:20::i;:::-;17677:171;;;17741:97;;;;;;;;17768:13;:18;;;17741:97;;;;;;17799:13;:28;;;17741:97;;;;;17714:11;:24;17726:11;17714:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17677:171;17619:236;17887:7;17883:2;17868:27;;17877:4;17868:27;;;;;;;;;;;;17902:42;17923:4;17929:2;17933:7;17942:1;17902:20;:42::i;:::-;16780:1170;;;16690:1260;;;:::o;12076:606::-;12152:21;;:::i;:::-;12193:16;12201:7;12193;:16::i;:::-;12185:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12265:26;12313:12;12302:7;:23;12298:93;;12382:1;12367:12;12357:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;12336:47;;12298:93;12404:12;12419:7;12404:22;;12399:212;12436:18;12428:4;:26;12399:212;;12473:31;12507:11;:17;12519:4;12507:17;;;;;;;;;;;12473:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12563:1;12537:28;;:9;:14;;;:28;;;12533:71;;12585:9;12578:16;;;;;;;12533:71;12464:147;12456:6;;;;;:::i;:::-;;;;12399:212;;;;12619:57;;;;;;;;;;:::i;:::-;;;;;;;;12076:606;;;;:::o;3019:191::-;3093:16;3112:6;;;;;;;;;;;3093:25;;3138:8;3129:6;;:17;;;;;;;;;;;;;;;;;;3193:8;3162:40;;3183:8;3162:40;;;;;;;;;;;;3082:128;3019:191;:::o;18933:690::-;19070:4;19087:15;:2;:13;;;:15::i;:::-;19083:535;;;19142:2;19126:36;;;19163:12;:10;:12::i;:::-;19177:4;19183:7;19192:5;19126:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19113:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19374:1;19357:6;:13;:18;19353:215;;;19390:61;;;;;;;;;;:::i;:::-;;;;;;;;19353:215;19536:6;19530:13;19521:6;19517:2;19513:15;19506:38;19113:464;19258:45;;;19248:55;;;:6;:55;;;;19241:62;;;;;19083:535;19606:4;19599:11;;18933:690;;;;;;;:::o;22221:108::-;22281:13;22310;22303:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22221:108;:::o;634:533::-;690:13;730:1;721:5;:10;717:53;;;748:10;;;;;;;;;;;;;;;;;;;;;717:53;780:12;795:5;780:20;;811:14;836:78;851:1;843:4;:9;836:78;;869:8;;;;;:::i;:::-;;;;900:2;892:10;;;;;:::i;:::-;;;836:78;;;924:19;956:6;946:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;924:39;;974:154;990:1;981:5;:10;974:154;;1018:1;1008:11;;;;;:::i;:::-;;;1085:2;1077:5;:10;;;;:::i;:::-;1064:2;:24;;;;:::i;:::-;1051:39;;1034:6;1041;1034:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1114:2;1105:11;;;;;:::i;:::-;;;974:154;;;1152:6;1138:21;;;;;634:533;;;;:::o;11830:240::-;11891:7;11940:1;11923:19;;:5;:19;;;;11907:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;12031:12;:19;12044:5;12031:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;12023:41;;12016:48;;11830:240;;;:::o;24480:1607::-;24538:13;24564:11;24578:4;:11;24564:25;;24611:1;24604:3;:8;24600:23;;;24614:9;;;;;;;;;;;;;;;;;24600:23;24675:18;24713:1;24708;24702:3;:7;;;;:::i;:::-;24701:13;;;;:::i;:::-;24696:1;:19;;;;:::i;:::-;24675:40;;24773:19;24818:2;24805:10;:15;;;;:::i;:::-;24795:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24773:48;;24834:18;24855:5;;;;;;;;;;;;;;;;;24834:26;;24924:1;24917:5;24913:13;24969:2;24961:6;24957:15;25020:1;24988:777;25043:3;25040:1;25037:10;24988:777;;;25098:1;25095;25091:9;25086:14;;25156:8;25151:1;25145:4;25141:12;25135:19;25131:34;25236:4;25228:5;25224:2;25220:14;25216:25;25206:8;25202:40;25196:47;25275:3;25272:1;25268:11;25261:18;;25366:4;25357;25349:5;25345:2;25341:14;25337:25;25327:8;25323:40;25317:47;25313:58;25308:3;25304:68;25297:75;;25404:3;25401:1;25397:11;25390:18;;25494:4;25485;25477:5;25474:1;25470:13;25466:24;25456:8;25452:39;25446:46;25442:57;25437:3;25433:67;25426:74;;25532:3;25529:1;25525:11;25518:18;;25614:4;25605;25598:5;25594:16;25584:8;25580:31;25574:38;25570:49;25565:3;25561:59;25554:66;;25654:3;25649;25645:13;25638:20;;25696:3;25685:9;25678:22;25748:1;25737:9;25733:17;25720:30;;25067:698;;24988:777;;;24992:44;25797:1;25792:3;25788:11;25818:1;25813:84;;;;25916:1;25911:82;;;;25781:212;;25813:84;25874:6;25869:3;25865:16;25861:1;25850:9;25846:17;25839:43;25813:84;;25911:82;25972:4;25967:3;25963:14;25959:1;25948:9;25944:17;25937:41;25781:212;;26024:10;26016:6;26009:26;24882:1164;;26072:6;26058:21;;;;;;24480:1607;;;;:::o;15533:1152::-;15638:20;15661:12;;15638:35;;15702:1;15688:16;;:2;:16;;;;15680:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15759:21;15767:12;15759:7;:21::i;:::-;15758:22;15750:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15841:12;15829:8;:24;;15821:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15901:61;15931:1;15935:2;15939:12;15953:8;15901:21;:61::i;:::-;15971:30;16004:12;:16;16017:2;16004:16;;;;;;;;;;;;;;;15971:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16046:119;;;;;;;;16096:8;16066:11;:19;;;:39;;;;:::i;:::-;16046:119;;;;;;16149:8;16114:11;:24;;;:44;;;;:::i;:::-;16046:119;;;;;16027:12;:16;16040:2;16027:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16200:43;;;;;;;;16215:2;16200:43;;;;;;16226:15;16200:43;;;;;16172:11;:25;16184:12;16172:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16252:20;16275:12;16252:35;;16301:9;16296:281;16320:8;16316:1;:12;16296:281;;;16374:12;16370:2;16349:38;;16366:1;16349:38;;;;;;;;;;;;16414:59;16445:1;16449:2;16453:12;16467:5;16414:22;:59::i;:::-;16396:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;16555:14;;;;;:::i;:::-;;;;16330:3;;;;;:::i;:::-;;;;16296:281;;;;16600:12;16585;:27;;;;16619:60;16648:1;16652:2;16656:12;16670:8;16619:20;:60::i;:::-;15631:1054;;;15533:1152;;;:::o;19628:141::-;;;;;:::o;19774:140::-;;;;;:::o;3242:197::-;3302:4;3320:12;3387:7;3375:20;3367:28;;3430:1;3423:4;:8;3416:15;;;3242: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:135::-;2912:5;2950:6;2937:20;2928:29;;2966:31;2991:5;2966:31;:::i;:::-;2868:135;;;;:::o;3009:329::-;3068:6;3117:2;3105:9;3096:7;3092:23;3088:32;3085:119;;;3123:79;;:::i;:::-;3085:119;3243:1;3268:53;3313:7;3304:6;3293:9;3289:22;3268:53;:::i;:::-;3258:63;;3214:117;3009:329;;;;:::o;3344:474::-;3412:6;3420;3469:2;3457:9;3448:7;3444:23;3440:32;3437:119;;;3475:79;;:::i;:::-;3437:119;3595:1;3620:53;3665:7;3656:6;3645:9;3641:22;3620:53;:::i;:::-;3610:63;;3566:117;3722:2;3748:53;3793:7;3784:6;3773:9;3769:22;3748:53;:::i;:::-;3738:63;;3693:118;3344:474;;;;;:::o;3824:619::-;3901:6;3909;3917;3966:2;3954:9;3945:7;3941:23;3937:32;3934:119;;;3972:79;;:::i;:::-;3934:119;4092:1;4117:53;4162:7;4153:6;4142:9;4138:22;4117:53;:::i;:::-;4107:63;;4063:117;4219:2;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4190:118;4347:2;4373:53;4418:7;4409:6;4398:9;4394:22;4373:53;:::i;:::-;4363:63;;4318:118;3824:619;;;;;:::o;4449:943::-;4544:6;4552;4560;4568;4617:3;4605:9;4596:7;4592:23;4588:33;4585:120;;;4624:79;;:::i;:::-;4585:120;4744:1;4769:53;4814:7;4805:6;4794:9;4790:22;4769:53;:::i;:::-;4759:63;;4715:117;4871:2;4897:53;4942:7;4933:6;4922:9;4918:22;4897:53;:::i;:::-;4887:63;;4842:118;4999:2;5025:53;5070:7;5061:6;5050:9;5046:22;5025:53;:::i;:::-;5015:63;;4970:118;5155:2;5144:9;5140:18;5127:32;5186:18;5178:6;5175:30;5172:117;;;5208:79;;:::i;:::-;5172:117;5313:62;5367:7;5358:6;5347:9;5343:22;5313:62;:::i;:::-;5303:72;;5098:287;4449:943;;;;;;;:::o;5398:468::-;5463:6;5471;5520:2;5508:9;5499:7;5495:23;5491:32;5488:119;;;5526:79;;:::i;:::-;5488:119;5646:1;5671:53;5716:7;5707:6;5696:9;5692:22;5671:53;:::i;:::-;5661:63;;5617:117;5773:2;5799:50;5841:7;5832:6;5821:9;5817:22;5799:50;:::i;:::-;5789:60;;5744:115;5398:468;;;;;:::o;5872:474::-;5940:6;5948;5997:2;5985:9;5976:7;5972:23;5968:32;5965:119;;;6003:79;;:::i;:::-;5965:119;6123:1;6148:53;6193:7;6184:6;6173:9;6169:22;6148:53;:::i;:::-;6138:63;;6094:117;6250:2;6276:53;6321:7;6312:6;6301:9;6297:22;6276:53;:::i;:::-;6266:63;;6221:118;5872:474;;;;;:::o;6352:559::-;6438:6;6446;6495:2;6483:9;6474:7;6470:23;6466:32;6463:119;;;6501:79;;:::i;:::-;6463:119;6649:1;6638:9;6634:17;6621:31;6679:18;6671:6;6668:30;6665:117;;;6701:79;;:::i;:::-;6665:117;6814:80;6886:7;6877:6;6866:9;6862:22;6814:80;:::i;:::-;6796:98;;;;6592:312;6352:559;;;;;:::o;6917:327::-;6975:6;7024:2;7012:9;7003:7;6999:23;6995:32;6992:119;;;7030:79;;:::i;:::-;6992:119;7150:1;7175:52;7219:7;7210:6;7199:9;7195:22;7175:52;:::i;:::-;7165:62;;7121:116;6917:327;;;;:::o;7250:349::-;7319:6;7368:2;7356:9;7347:7;7343:23;7339:32;7336:119;;;7374:79;;:::i;:::-;7336:119;7494:1;7519:63;7574:7;7565:6;7554:9;7550:22;7519:63;:::i;:::-;7509:73;;7465:127;7250:349;;;;:::o;7605:509::-;7674:6;7723:2;7711:9;7702:7;7698:23;7694:32;7691:119;;;7729:79;;:::i;:::-;7691:119;7877:1;7866:9;7862:17;7849:31;7907:18;7899:6;7896:30;7893:117;;;7929:79;;:::i;:::-;7893:117;8034:63;8089:7;8080:6;8069:9;8065:22;8034:63;:::i;:::-;8024:73;;7820:287;7605:509;;;;:::o;8120:329::-;8179:6;8228:2;8216:9;8207:7;8203:23;8199:32;8196:119;;;8234:79;;:::i;:::-;8196:119;8354:1;8379:53;8424:7;8415:6;8404:9;8400:22;8379:53;:::i;:::-;8369:63;;8325:117;8120:329;;;;:::o;8455:325::-;8512:6;8561:2;8549:9;8540:7;8536:23;8532:32;8529:119;;;8567:79;;:::i;:::-;8529:119;8687:1;8712:51;8755:7;8746:6;8735:9;8731:22;8712:51;:::i;:::-;8702:61;;8658:115;8455:325;;;;:::o;8786:108::-;8863:24;8881:5;8863:24;:::i;:::-;8858:3;8851:37;8786:108;;:::o;8900:118::-;8987:24;9005:5;8987:24;:::i;:::-;8982:3;8975:37;8900:118;;:::o;9024:109::-;9105:21;9120:5;9105:21;:::i;:::-;9100:3;9093:34;9024:109;;:::o;9139:360::-;9225:3;9253:38;9285:5;9253:38;:::i;:::-;9307:70;9370:6;9365:3;9307:70;:::i;:::-;9300:77;;9386:52;9431:6;9426:3;9419:4;9412:5;9408:16;9386:52;:::i;:::-;9463:29;9485:6;9463:29;:::i;:::-;9458:3;9454:39;9447:46;;9229:270;9139:360;;;;:::o;9505:364::-;9593:3;9621:39;9654:5;9621:39;:::i;:::-;9676:71;9740:6;9735:3;9676:71;:::i;:::-;9669:78;;9756:52;9801:6;9796:3;9789:4;9782:5;9778:16;9756:52;:::i;:::-;9833:29;9855:6;9833:29;:::i;:::-;9828:3;9824:39;9817:46;;9597:272;9505:364;;;;:::o;9875:377::-;9981:3;10009:39;10042:5;10009:39;:::i;:::-;10064:89;10146:6;10141:3;10064:89;:::i;:::-;10057:96;;10162:52;10207:6;10202:3;10195:4;10188:5;10184:16;10162:52;:::i;:::-;10239:6;10234:3;10230:16;10223:23;;9985:267;9875:377;;;;:::o;10258:366::-;10400:3;10421:67;10485:2;10480:3;10421:67;:::i;:::-;10414:74;;10497:93;10586:3;10497:93;:::i;:::-;10615:2;10610:3;10606:12;10599:19;;10258:366;;;:::o;10630:::-;10772:3;10793:67;10857:2;10852:3;10793:67;:::i;:::-;10786:74;;10869:93;10958:3;10869:93;:::i;:::-;10987:2;10982:3;10978:12;10971:19;;10630:366;;;:::o;11002:::-;11144:3;11165:67;11229:2;11224:3;11165:67;:::i;:::-;11158:74;;11241:93;11330:3;11241:93;:::i;:::-;11359:2;11354:3;11350:12;11343:19;;11002:366;;;:::o;11374:::-;11516:3;11537:67;11601:2;11596:3;11537:67;:::i;:::-;11530:74;;11613:93;11702:3;11613:93;:::i;:::-;11731:2;11726:3;11722:12;11715:19;;11374:366;;;:::o;11746:::-;11888:3;11909:67;11973:2;11968:3;11909:67;:::i;:::-;11902:74;;11985:93;12074:3;11985:93;:::i;:::-;12103:2;12098:3;12094:12;12087:19;;11746:366;;;:::o;12118:::-;12260:3;12281:67;12345:2;12340:3;12281:67;:::i;:::-;12274:74;;12357:93;12446:3;12357:93;:::i;:::-;12475:2;12470:3;12466:12;12459:19;;12118:366;;;:::o;12490:::-;12632:3;12653:67;12717:2;12712:3;12653:67;:::i;:::-;12646:74;;12729:93;12818:3;12729:93;:::i;:::-;12847:2;12842:3;12838:12;12831:19;;12490:366;;;:::o;12862:404::-;13022:3;13043:86;13125:3;13120;13043:86;:::i;:::-;13036:93;;13138;13227:3;13138:93;:::i;:::-;13256:3;13251;13247:13;13240:20;;12862:404;;;:::o;13272:366::-;13414:3;13435:67;13499:2;13494:3;13435:67;:::i;:::-;13428:74;;13511:93;13600:3;13511:93;:::i;:::-;13629:2;13624:3;13620:12;13613:19;;13272:366;;;:::o;13644:::-;13786:3;13807:67;13871:2;13866:3;13807:67;:::i;:::-;13800:74;;13883:93;13972:3;13883:93;:::i;:::-;14001:2;13996:3;13992:12;13985:19;;13644:366;;;:::o;14016:::-;14158:3;14179:67;14243:2;14238:3;14179:67;:::i;:::-;14172:74;;14255:93;14344:3;14255:93;:::i;:::-;14373:2;14368:3;14364:12;14357:19;;14016:366;;;:::o;14388:::-;14530:3;14551:67;14615:2;14610:3;14551:67;:::i;:::-;14544:74;;14627:93;14716:3;14627:93;:::i;:::-;14745:2;14740:3;14736:12;14729:19;;14388:366;;;:::o;14760:::-;14902:3;14923:67;14987:2;14982:3;14923:67;:::i;:::-;14916:74;;14999:93;15088:3;14999:93;:::i;:::-;15117:2;15112:3;15108:12;15101:19;;14760:366;;;:::o;15132:::-;15274:3;15295:67;15359:2;15354:3;15295:67;:::i;:::-;15288:74;;15371:93;15460:3;15371:93;:::i;:::-;15489:2;15484:3;15480:12;15473:19;;15132:366;;;:::o;15504:400::-;15664:3;15685:84;15767:1;15762:3;15685:84;:::i;:::-;15678:91;;15778:93;15867:3;15778:93;:::i;:::-;15896:1;15891:3;15887:11;15880:18;;15504:400;;;:::o;15910:366::-;16052:3;16073:67;16137:2;16132:3;16073:67;:::i;:::-;16066:74;;16149:93;16238:3;16149:93;:::i;:::-;16267:2;16262:3;16258:12;16251:19;;15910:366;;;:::o;16282:::-;16424:3;16445:67;16509:2;16504:3;16445:67;:::i;:::-;16438:74;;16521:93;16610:3;16521:93;:::i;:::-;16639:2;16634:3;16630:12;16623:19;;16282:366;;;:::o;16654:::-;16796:3;16817:67;16881:2;16876:3;16817:67;:::i;:::-;16810:74;;16893:93;16982:3;16893:93;:::i;:::-;17011:2;17006:3;17002:12;16995:19;;16654:366;;;:::o;17026:::-;17168:3;17189:67;17253:2;17248:3;17189:67;:::i;:::-;17182:74;;17265:93;17354:3;17265:93;:::i;:::-;17383:2;17378:3;17374:12;17367:19;;17026:366;;;:::o;17398:402::-;17558:3;17579:85;17661:2;17656:3;17579:85;:::i;:::-;17572:92;;17673:93;17762:3;17673:93;:::i;:::-;17791:2;17786:3;17782:12;17775:19;;17398:402;;;:::o;17806:366::-;17948:3;17969:67;18033:2;18028:3;17969:67;:::i;:::-;17962:74;;18045:93;18134:3;18045:93;:::i;:::-;18163:2;18158:3;18154:12;18147:19;;17806:366;;;:::o;18178:398::-;18337:3;18358:83;18439:1;18434:3;18358:83;:::i;:::-;18351:90;;18450:93;18539:3;18450:93;:::i;:::-;18568:1;18563:3;18559:11;18552:18;;18178:398;;;:::o;18582:366::-;18724:3;18745:67;18809:2;18804:3;18745:67;:::i;:::-;18738:74;;18821:93;18910:3;18821:93;:::i;:::-;18939:2;18934:3;18930:12;18923:19;;18582:366;;;:::o;18954:::-;19096:3;19117:67;19181:2;19176:3;19117:67;:::i;:::-;19110:74;;19193:93;19282:3;19193:93;:::i;:::-;19311:2;19306:3;19302:12;19295:19;;18954:366;;;:::o;19326:::-;19468:3;19489:67;19553:2;19548:3;19489:67;:::i;:::-;19482:74;;19565:93;19654:3;19565:93;:::i;:::-;19683:2;19678:3;19674:12;19667:19;;19326:366;;;:::o;19698:::-;19840:3;19861:67;19925:2;19920:3;19861:67;:::i;:::-;19854:74;;19937:93;20026:3;19937:93;:::i;:::-;20055:2;20050:3;20046:12;20039:19;;19698:366;;;:::o;20070:::-;20212:3;20233:67;20297:2;20292:3;20233:67;:::i;:::-;20226:74;;20309:93;20398:3;20309:93;:::i;:::-;20427:2;20422:3;20418:12;20411:19;;20070:366;;;:::o;20442:::-;20584:3;20605:67;20669:2;20664:3;20605:67;:::i;:::-;20598:74;;20681:93;20770:3;20681:93;:::i;:::-;20799:2;20794:3;20790:12;20783:19;;20442:366;;;:::o;20814:::-;20956:3;20977:67;21041:2;21036:3;20977:67;:::i;:::-;20970:74;;21053:93;21142:3;21053:93;:::i;:::-;21171:2;21166:3;21162:12;21155:19;;20814:366;;;:::o;21186:::-;21328:3;21349:67;21413:2;21408:3;21349:67;:::i;:::-;21342:74;;21425:93;21514:3;21425:93;:::i;:::-;21543:2;21538:3;21534:12;21527:19;;21186:366;;;:::o;21558:::-;21700:3;21721:67;21785:2;21780:3;21721:67;:::i;:::-;21714:74;;21797:93;21886:3;21797:93;:::i;:::-;21915:2;21910:3;21906:12;21899:19;;21558:366;;;:::o;21930:::-;22072:3;22093:67;22157:2;22152:3;22093:67;:::i;:::-;22086:74;;22169:93;22258:3;22169:93;:::i;:::-;22287:2;22282:3;22278:12;22271:19;;21930:366;;;:::o;22302:::-;22444:3;22465:67;22529:2;22524:3;22465:67;:::i;:::-;22458:74;;22541:93;22630:3;22541:93;:::i;:::-;22659:2;22654:3;22650:12;22643:19;;22302:366;;;:::o;22744:527::-;22903:4;22898:3;22894:14;22990:4;22983:5;22979:16;22973:23;23009:63;23066:4;23061:3;23057:14;23043:12;23009:63;:::i;:::-;22918:164;23174:4;23167:5;23163:16;23157:23;23193:61;23248:4;23243:3;23239:14;23225:12;23193:61;:::i;:::-;23092:172;22872:399;22744:527;;:::o;23277:118::-;23364:24;23382:5;23364:24;:::i;:::-;23359:3;23352:37;23277:118;;:::o;23401:105::-;23476:23;23493:5;23476:23;:::i;:::-;23471:3;23464:36;23401:105;;:::o;23512:112::-;23595:22;23611:5;23595:22;:::i;:::-;23590:3;23583:35;23512:112;;:::o;23630:701::-;23911:3;23933:95;24024:3;24015:6;23933:95;:::i;:::-;23926:102;;24045:95;24136:3;24127:6;24045:95;:::i;:::-;24038:102;;24157:148;24301:3;24157:148;:::i;:::-;24150:155;;24322:3;24315:10;;23630:701;;;;;:::o;24337:381::-;24522:3;24544:148;24688:3;24544:148;:::i;:::-;24537:155;;24709:3;24702:10;;24337:381;;;:::o;24724:541::-;24957:3;24979:148;25123:3;24979:148;:::i;:::-;24972:155;;25144:95;25235:3;25226:6;25144:95;:::i;:::-;25137:102;;25256:3;25249:10;;24724:541;;;;:::o;25271:379::-;25455:3;25477:147;25620:3;25477:147;:::i;:::-;25470:154;;25641:3;25634:10;;25271:379;;;:::o;25656:222::-;25749:4;25787:2;25776:9;25772:18;25764:26;;25800:71;25868:1;25857:9;25853:17;25844:6;25800:71;:::i;:::-;25656:222;;;;:::o;25884:640::-;26079:4;26117:3;26106:9;26102:19;26094:27;;26131:71;26199:1;26188:9;26184:17;26175:6;26131:71;:::i;:::-;26212:72;26280:2;26269:9;26265:18;26256:6;26212:72;:::i;:::-;26294;26362:2;26351:9;26347:18;26338:6;26294:72;:::i;:::-;26413:9;26407:4;26403:20;26398:2;26387:9;26383:18;26376:48;26441:76;26512:4;26503:6;26441:76;:::i;:::-;26433:84;;25884:640;;;;;;;:::o;26530:210::-;26617:4;26655:2;26644:9;26640:18;26632:26;;26668:65;26730:1;26719:9;26715:17;26706:6;26668:65;:::i;:::-;26530:210;;;;:::o;26746:313::-;26859:4;26897:2;26886:9;26882:18;26874:26;;26946:9;26940:4;26936:20;26932:1;26921:9;26917:17;26910:47;26974:78;27047:4;27038:6;26974:78;:::i;:::-;26966:86;;26746:313;;;;:::o;27065:419::-;27231:4;27269:2;27258:9;27254:18;27246:26;;27318:9;27312:4;27308:20;27304:1;27293:9;27289:17;27282:47;27346:131;27472:4;27346:131;:::i;:::-;27338:139;;27065:419;;;:::o;27490:::-;27656:4;27694:2;27683:9;27679:18;27671:26;;27743:9;27737:4;27733:20;27729:1;27718:9;27714:17;27707:47;27771:131;27897:4;27771:131;:::i;:::-;27763:139;;27490:419;;;:::o;27915:::-;28081:4;28119:2;28108:9;28104:18;28096:26;;28168:9;28162:4;28158:20;28154:1;28143:9;28139:17;28132:47;28196:131;28322:4;28196:131;:::i;:::-;28188:139;;27915:419;;;:::o;28340:::-;28506:4;28544:2;28533:9;28529:18;28521:26;;28593:9;28587:4;28583:20;28579:1;28568:9;28564:17;28557:47;28621:131;28747:4;28621:131;:::i;:::-;28613:139;;28340:419;;;:::o;28765:::-;28931:4;28969:2;28958:9;28954:18;28946:26;;29018:9;29012:4;29008:20;29004:1;28993:9;28989:17;28982:47;29046:131;29172:4;29046:131;:::i;:::-;29038:139;;28765:419;;;:::o;29190:::-;29356:4;29394:2;29383:9;29379:18;29371:26;;29443:9;29437:4;29433:20;29429:1;29418:9;29414:17;29407:47;29471:131;29597:4;29471:131;:::i;:::-;29463:139;;29190:419;;;:::o;29615:::-;29781:4;29819:2;29808:9;29804:18;29796:26;;29868:9;29862:4;29858:20;29854:1;29843:9;29839:17;29832:47;29896:131;30022:4;29896:131;:::i;:::-;29888:139;;29615:419;;;:::o;30040:::-;30206:4;30244:2;30233:9;30229:18;30221:26;;30293:9;30287:4;30283:20;30279:1;30268:9;30264:17;30257:47;30321:131;30447:4;30321:131;:::i;:::-;30313:139;;30040:419;;;:::o;30465:::-;30631:4;30669:2;30658:9;30654:18;30646:26;;30718:9;30712:4;30708:20;30704:1;30693:9;30689:17;30682:47;30746:131;30872:4;30746:131;:::i;:::-;30738:139;;30465:419;;;:::o;30890:::-;31056:4;31094:2;31083:9;31079:18;31071:26;;31143:9;31137:4;31133:20;31129:1;31118:9;31114:17;31107:47;31171:131;31297:4;31171:131;:::i;:::-;31163:139;;30890:419;;;:::o;31315:::-;31481:4;31519:2;31508:9;31504:18;31496:26;;31568:9;31562:4;31558:20;31554:1;31543:9;31539:17;31532:47;31596:131;31722:4;31596:131;:::i;:::-;31588:139;;31315:419;;;:::o;31740:::-;31906:4;31944:2;31933:9;31929:18;31921:26;;31993:9;31987:4;31983:20;31979:1;31968:9;31964:17;31957:47;32021:131;32147:4;32021:131;:::i;:::-;32013:139;;31740:419;;;:::o;32165:::-;32331:4;32369:2;32358:9;32354:18;32346:26;;32418:9;32412:4;32408:20;32404:1;32393:9;32389:17;32382:47;32446:131;32572:4;32446:131;:::i;:::-;32438:139;;32165:419;;;:::o;32590:::-;32756:4;32794:2;32783:9;32779:18;32771:26;;32843:9;32837:4;32833:20;32829:1;32818:9;32814:17;32807:47;32871:131;32997:4;32871:131;:::i;:::-;32863:139;;32590:419;;;:::o;33015:::-;33181:4;33219:2;33208:9;33204:18;33196:26;;33268:9;33262:4;33258:20;33254:1;33243:9;33239:17;33232:47;33296:131;33422:4;33296:131;:::i;:::-;33288:139;;33015:419;;;:::o;33440:::-;33606:4;33644:2;33633:9;33629:18;33621:26;;33693:9;33687:4;33683:20;33679:1;33668:9;33664:17;33657:47;33721:131;33847:4;33721:131;:::i;:::-;33713:139;;33440:419;;;:::o;33865:::-;34031:4;34069:2;34058:9;34054:18;34046:26;;34118:9;34112:4;34108:20;34104:1;34093:9;34089:17;34082:47;34146:131;34272:4;34146:131;:::i;:::-;34138:139;;33865:419;;;:::o;34290:::-;34456:4;34494:2;34483:9;34479:18;34471:26;;34543:9;34537:4;34533:20;34529:1;34518:9;34514:17;34507:47;34571:131;34697:4;34571:131;:::i;:::-;34563:139;;34290:419;;;:::o;34715:::-;34881:4;34919:2;34908:9;34904:18;34896:26;;34968:9;34962:4;34958:20;34954:1;34943:9;34939:17;34932:47;34996:131;35122:4;34996:131;:::i;:::-;34988:139;;34715:419;;;:::o;35140:::-;35306:4;35344:2;35333:9;35329:18;35321:26;;35393:9;35387:4;35383:20;35379:1;35368:9;35364:17;35357:47;35421:131;35547:4;35421:131;:::i;:::-;35413:139;;35140:419;;;:::o;35565:::-;35731:4;35769:2;35758:9;35754:18;35746:26;;35818:9;35812:4;35808:20;35804:1;35793:9;35789:17;35782:47;35846:131;35972:4;35846:131;:::i;:::-;35838:139;;35565:419;;;:::o;35990:::-;36156:4;36194:2;36183:9;36179:18;36171:26;;36243:9;36237:4;36233:20;36229:1;36218:9;36214:17;36207:47;36271:131;36397:4;36271:131;:::i;:::-;36263:139;;35990:419;;;:::o;36415:::-;36581:4;36619:2;36608:9;36604:18;36596:26;;36668:9;36662:4;36658:20;36654:1;36643:9;36639:17;36632:47;36696:131;36822:4;36696:131;:::i;:::-;36688:139;;36415:419;;;:::o;36840:::-;37006:4;37044:2;37033:9;37029:18;37021:26;;37093:9;37087:4;37083:20;37079:1;37068:9;37064:17;37057:47;37121:131;37247:4;37121:131;:::i;:::-;37113:139;;36840:419;;;:::o;37265:::-;37431:4;37469:2;37458:9;37454:18;37446:26;;37518:9;37512:4;37508:20;37504:1;37493:9;37489:17;37482:47;37546:131;37672:4;37546:131;:::i;:::-;37538:139;;37265:419;;;:::o;37690:::-;37856:4;37894:2;37883:9;37879:18;37871:26;;37943:9;37937:4;37933:20;37929:1;37918:9;37914:17;37907:47;37971:131;38097:4;37971:131;:::i;:::-;37963:139;;37690:419;;;:::o;38115:::-;38281:4;38319:2;38308:9;38304:18;38296:26;;38368:9;38362:4;38358:20;38354:1;38343:9;38339:17;38332:47;38396:131;38522:4;38396:131;:::i;:::-;38388:139;;38115:419;;;:::o;38540:::-;38706:4;38744:2;38733:9;38729:18;38721:26;;38793:9;38787:4;38783:20;38779:1;38768:9;38764:17;38757:47;38821:131;38947:4;38821:131;:::i;:::-;38813:139;;38540:419;;;:::o;38965:::-;39131:4;39169:2;39158:9;39154:18;39146:26;;39218:9;39212:4;39208:20;39204:1;39193:9;39189:17;39182:47;39246:131;39372:4;39246:131;:::i;:::-;39238:139;;38965:419;;;:::o;39390:346::-;39545:4;39583:2;39572:9;39568:18;39560:26;;39596:133;39726:1;39715:9;39711:17;39702:6;39596:133;:::i;:::-;39390:346;;;;:::o;39742:222::-;39835:4;39873:2;39862:9;39858:18;39850:26;;39886:71;39954:1;39943:9;39939:17;39930:6;39886:71;:::i;:::-;39742:222;;;;:::o;39970:214::-;40059:4;40097:2;40086:9;40082:18;40074:26;;40110:67;40174:1;40163:9;40159:17;40150:6;40110:67;:::i;:::-;39970:214;;;;:::o;40190:129::-;40224:6;40251:20;;:::i;:::-;40241:30;;40280:33;40308:4;40300:6;40280:33;:::i;:::-;40190:129;;;:::o;40325:75::-;40358:6;40391:2;40385:9;40375:19;;40325:75;:::o;40406:307::-;40467:4;40557:18;40549:6;40546:30;40543:56;;;40579:18;;:::i;:::-;40543:56;40617:29;40639:6;40617:29;:::i;:::-;40609:37;;40701:4;40695;40691:15;40683:23;;40406:307;;;:::o;40719:308::-;40781:4;40871:18;40863:6;40860:30;40857:56;;;40893:18;;:::i;:::-;40857:56;40931:29;40953:6;40931:29;:::i;:::-;40923:37;;41015:4;41009;41005:15;40997:23;;40719:308;;;:::o;41033:98::-;41084:6;41118:5;41112:12;41102:22;;41033:98;;;:::o;41137:99::-;41189:6;41223:5;41217:12;41207:22;;41137:99;;;:::o;41242:168::-;41325:11;41359:6;41354:3;41347:19;41399:4;41394:3;41390:14;41375:29;;41242:168;;;;:::o;41416:147::-;41517:11;41554:3;41539:18;;41416:147;;;;:::o;41569:169::-;41653:11;41687:6;41682:3;41675:19;41727:4;41722:3;41718:14;41703:29;;41569:169;;;;:::o;41744:148::-;41846:11;41883:3;41868:18;;41744:148;;;;:::o;41898:273::-;41938:3;41957:20;41975:1;41957:20;:::i;:::-;41952:25;;41991:20;42009:1;41991:20;:::i;:::-;41986:25;;42113:1;42077:34;42073:42;42070:1;42067:49;42064:75;;;42119:18;;:::i;:::-;42064:75;42163:1;42160;42156:9;42149:16;;41898:273;;;;:::o;42177:305::-;42217:3;42236:20;42254:1;42236:20;:::i;:::-;42231:25;;42270:20;42288:1;42270:20;:::i;:::-;42265:25;;42424:1;42356:66;42352:74;42349:1;42346:81;42343:107;;;42430:18;;:::i;:::-;42343:107;42474:1;42471;42467:9;42460:16;;42177:305;;;;:::o;42488:185::-;42528:1;42545:20;42563:1;42545:20;:::i;:::-;42540:25;;42579:20;42597:1;42579:20;:::i;:::-;42574:25;;42618:1;42608:35;;42623:18;;:::i;:::-;42608:35;42665:1;42662;42658:9;42653:14;;42488:185;;;;:::o;42679:348::-;42719:7;42742:20;42760:1;42742:20;:::i;:::-;42737:25;;42776:20;42794:1;42776:20;:::i;:::-;42771:25;;42964:1;42896:66;42892:74;42889:1;42886:81;42881:1;42874:9;42867:17;42863:105;42860:131;;;42971:18;;:::i;:::-;42860:131;43019:1;43016;43012:9;43001:20;;42679:348;;;;:::o;43033:191::-;43073:4;43093:20;43111:1;43093:20;:::i;:::-;43088:25;;43127:20;43145:1;43127:20;:::i;:::-;43122:25;;43166:1;43163;43160:8;43157:34;;;43171:18;;:::i;:::-;43157:34;43216:1;43213;43209:9;43201:17;;43033:191;;;;:::o;43230:::-;43270:4;43290:20;43308:1;43290:20;:::i;:::-;43285:25;;43324:20;43342:1;43324:20;:::i;:::-;43319:25;;43363:1;43360;43357:8;43354:34;;;43368:18;;:::i;:::-;43354:34;43413:1;43410;43406:9;43398:17;;43230:191;;;;:::o;43427:96::-;43464:7;43493:24;43511:5;43493:24;:::i;:::-;43482:35;;43427:96;;;:::o;43529:90::-;43563:7;43606:5;43599:13;43592:21;43581:32;;43529:90;;;:::o;43625:149::-;43661:7;43701:66;43694:5;43690:78;43679:89;;43625:149;;;:::o;43780:118::-;43817:7;43857:34;43850:5;43846:46;43835:57;;43780:118;;;:::o;43904:126::-;43941:7;43981:42;43974:5;43970:54;43959:65;;43904:126;;;:::o;44036:77::-;44073:7;44102:5;44091:16;;44036:77;;;:::o;44119:101::-;44155:7;44195:18;44188:5;44184:30;44173:41;;44119:101;;;:::o;44226:86::-;44261:7;44301:4;44294:5;44290:16;44279:27;;44226:86;;;:::o;44318:154::-;44402:6;44397:3;44392;44379:30;44464:1;44455:6;44450:3;44446:16;44439:27;44318:154;;;:::o;44478:307::-;44546:1;44556:113;44570:6;44567:1;44564:13;44556:113;;;44655:1;44650:3;44646:11;44640:18;44636:1;44631:3;44627:11;44620:39;44592:2;44589:1;44585:10;44580:15;;44556:113;;;44687:6;44684:1;44681:13;44678:101;;;44767:1;44758:6;44753:3;44749:16;44742:27;44678:101;44527:258;44478:307;;;:::o;44791:171::-;44830:3;44853:24;44871:5;44853:24;:::i;:::-;44844:33;;44899:4;44892:5;44889:15;44886:41;;;44907:18;;:::i;:::-;44886:41;44954:1;44947:5;44943:13;44936:20;;44791:171;;;:::o;44968:320::-;45012:6;45049:1;45043:4;45039:12;45029:22;;45096:1;45090:4;45086:12;45117:18;45107:81;;45173:4;45165:6;45161:17;45151:27;;45107:81;45235:2;45227:6;45224:14;45204:18;45201:38;45198:84;;;45254:18;;:::i;:::-;45198:84;45019:269;44968:320;;;:::o;45294:281::-;45377:27;45399:4;45377:27;:::i;:::-;45369:6;45365:40;45507:6;45495:10;45492:22;45471:18;45459:10;45456:34;45453:62;45450:88;;;45518:18;;:::i;:::-;45450:88;45558:10;45554:2;45547:22;45337:238;45294:281;;:::o;45581:233::-;45620:3;45643:24;45661:5;45643:24;:::i;:::-;45634:33;;45689:66;45682:5;45679:77;45676:103;;;45759:18;;:::i;:::-;45676:103;45806:1;45799:5;45795:13;45788:20;;45581:233;;;:::o;45820:176::-;45852:1;45869:20;45887:1;45869:20;:::i;:::-;45864:25;;45903:20;45921:1;45903:20;:::i;:::-;45898:25;;45942:1;45932:35;;45947:18;;:::i;:::-;45932:35;45988:1;45985;45981:9;45976:14;;45820:176;;;;:::o;46002:180::-;46050:77;46047:1;46040:88;46147:4;46144:1;46137:15;46171:4;46168:1;46161:15;46188:180;46236:77;46233:1;46226:88;46333:4;46330:1;46323:15;46357:4;46354:1;46347:15;46374:180;46422:77;46419:1;46412:88;46519:4;46516:1;46509:15;46543:4;46540:1;46533:15;46560:180;46608:77;46605:1;46598:88;46705:4;46702:1;46695:15;46729:4;46726:1;46719:15;46746:180;46794:77;46791:1;46784:88;46891:4;46888:1;46881:15;46915:4;46912:1;46905:15;46932:117;47041:1;47038;47031:12;47055:117;47164:1;47161;47154:12;47178:117;47287:1;47284;47277:12;47301:117;47410:1;47407;47400:12;47424:117;47533:1;47530;47523:12;47547:117;47656:1;47653;47646:12;47670:102;47711:6;47762:2;47758:7;47753:2;47746:5;47742:14;47738:28;47728:38;;47670:102;;;:::o;47778:221::-;47918:34;47914:1;47906:6;47902:14;47895:58;47987:4;47982:2;47974:6;47970:15;47963:29;47778:221;:::o;48005:225::-;48145:34;48141:1;48133:6;48129:14;48122:58;48214:8;48209:2;48201:6;48197:15;48190:33;48005:225;:::o;48236:229::-;48376:34;48372:1;48364:6;48360:14;48353:58;48445:12;48440:2;48432:6;48428:15;48421:37;48236:229;:::o;48471:222::-;48611:34;48607:1;48599:6;48595:14;48588:58;48680:5;48675:2;48667:6;48663:15;48656:30;48471:222;:::o;48699:224::-;48839:34;48835:1;48827:6;48823:14;48816:58;48908:7;48903:2;48895:6;48891:15;48884:32;48699:224;:::o;48929:236::-;49069:34;49065:1;49057:6;49053:14;49046:58;49138:19;49133:2;49125:6;49121:15;49114:44;48929:236;:::o;49171:168::-;49311:20;49307:1;49299:6;49295:14;49288:44;49171:168;:::o;49345:1529::-;49485:66;49481:1;49473:6;49469:14;49462:90;49586:66;49581:2;49573:6;49569:15;49562:91;49687:34;49682:2;49674:6;49670:15;49663:59;49756:34;49751:2;49743:6;49739:15;49732:59;49826:34;49820:3;49812:6;49808:16;49801:60;49896:34;49890:3;49882:6;49878:16;49871:60;49966:34;49960:3;49952:6;49948:16;49941:60;50036:34;50030:3;50022:6;50018:16;50011:60;50106:34;50100:3;50092:6;50088:16;50081:60;50176:34;50170:3;50162:6;50158:16;50151:60;50246:34;50240:3;50232:6;50228:16;50221:60;50316:34;50310:3;50302:6;50298:16;50291:60;50386:34;50380:3;50372:6;50368:16;50361:60;50456:34;50450:3;50442:6;50438:16;50431:60;50526:66;50520:3;50512:6;50508:16;50501:92;50628:66;50622:3;50614:6;50610:16;50603:92;50730:34;50724:3;50716:6;50712:16;50705:60;50800:66;50794:3;50786:6;50782:16;50775:92;49345:1529;:::o;50880:180::-;51020:32;51016:1;51008:6;51004:14;50997:56;50880:180;:::o;51066:244::-;51206:34;51202:1;51194:6;51190:14;51183:58;51275:27;51270:2;51262:6;51258:15;51251:52;51066:244;:::o;51316:180::-;51456:32;51452:1;51444:6;51440:14;51433:56;51316:180;:::o;51502:230::-;51642:34;51638:1;51630:6;51626:14;51619:58;51711:13;51706:2;51698:6;51694:15;51687:38;51502:230;:::o;51738:168::-;51878:20;51874:1;51866:6;51862:14;51855:44;51738:168;:::o;51912:225::-;52052:34;52048:1;52040:6;52036:14;52029:58;52121:8;52116:2;52108:6;52104:15;52097:33;51912:225;:::o;52143:155::-;52283:7;52279:1;52271:6;52267:14;52260:31;52143:155;:::o;52304:182::-;52444:34;52440:1;52432:6;52428:14;52421:58;52304:182;:::o;52492:234::-;52632:34;52628:1;52620:6;52616:14;52609:58;52701:17;52696:2;52688:6;52684:15;52677:42;52492:234;:::o;52732:176::-;52872:28;52868:1;52860:6;52856:14;52849:52;52732:176;:::o;52914:237::-;53054:34;53050:1;53042:6;53038:14;53031:58;53123:20;53118:2;53110:6;53106:15;53099:45;52914:237;:::o;53157:179::-;53297:31;53293:1;53285:6;53281:14;53274:55;53157:179;:::o;53342:221::-;53482:34;53478:1;53470:6;53466:14;53459:58;53551:4;53546:2;53538:6;53534:15;53527:29;53342:221;:::o;53569:114::-;;:::o;53689:166::-;53829:18;53825:1;53817:6;53813:14;53806:42;53689:166;:::o;53861:238::-;54001:34;53997:1;53989:6;53985:14;53978:58;54070:21;54065:2;54057:6;54053:15;54046:46;53861:238;:::o;54105:172::-;54245:24;54241:1;54233:6;54229:14;54222:48;54105:172;:::o;54283:179::-;54423:31;54419:1;54411:6;54407:14;54400:55;54283:179;:::o;54468:220::-;54608:34;54604:1;54596:6;54592:14;54585:58;54677:3;54672:2;54664:6;54660:15;54653:28;54468:220;:::o;54694:172::-;54834:24;54830:1;54822:6;54818:14;54811:48;54694:172;:::o;54872:233::-;55012:34;55008:1;55000:6;54996:14;54989:58;55081:16;55076:2;55068:6;55064:15;55057:41;54872:233;:::o;55111:181::-;55251:33;55247:1;55239:6;55235:14;55228:57;55111:181;:::o;55298:234::-;55438:34;55434:1;55426:6;55422:14;55415:58;55507:17;55502:2;55494:6;55490:15;55483:42;55298:234;:::o;55538:232::-;55678:34;55674:1;55666:6;55662:14;55655:58;55747:15;55742:2;55734:6;55730:15;55723:40;55538:232;:::o;55776:221::-;55916:34;55912:1;55904:6;55900:14;55893:58;55985:4;55980:2;55972:6;55968:15;55961:29;55776:221;:::o;56003:122::-;56076:24;56094:5;56076:24;:::i;:::-;56069:5;56066:35;56056:63;;56115:1;56112;56105:12;56056:63;56003:122;:::o;56131:116::-;56201:21;56216:5;56201:21;:::i;:::-;56194:5;56191:32;56181:60;;56237:1;56234;56227:12;56181:60;56131:116;:::o;56253:120::-;56325:23;56342:5;56325:23;:::i;:::-;56318:5;56315:34;56305:62;;56363:1;56360;56353:12;56305:62;56253:120;:::o;56379:122::-;56452:24;56470:5;56452:24;:::i;:::-;56445:5;56442:35;56432:63;;56491:1;56488;56481:12;56432:63;56379:122;:::o;56507:118::-;56578:22;56594:5;56578:22;:::i;:::-;56571:5;56568:33;56558:61;;56615:1;56612;56605:12;56558:61;56507:118;:::o

Swarm Source

ipfs://bff19bcaa896a4ee82e588bc36d05d87a3957a393e4c3aedf3e3f57552cca8f4
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.