Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Modern and Gas-Efficient ERC-721 + EIP-4494 Implementation
Compiler Version
vyper:0.4.0
Contract Source Code (Vyper Json-Input format)
# @version 0.4.0
"""
@title Modern and Gas-Efficient ERC-721 + EIP-4494 Implementation
@custom:contract-name erc721
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@dev Adapted lightly for https://github.com/leviathan-news/auction-block
@notice These functions implement the ERC-721
standard interface:
- https://eips.ethereum.org/EIPS/eip-721.
In addition, the following functions have
been added for convenience:
- `name` (`external` `view` function),
- `symbol` (`external` `view` function),
- `tokenURI` (`external` `view` function),
- `totalSupply` (`external` `view` function),
- `tokenByIndex` (`external` `view` function),
- `tokenOfOwnerByIndex` (`external` `view` function),
- `burn` (`external` function),
- `is_minter` (`external` `view` function),
- `safe_mint` (`external` function),
- `set_minter` (`external` function),
- `permit` (`external` function),
- `nonces` (`external` `view` function),
- `DOMAIN_SEPARATOR` (`external` `view` function),
- `eip712Domain` (`external` `view` function),
- `owner` (`external` `view` function),
- `transfer_ownership` (`external` function),
- `renounce_ownership` (`external` function),
- `_check_on_erc721_received` (`internal` function),
- `_before_token_transfer` (`internal` function),
- `_after_token_transfer` (`internal` function).
The `permit` function implements approvals via
EIP-712 secp256k1 signatures for ERC-721 tokens:
https://eips.ethereum.org/EIPS/eip-4494.
In addition, this contract also implements the EIP-5267
function `eip712Domain`:
https://eips.ethereum.org/EIPS/eip-5267.
Eventually, this contract also implements the EIP-4906
metadata update extension:
https://eips.ethereum.org/EIPS/eip-4906.
The implementation is inspired by OpenZeppelin's
implementation here:
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol,
as well as by ApeAcademy's implementation here:
https://github.com/ApeAcademy/ERC721/blob/main/%7B%7Bcookiecutter.project_name%7D%7D/contracts/NFT.vy.
####++++++++
#+++++++++####+++##++
#########+++-++##++-..
....++++#++++++#+++-....
++++++----+++++++++++++++++-..-++##
...-+++++++++++++++++++++++++++#####
+++-....+#+++++++++++++++++++++++++######
+++++++++++++++++++++++++++++++-+++++++++++++++++
++#########++++++++----+++--++----+++++++########++++
###############+++++-.-------------..+++++#############++
##########++++###++++. .---------. .+++++++++-+++ ######
######## ....--+++++. .-------.. .++++++++++#+++#+ ####
######## ..--+++++++++....-------....+++++++####+++++## ###
###### +++++++++++++++-+-----+-++-+-++++++#######++++
##### +#######+#+++++++++-+-++-++++++++++++---+#####++
#### ++####+----+++++++++++++++++++++++++++++- #####++
### +###+.....-+++++++++++++++++++++++++###+++ +###++
++##+....-+++++#+++++++++++++#++++----+##++ +####+
+### ..-+#####++++++++++++++##+++-....##++ ####
++## ++####+-++++##+##+++++++###++-+ +++ #####
+##+ +####-..+++####++###++-.-+###+++ ++ ###
+# +####-..++#####--+###++-- +#++++
++### +++####+..-+###+++ ++++
++#++ ++++###+ +#+++ +++
++++ +++++++ +++++
+++ +++++++ +++
++ +
"""
from ethereum.ercs import IERC20
# @dev We import and implement the `IERC165` interface,
# which is a built-in interface of the Vyper compiler.
from ethereum.ercs import IERC165
implements: IERC165
# @dev We import and implement the `IERC721` interface,
# which is a built-in interface of the Vyper compiler.
from ethereum.ercs import IERC721
implements: IERC721
# @dev We import and implement the `IERC721Metadata`
# interface, which is written using standard Vyper
# syntax.
from .interfaces import IERC721Metadata
implements: IERC721Metadata
# @dev We import and implement the `IERC721Enumerable`
# interface, which is written using standard Vyper
# syntax.
from .interfaces import IERC721Enumerable
implements: IERC721Enumerable
# @dev We import and implement the `IERC721Permit`
# interface, which is written using standard Vyper
# syntax.
from .interfaces import IERC721Permit
implements: IERC721Permit
# @dev We import and implement the `IERC4906` interface,
# which is written using standard Vyper syntax.
from .interfaces import IERC4906
implements: IERC4906
# @dev We import and implement the `IERC5267` interface,
# which is written using standard Vyper syntax.
from .interfaces import IERC5267
implements: IERC5267
# @dev We import the `IERC721Receiver` interface, which
# is written using standard Vyper syntax.
from .interfaces import IERC721Receiver
# @dev We import and use the `ownable` module.
from .imports import ownable
initializes: ownable
# @dev We import the `ecdsa` module.
# @notice Please note that the `ecdsa` module
# is stateless and therefore does not require
# the `uses` keyword for usage.
from .imports import ecdsa
# @dev We import and initialise the `eip712_domain_separator` module.
from .imports import eip712_domain_separator
initializes: eip712_domain_separator
# @dev We export (i.e. the runtime bytecode exposes these
# functions externally, allowing them to be called using
# the ABI encoding specification) the `external` getter
# function `owner` from the `ownable` module as well as the
# function `eip712Domain` from the `eip712_domain_separator`
# module.
# @notice Please note that you must always also export (if
# required by the contract logic) `public` declared `constant`,
# `immutable`, and state variables, for which Vyper automatically
# generates an `external` getter function for the variable.
exports: (
# @notice This ERC-721 implementation includes the `transfer_ownership`
# and `renounce_ownership` functions, which incorporate
# the additional built-in `is_minter` role logic and are
# therefore not exported from the `ownable` module.
ownable.owner,
eip712_domain_separator.eip712Domain,
)
# @dev Stores the ERC-165 interface identifier for each
# imported interface. The ERC-165 interface identifier
# is defined as the XOR of all function selectors in the
# interface.
# @notice If you are not using the full feature set of
# this contract, please ensure you exclude the unused
# ERC-165 interface identifiers in the main contract.
_SUPPORTED_INTERFACES: constant(bytes4[6]) = [
0x01FFC9A7, # The ERC-165 identifier for ERC-165.
0x80AC58CD, # The ERC-165 identifier for ERC-721.
0x5B5E139F, # The ERC-165 identifier for the ERC-721 metadata extension.
0x780E9D63, # The ERC-165 identifier for the ERC-721 enumeration extension.
0x589C5CE2, # The ERC-165 identifier for ERC-4494.
0x49064906, # The ERC-165 identifier for ERC-4906.
]
# @dev The 32-byte type hash of the `permit` function.
_PERMIT_TYPE_HASH: constant(bytes32) = keccak256(
"Permit(address spender,uint256 tokenId,uint256 nonce,uint256 deadline)"
)
# @dev Returns the token collection name.
# @notice If you declare a variable as `public`,
# Vyper automatically generates an `external`
# getter function for the variable. Furthermore,
# to preserve consistency with the interface for
# the optional metadata functions of the ERC-721
# standard, we use lower case letters for the
# `immutable` variables `name` and `symbol`.
name: public(immutable(String[25]))
# @dev Returns the token collection symbol.
# @notice See comment on lower case letters
# above at `name`.
symbol: public(immutable(String[5]))
# @dev Stores the base URI for computing `tokenURI`.
base_uri: public(String[80])
# @dev Mapping from owner to operator approvals.
isApprovedForAll: public(HashMap[address, HashMap[address, bool]])
# @dev Returns `True` if an `address` has been
# granted the minter role.
is_minter: public(HashMap[address, bool])
# @dev Returns the current on-chain tracked nonce
# of `token_id`.
nonces: public(HashMap[uint256, uint256])
# @dev Mapping from owner address to token count.
_balances: HashMap[address, uint256]
# @dev Mapping from token ID to owner address.
_owners: HashMap[uint256, address]
# @dev Mapping from token ID to approved address.
_token_approvals: HashMap[uint256, address]
# @dev Mapping from owner to list of owned token IDs.
_owned_tokens: HashMap[address, HashMap[uint256, uint256]]
# @dev Mapping from token ID to index of the owner
# tokens list.
_owned_tokens_index: HashMap[uint256, uint256]
# @dev Array with all token IDs used for enumeration.
_all_tokens: DynArray[uint256, max_value(uint64)]
# @dev Mapping from token ID to position in the
# `_all_tokens` array.
_all_tokens_index: HashMap[uint256, uint256]
# @dev Mapping from address to token ID to auction ID.
struct AuctionInfo:
contract_address: address
auction_id: uint256
token_to_auction: public(HashMap[uint256, AuctionInfo])
# @dev An `uint256` counter variable that sets
# the token ID for each `safe_mint` call and
# then increments.
_counter: uint256
# @dev Emitted when the status of a `minter`
# address is changed.
event RoleMinterChanged:
minter: indexed(address)
status: bool
@deploy
@payable
def __init__(
name_: String[25],
symbol_: String[5],
base_uri_: String[80],
name_eip712_: String[50],
version_eip712_: String[20],
):
"""
@dev To omit the opcodes for checking the `msg.value`
in the creation-time EVM bytecode, the constructor
is declared as `payable`.
@notice At initialisation time, the `owner` role will be
assigned to the `msg.sender` since we `uses` the
`ownable` module, which implements the aforementioned
logic at contract creation time.
@param name_ The maximum 25-character user-readable string
name of the token collection.
@param symbol_ The maximum 5-character user-readable string
symbol of the token collection.
@param base_uri_ The maximum 80-character user-readable
string base URI for computing `tokenURI`.
@param name_eip712_ The maximum 50-character user-readable
string name of the signing domain, i.e. the name
of the dApp or protocol.
@param version_eip712_ The maximum 20-character current
main version of the signing domain. Signatures
from different versions are not compatible.
"""
self._counter = empty(uint256)
ownable.__init__()
name = name_
symbol = symbol_
self.base_uri = base_uri_
self.is_minter[msg.sender] = True
log RoleMinterChanged(msg.sender, True)
eip712_domain_separator.__init__(name_eip712_, version_eip712_)
@external
@view
def supportsInterface(interface_id: bytes4) -> bool:
"""
@dev Returns `True` if this contract implements the
interface defined by `interface_id`.
@param interface_id The 4-byte interface identifier.
@return bool The verification whether the contract
implements the interface or not.
"""
return interface_id in _SUPPORTED_INTERFACES
@external
@view
def balanceOf(owner: address) -> uint256:
"""
@dev Returns the amount of tokens owned by `owner`.
@notice Note that `owner` cannot be the zero address.
@param owner The 20-byte owner address.
@return uint256 The 32-byte token amount owned
by `owner`.
"""
return self._balance_of(owner)
@external
@view
def ownerOf(token_id: uint256) -> address:
"""
@dev Returns the owner of the `token_id` token.
@notice Note that `token_id` must exist.
@param token_id The 32-byte identifier of the token.
@return address The 20-byte owner address.
"""
return self._owner_of(token_id)
@external
@payable
def approve(to: address, token_id: uint256):
"""
@dev Gives permission to `to` to transfer
`token_id` token to another account.
The approval is cleared when the token
is transferred.
@notice Only a single account can be approved
at a time, so approving the zero address
clears previous approvals. Also, the
caller must own the token or be an
approved operator, and `token_id` must
exist.
IMPORTANT: The function is declared as
`payable` to comply with the EIP-721
standard definition:
https://eips.ethereum.org/EIPS/eip-721.
@param to The 20-byte spender address.
@param token_id The 32-byte identifier of the token.
"""
owner: address = self._owner_of(token_id)
assert to != owner, "erc721: approval to current owner"
assert (
msg.sender == owner or self.isApprovedForAll[owner][msg.sender]
), "erc721: approve caller is not token owner or approved for all"
self._approve(to, token_id)
@external
@view
def getApproved(token_id: uint256) -> address:
"""
@dev Returns the account approved for `token_id`
token.
@notice Note that `token_id` must exist.
@param token_id The 32-byte identifier of the token.
@return address The 20-byte approved address.
"""
return self._get_approved(token_id)
@external
def setApprovalForAll(operator: address, approved: bool):
"""
@dev Approves or removes `operator` as an operator
for the caller. Operators can call `transferFrom`
or `safeTransferFrom` for any token owned by
the caller.
@notice Note that the `operator` cannot be the caller.
@param operator The 20-byte operator address.
@param approved The Boolean variable that sets the
approval status.
"""
self._set_approval_for_all(msg.sender, operator, approved)
@external
@payable
def transferFrom(owner: address, to: address, token_id: uint256):
"""
@dev Transfers `token_id` token from `owner` to `to`.
@notice WARNING: Note that the caller is responsible
to confirm that the recipient is capable of
receiving an ERC-721 token or else they may
be permanently lost. Usage of `safeTransferFrom`
prevents loss, though the caller must understand
this adds an external call which potentially
creates a reentrancy vulnerability.
Note that `owner` and `to` cannot be the zero
address. Also, `token_id` token must exist and
must be owned by `owner`. Eventually, if the caller
is not `owner`, it must be approved to move this
token by either `approve` or `setApprovalForAll`.
IMPORTANT: The function is declared as `payable`
to comply with the EIP-721 standard definition:
https://eips.ethereum.org/EIPS/eip-721.
@param owner The 20-byte owner address.
@param to The 20-byte receiver address.
@param token_id The 32-byte identifier of the token.
"""
assert self._is_approved_or_owner(
msg.sender, token_id
), "erc721: caller is not token owner or approved"
self._transfer(owner, to, token_id)
@external
@payable
def safeTransferFrom(
owner: address, to: address, token_id: uint256, data: Bytes[1_024] = b""
):
"""
@dev Safely transfers `token_id` token from `owner`
to `to`.
@notice Note that `owner` and `to` cannot be the zero
address. Also, `token_id` token must exist and
must be owned by `owner`. Furthermore, if the caller
is not `owner`, it must be approved to move this
token by either `approve` or `setApprovalForAll`.
Eventually, if `to` refers to a smart contract,
it must implement {IERC721Receiver-onERC721Received},
which is called upon a safe transfer.
The Vyper compiler processes this function `safeTransferFrom`
as two separate function selectors, since a default
parameter `b""` is set in the function declaration.
Anyone can invoke this function using only `owner`,
`to`, and `token_id` as arguments, and is therefore
compatible with the function overloading of `safeTransferFrom`
in the standard ERC-721 interface. You can find more
information here:
- https://github.com/vyperlang/vyper/issues/903,
- https://github.com/vyperlang/vyper/pull/987.
IMPORTANT: The function is declared as `payable`
to comply with the EIP-721 standard definition:
https://eips.ethereum.org/EIPS/eip-721.
WARNING: This function can potentially allow a reentrancy
attack when transferring tokens to an untrusted contract,
when invoking {IERC721Receiver-onERC721Received} on the
receiver. We ensure that we consistently follow the checks-
effects-interactions (CEI) pattern to avoid being vulnerable
to this type of attack.
@param owner The 20-byte owner address.
@param to The 20-byte receiver address.
@param token_id The 32-byte identifier of the token.
@param data The maximum 1,024-byte additional data
with no specified format that is sent
to `to`.
"""
assert self._is_approved_or_owner(
msg.sender, token_id
), "erc721: caller is not token owner or approved"
self._safe_transfer(owner, to, token_id, data)
@external
@view
def tokenURI(token_id: uint256) -> String[512]:
"""
@dev Returns the Uniform Resource Identifier (URI)
for `token_id` token.
@notice Throws if `token_id` is not a valid ERC-721 token.
@param token_id The 32-byte identifier of the token.
@return String The maximum 512-character user-readable
string token URI of the `token_id` token.
"""
self._require_minted(token_id)
# If both are set, concatenate the base URI
# and token URI.
return concat(self.base_uri, uint2str(token_id))
@external
@view
def totalSupply() -> uint256:
"""
@dev Returns the amount of tokens in existence.
@return uint256 The 32-byte token supply.
"""
return self._total_supply()
@external
@view
def tokenByIndex(index: uint256) -> uint256:
"""
@dev Returns a token ID at a given `index` of
all the tokens stored by the contract.
@notice Use along with `totalSupply` to enumerate
all tokens.
@param index The 32-byte counter (must be less
than `totalSupply`).
@return uint256 The 32-byte token ID at index
`index`.
"""
assert index < self._total_supply(), "erc721: global index out of bounds"
return self._all_tokens[index]
@external
@view
def tokenOfOwnerByIndex(owner: address, index: uint256) -> uint256:
"""
@dev Returns a token ID owned by `owner` at a
given `index` of its token list.
@notice Use along with `balanceOf` to enumerate
all of `owner`'s tokens.
@param owner The 20-byte owner address.
@param index The 32-byte counter (must be less
than `balanceOf(owner)`).
@return uint256 The 32-byte token ID owned by
`owner` at index `index`.
"""
assert index < self._balance_of(owner), "erc721: owner index out of bounds"
return self._owned_tokens[owner][index]
@external
def burn(token_id: uint256):
"""
@dev Burns the `token_id` token.
@notice Note that the caller must own `token_id`
or be an approved operator.
@param token_id The 32-byte identifier of the token.
"""
assert self._is_approved_or_owner(
msg.sender, token_id
), "erc721: caller is not token owner or approved"
self._burn(token_id)
@external
def safe_mint(
owner: address, contract_address: address, auction_id: uint256
) -> uint256:
"""
@dev Safely mints new token and transfers it to `owner`.
Stores lookup in auction_to_token HashMap
@notice Only authorised minters can access this function.
Note that `owner` cannot be the zero address.
Also, new tokens will be automatically assigned
an incremental ID.
@param owner The 20-byte owner address.
@param auction_id External auction ID
@return 0 on fail or NFT ID
"""
assert self.is_minter[msg.sender], "erc721: access is denied"
# New tokens will be automatically assigned an incremental ID.
# The first token ID will be one.
token_id: uint256 = self._counter + 1
self._counter = token_id
# Theoretically, the following line could overflow
# if all 2**256 token IDs were minted. However,
# since we have bounded the dynamic array `_all_tokens`
# by the maximum value of `uint64` and the `_counter`
# increments above are checked for an overflow, this is
# no longer even theoretically possible.
self._safe_mint(owner, token_id, b"")
self.token_to_auction[token_id] = AuctionInfo(
contract_address=contract_address, auction_id=auction_id
)
log IERC4906.MetadataUpdate(token_id)
return token_id
@external
def set_base_uri(new_uri: String[80]):
ownable._check_owner()
self.base_uri = new_uri
@external
def set_minter(minter: address, status: bool):
"""
@dev Adds or removes an address `minter` to/from the
list of allowed minters. Note that only the
`owner` can add or remove `minter` addresses.
Also, the `minter` cannot be the zero address.
Eventually, the `owner` cannot remove himself
from the list of allowed minters.
@param minter The 20-byte minter address.
@param status The Boolean variable that sets the status.
"""
ownable._check_owner()
assert minter != empty(address), "erc721: minter is the zero address"
# We ensured in the previous step `ownable._check_owner`
# that `msg.sender` is the `owner`.
assert minter != msg.sender, "erc721: minter is owner address"
self.is_minter[minter] = status
log RoleMinterChanged(minter, status)
@external
def permit(
spender: address,
token_id: uint256,
deadline: uint256,
v: uint8,
r: bytes32,
s: bytes32,
):
"""
@dev Sets permission to `spender` to transfer `token_id`
token to another account, given `owner`'s signed
approval.
@notice Note that `spender` cannot be the zero address.
Also, `deadline` must be a block timestamp in
the future. `v`, `r`, and `s` must be a valid
secp256k1 signature from `owner` over the
EIP-712-formatted function arguments. Eventually,
the signature must use `token_id`'s current nonce.
@param spender The 20-byte spender address.
@param token_id The 32-byte identifier of the token.
@param deadline The 32-byte block timestamp up
which the `spender` is allowed to spend `token_id`.
@param v The secp256k1 1-byte signature parameter `v`.
@param r The secp256k1 32-byte signature parameter `r`.
@param s The secp256k1 32-byte signature parameter `s`.
"""
assert block.timestamp <= deadline, "erc721: expired deadline"
current_nonce: uint256 = self.nonces[token_id]
self.nonces[token_id] = unsafe_add(current_nonce, 1)
struct_hash: bytes32 = keccak256(
abi_encode(
_PERMIT_TYPE_HASH, spender, token_id, current_nonce, deadline
)
)
hash: bytes32 = eip712_domain_separator._hash_typed_data_v4(struct_hash)
signer: address = ecdsa._recover_vrs(
hash, convert(v, uint256), convert(r, uint256), convert(s, uint256)
)
assert signer == self._owner_of(token_id), "erc721: invalid signature"
self._approve(spender, token_id)
@external
@view
def DOMAIN_SEPARATOR() -> bytes32:
"""
@dev Returns the domain separator for the current chain.
@return bytes32 The 32-byte domain separator.
"""
return eip712_domain_separator._domain_separator_v4()
@external
@view
def auction_to_token(auction_house: address, auction_id: uint256) -> uint256:
"""
@notice Find the token id given an auction
@dev Iterates through all tokens and checks token_to_auction
@param auction_house Auction contract that issues the token
@param auction_id The auction_id from the auction contract
@return token_id The token id matching the auction contract and id or 0 on error
"""
matching_id: uint256 = 0
for _token: uint256 in self._all_tokens:
if (
self.token_to_auction[_token].contract_address == auction_house
and self.token_to_auction[_token].auction_id == auction_id
):
matching_id = _token
break
return matching_id
@external
def transfer_ownership(new_owner: address):
"""
@dev Transfers the ownership of the contract
to a new account `new_owner`.
@notice Note that this function can only be
called by the current `owner`. Also,
the `new_owner` cannot be the zero address.
WARNING: The ownership transfer also removes
the previous owner's minter role and assigns
the minter role to `new_owner` accordingly.
@param new_owner The 20-byte address of the new owner.
"""
ownable._check_owner()
assert new_owner != empty(address), "erc721: new owner is the zero address"
self.is_minter[msg.sender] = False
log RoleMinterChanged(msg.sender, False)
ownable._transfer_ownership(new_owner)
self.is_minter[new_owner] = True
log RoleMinterChanged(new_owner, True)
@external
def renounce_ownership():
"""
@dev Leaves the contract without an owner.
@notice Renouncing ownership will leave the
contract without an owner, thereby
removing any functionality that is
only available to the owner. Note
that the `owner` is also removed from
the list of allowed minters.
WARNING: All other existing `minter`
addresses will still be able to create
new tokens. Consider removing all non-owner
minter addresses first via `set_minter`
before calling `renounce_ownership`.
"""
ownable._check_owner()
self.is_minter[msg.sender] = False
log RoleMinterChanged(msg.sender, False)
ownable._transfer_ownership(empty(address))
@external
def recover_erc20(token_addr: address, amount: uint256):
"""
@notice Recover ERC20 tokens accidentally sent to contract
@dev Only callable by owner for cleanup purposes
@param token_addr The token contract address
@param amount Amount of tokens to recover
"""
ownable._check_owner()
token: IERC20 = IERC20(token_addr)
assert extcall token.transfer(ownable.owner, amount), "transfer failed"
@internal
@view
def _balance_of(owner: address) -> uint256:
"""
@dev An `internal` helper function that returns the
amount of tokens owned by `owner`.
@notice Note that `owner` cannot be the zero address.
@param owner The 20-byte owner address.
@return uint256 The 32-byte token amount owned
by `owner`.
"""
assert owner != empty(
address
), "erc721: the zero address is not a valid owner"
return self._balances[owner]
@internal
@view
def _owner_of(token_id: uint256) -> address:
"""
@dev An `internal` helper function that returns the
owner of the `token_id` token.
@notice Note that `token_id` must exist.
@param token_id The 32-byte identifier of the token.
@return address The 20-byte owner address.
"""
owner: address = self._owners[token_id]
assert owner != empty(address), "erc721: invalid token ID"
return owner
@internal
@view
def _require_minted(token_id: uint256):
"""
@dev Reverts if the `token_id` has not yet been minted.
@param token_id The 32-byte identifier of the token.
"""
assert self._exists(token_id), "erc721: invalid token ID"
@internal
@view
def _exists(token_id: uint256) -> bool:
"""
@dev Returns whether `token_id` exists.
@notice Tokens can be managed by their owner or approved
accounts via `approve` or `setApprovalForAll`.
Tokens start existing when they are minted (`_mint`),
and stop existing when they are burned (`_burn`).
@param token_id The 32-byte identifier of the token.
@return bool The verification whether `token_id` exists
or not.
"""
return self._owners[token_id] != empty(address)
@internal
def _approve(to: address, token_id: uint256):
"""
@dev Approves `to` to operate on `token_id`.
@param to The 20-byte spender address.
@param token_id The 32-byte identifier of the token.
"""
self._token_approvals[token_id] = to
log IERC721.Approval(self._owner_of(token_id), to, token_id)
@internal
@view
def _get_approved(token_id: uint256) -> address:
"""
@dev An `internal` helper function that returns the
account approved for `token_id` token.
@notice Note that `token_id` must exist.
@param token_id The 32-byte identifier of the token.
@return address The 20-byte approved address.
"""
self._require_minted(token_id)
return self._token_approvals[token_id]
@internal
def _set_approval_for_all(owner: address, operator: address, approved: bool):
"""
@dev Approves `operator` to operate on all of `owner` tokens.
@param owner The 20-byte owner address.
@param operator The 20-byte operator address.
@param approved The Boolean variable that sets the
approval status.
"""
assert owner != operator, "erc721: approve to caller"
self.isApprovedForAll[owner][operator] = approved
log IERC721.ApprovalForAll(owner, operator, approved)
@internal
def _is_approved_or_owner(spender: address, token_id: uint256) -> bool:
"""
@dev Returns whether `spender` is allowed to manage
`token_id`.
@notice Note that `token_id` must exist.
@param spender The 20-byte spender address.
@param token_id The 32-byte identifier of the token.
"""
owner: address = self._owner_of(token_id)
return (
(spender == owner)
or (self.isApprovedForAll[owner][spender])
or (self._get_approved(token_id) == spender)
)
@internal
def _safe_mint(owner: address, token_id: uint256, data: Bytes[1_024]):
"""
@dev Safely mints `token_id` and transfers it to `owner`.
@notice Note that `token_id` must not exist. Also, if `owner`
refers to a smart contract, it must implement
{IERC721Receiver-onERC721Received}, which is called
upon a safe transfer.
WARNING: This `internal` function without access
restriction can potentially allow a reentrancy
attack when transferring tokens to an untrusted
contract, when invoking {IERC721Receiver-onERC721Received}
on the receiver. We ensure that we consistently
follow the checks-effects-interactions (CEI) pattern
to avoid being vulnerable to this type of attack.
@param owner The 20-byte owner address.
@param token_id The 32-byte identifier of the token.
@param data The maximum 1,024-byte additional data
with no specified format that is sent
to `owner`.
"""
self._mint(owner, token_id)
assert self._check_on_erc721_received(
empty(address), owner, token_id, data
), "erc721: transfer to non-IERC721Receiver implementer"
@internal
def _mint(owner: address, token_id: uint256):
"""
@dev Mints `token_id` and transfers it to `owner`.
@notice Note that `token_id` must not exist and
`owner` cannot be the zero address.
WARNING: Usage of this method is discouraged,
use `_safe_mint` whenever possible.
@param owner The 20-byte owner address.
@param token_id The 32-byte identifier of the token.
"""
assert owner != empty(address), "erc721: mint to the zero address"
assert not self._exists(token_id), "erc721: token already minted"
self._before_token_transfer(empty(address), owner, token_id)
# Checks that the `token_id` was not minted by the
# `_before_token_transfer` hook.
assert not self._exists(token_id), "erc721: token already minted"
# Theoretically, the following line could overflow
# if all 2**256 token IDs were minted to the same owner.
# However, since we have bounded the dynamic array
# `_all_tokens` by the maximum value of `uint64`,
# this is no longer even theoretically possible.
self._balances[owner] = unsafe_add(self._balances[owner], 1)
self._owners[token_id] = owner
log IERC721.Transfer(empty(address), owner, token_id)
self._after_token_transfer(empty(address), owner, token_id)
@internal
def _safe_transfer(
owner: address, to: address, token_id: uint256, data: Bytes[1_024]
):
"""
@dev Safely transfers `token_id` token from
`owner` to `to`, checking first that contract
recipients are aware of the ERC-721 protocol
to prevent tokens from being forever locked.
@notice This `internal` function is equivalent to
`safeTransferFrom`, and can be used to e.g.
implement alternative mechanisms to perform
token transfers, such as signature-based.
Note that `owner` and `to` cannot be the zero
address. Also, `token_id` token must exist and
must be owned by `owner`. Eventually, if `to`
refers to a smart contract, it must implement
{IERC721Receiver-onERC721Received}, which is
called upon a safe transfer.
WARNING: This `internal` function can potentially
allow a reentrancy attack when transferring tokens
to an untrusted contract, when invoking {IERC721Receiver-onERC721Received}
on the receiver. We ensure that we consistently
follow the checks-effects-interactions (CEI) pattern
to avoid being vulnerable to this type of attack.
@param owner The 20-byte owner address.
@param to The 20-byte receiver address.
@param token_id The 32-byte identifier of the token.
@param data The maximum 1,024-byte additional data
with no specified format that is sent
to `to`.
"""
self._transfer(owner, to, token_id)
assert self._check_on_erc721_received(
owner, to, token_id, data
), "erc721: transfer to non-IERC721Receiver implementer"
@internal
def _transfer(owner: address, to: address, token_id: uint256):
"""
@dev Transfers `token_id` from `owner` to `to`.
As opposed to `transferFrom`, this imposes
no restrictions on `msg.sender`.
@notice Note that `to` cannot be the zero address.
Also, `token_id` token must be owned by
`owner`.
@param owner The 20-byte owner address.
@param to The 20-byte receiver address.
@param token_id The 32-byte identifier of the token.
"""
assert (
self._owner_of(token_id) == owner
), "erc721: transfer from incorrect owner"
assert to != empty(address), "erc721: transfer to the zero address"
self._before_token_transfer(owner, to, token_id)
# Checks that the `token_id` was not transferred by the
# `_before_token_transfer` hook.
assert (
self._owner_of(token_id) == owner
), "erc721: transfer from incorrect owner"
self._token_approvals[token_id] = empty(address)
# See comment why an overflow is not possible in the
# following two lines above at `_mint`.
self._balances[owner] = unsafe_sub(self._balances[owner], 1)
self._balances[to] = unsafe_add(self._balances[to], 1)
self._owners[token_id] = to
log IERC721.Transfer(owner, to, token_id)
self._after_token_transfer(owner, to, token_id)
@internal
@view
def _total_supply() -> uint256:
"""
@dev An `internal` helper function that returns the amount
of tokens in existence.
@return uint256 The 32-byte token supply.
"""
return len(self._all_tokens)
@internal
def _burn(token_id: uint256):
"""
@dev Destroys `token_id`.
@notice The approval is cleared when the token is burned.
This is an `internal` function that does not check
if the sender is authorised to operate on the token.
Note that `token_id` must exist.
@param token_id The 32-byte identifier of the token.
"""
owner: address = self._owner_of(token_id)
self._before_token_transfer(owner, empty(address), token_id)
# Updates ownership in case the `token_id` was
# transferred by the `_before_token_transfer` hook.
owner = self._owner_of(token_id)
self._token_approvals[token_id] = empty(address)
# Overflow is not possible, as in this case more tokens would
# have to be burned/transferred than the owner originally
# received through minting and transfer.
self._balances[owner] = unsafe_sub(self._balances[owner], 1)
self._owners[token_id] = empty(address)
log IERC721.Transfer(owner, empty(address), token_id)
self._after_token_transfer(owner, empty(address), token_id)
@internal
def _check_on_erc721_received(
owner: address, to: address, token_id: uint256, data: Bytes[1_024]
) -> bool:
"""
@dev An `internal` function that invokes {IERC721Receiver-onERC721Received}
on a target address. The call is not executed
if the target address is not a contract.
@param owner The 20-byte address which previously
owned the token.
@param to The 20-byte address receiver address.
@param token_id The 32-byte identifier of the token.
@param data The maximum 1,024-byte additional data
with no specified format.
@return bool The verification whether the call correctly
returned the expected magic value.
"""
# Contract case.
if to.is_contract:
return_value: bytes4 = extcall IERC721Receiver(to).onERC721Received(
msg.sender, owner, token_id, data
)
assert return_value == method_id(
"onERC721Received(address,address,uint256,bytes)",
output_type=bytes4,
), "erc721: transfer to non-IERC721Receiver implementer"
return True
return True
@internal
def _before_token_transfer(owner: address, to: address, token_id: uint256):
"""
@dev Hook that is called before any token transfer.
This includes minting and burning.
@notice The calling conditions are:
- when `owner` and `to` are both non-zero,
`owner`'s tokens will be transferred to `to`,
- when `owner` is zero, the tokens will
be minted for `to`,
- when `to` is zero, `owner`'s tokens will
be burned,
- `owner` and `to` are never both zero.
@param owner The 20-byte owner address.
@param to The 20-byte receiver address.
@param token_id The 32-byte identifier of the token.
"""
if owner == empty(address):
self._add_token_to_all_tokens_enumeration(token_id)
elif owner != to:
self._remove_token_from_owner_enumeration(owner, token_id)
if to == empty(address):
self._remove_token_from_all_tokens_enumeration(token_id)
elif to != owner:
self._add_token_to_owner_enumeration(to, token_id)
@internal
def _after_token_transfer(owner: address, to: address, token_id: uint256):
"""
@dev Hook that is called after any token transfer.
This includes minting and burning.
@notice The calling conditions are:
- when `owner` and `to` are both non-zero,
`owner`'s tokens were transferred to `to`,
- when `owner` is zero, the tokens were
be minted for `to`,
- when `to` is zero, `owner`'s tokens will
be burned,
- `owner` and `to` are never both zero.
@param owner The 20-byte owner address.
@param to The 20-byte receiver address.
@param token_id The 32-byte identifier of the token.
"""
pass
@internal
def _add_token_to_owner_enumeration(to: address, token_id: uint256):
"""
@dev This is an `internal` function that adds a token
to the ownership-tracking data structures.
@param to The 20-byte receiver address.
@param token_id The 32-byte identifier of the token.
"""
length: uint256 = self._balance_of(to)
self._owned_tokens[to][length] = token_id
self._owned_tokens_index[token_id] = length
@internal
def _add_token_to_all_tokens_enumeration(token_id: uint256):
"""
@dev This is an `internal` function that adds a token
to the token tracking data structures.
@param token_id The 32-byte identifier of the token.
"""
self._all_tokens_index[token_id] = len(self._all_tokens)
self._all_tokens.append(token_id)
@internal
def _remove_token_from_owner_enumeration(owner: address, token_id: uint256):
"""
@dev This is an `internal` function that removes a token
from the ownership-tracking data structures.
@notice Note that while the token is not assigned a new
owner, the `_owned_tokens_index` mapping is NOT
updated: this allows for gas optimisations e.g.
when performing a transfer operation (avoiding
double writes). This function has O(1) time
complexity, but alters the order of the
`_owned_tokens` array.
@param owner The 20-byte owner address.
@param token_id The 32-byte identifier of the token.
"""
# To prevent a gap in `owner`'s tokens array,
# we store the last token in the index of the
# token to delete, and then delete the last slot.
last_token_index: uint256 = self._balance_of(owner) - 1
token_index: uint256 = self._owned_tokens_index[token_id]
# When the token to delete is the last token,
# the swap operation is unnecessary.
if token_index != last_token_index:
last_token_id: uint256 = self._owned_tokens[owner][last_token_index]
# Moves the last token to the slot of the to-delete token.
self._owned_tokens[owner][token_index] = last_token_id
# Updates the moved token's index.
self._owned_tokens_index[last_token_id] = token_index
self._owned_tokens_index[token_id] = empty(uint256)
self._owned_tokens[owner][last_token_index] = empty(uint256)
@internal
def _remove_token_from_all_tokens_enumeration(token_id: uint256):
"""
@dev This is an `internal` function that removes a token
from the token tracking data structures.
@notice This function has O(1) time complexity, but
alters the order of the `_all_tokens` array.
@param token_id The 32-byte identifier of the token.
"""
# To prevent a gap in the tokens array,
# we store the last token in the index
# of the token to delete, and then delete
# the last slot.
last_token_index: uint256 = len(self._all_tokens) - 1
token_index: uint256 = self._all_tokens_index[token_id]
# When the token to delete is the last token,
# the swap operation is unnecessary. However,
# since this occurs so rarely (when the last
# minted token is burned) that we still do the
# swap here to avoid the gas cost of adding
# an `if` statement (like in `_remove_token_from_owner_enumeration`).
last_token_id: uint256 = self._all_tokens[last_token_index]
# Moves the last token to the slot of the to-delete token.
self._all_tokens[token_index] = last_token_id
# Updates the moved token's index.
self._all_tokens_index[last_token_id] = token_index
# This also deletes the contents at the
# last position of the array.
self._all_tokens_index[token_id] = empty(uint256)
self._all_tokens.pop()# @version 0.4.0
"""
@title EIP-721 Optional Metadata Interface Definition
@custom:contract-name IERC721Metadata
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@notice The metadata extension is optional for an ERC-721
smart contract. This allows a smart contract to
be interrogated for its name and for details about
the asset(s) which a non-fungible token (NFT)
represents. For more details, please refer to:
https://eips.ethereum.org/EIPS/eip-721#specification.
Note that Vyper interfaces that implement functions
with return values that require an upper bound (e.g.
`Bytes`, `DynArray`, or `String`), the upper bound
defined in the interface represents the lower bound
of the implementation:
https://github.com/vyperlang/vyper/pull/3205.
On how to use interfaces in Vyper, please visit:
https://vyper.readthedocs.io/en/latest/interfaces.html#interfaces.
"""
# @dev We import and implement the `IERC165` interface,
# which is a built-in interface of the Vyper compiler.
from ethereum.ercs import IERC165
implements: IERC165
# @dev We import the `IERC721` interface, which is a built-in
# interface of the Vyper compiler, to highlight the association
# of the custom `IERC721Metadata` interface with the built-in
# `IERC721` interface.
# @notice The interface `IERC721Metadata` must be used in conjunction
# with the built-in interface `IERC721` to be EIP-721 compatible.
# If you want to use this interface as a stand-alone interface,
# you must add `implements: IERC721` to this interface and implement
# all required events and functions accordingly.
from ethereum.ercs import IERC721
@external
@view
def supportsInterface(interfaceId: bytes4) -> bool:
"""
@dev Returns `True` if this contract implements the
interface defined by `interfaceId`.
@notice For more details on how these identifiers are
created, please refer to:
https://eips.ethereum.org/EIPS/eip-165.
@param interfaceId The 4-byte interface identifier.
@return bool The verification whether the contract
implements the interface or not.
"""
...
@external
@view
def name() -> String[25]:
"""
@dev Returns the token collection name.
@return String The maximum 25-character
user-readable string name of the
token collection.
"""
...
@external
@view
def symbol() -> String[5]:
"""
@dev Returns the token collection symbol.
@return String The maximum 5-character
user-readable string symbol of the
token collection.
"""
...
@external
@view
def tokenURI(_tokenId: uint256) -> String[512]:
"""
@dev Returns the Uniform Resource Identifier (URI)
for `_tokenId` token.
@notice Throws if `_tokenId` is not a valid ERC-721 token.
@param _tokenId The 32-byte identifier of the token.
@return String The maximum 512-character user-readable
string token URI of the `_tokenId` token.
"""
...# @version 0.4.0
"""
@title EIP-721 Optional Enumeration Interface Definition
@custom:contract-name IERC721Enumerable
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@notice The enumeration extension is optional for an ERC-721
smart contract. This allows a contract to publish its
full list of ERC-721 tokens and make them discoverable.
For more details, please refer to:
https://eips.ethereum.org/EIPS/eip-721#specification.
On how to use interfaces in Vyper, please visit:
https://vyper.readthedocs.io/en/latest/interfaces.html#interfaces.
"""
# @dev We import and implement the `IERC165` interface,
# which is a built-in interface of the Vyper compiler.
from ethereum.ercs import IERC165
implements: IERC165
# @dev We import the `IERC721` interface, which is a built-in
# interface of the Vyper compiler, to highlight the association
# of the custom `IERC721Enumerable` interface with the built-in
# `IERC721` interface.
# @notice The interface `IERC721Enumerable` must be used in conjunction
# with the built-in interface `IERC721` to be EIP-721 compatible.
# If you want to use this interface as a stand-alone interface,
# you must add `implements: IERC721` to this interface and implement
# all required events and functions accordingly.
from ethereum.ercs import IERC721
@external
@view
def supportsInterface(interfaceId: bytes4) -> bool:
"""
@dev Returns `True` if this contract implements the
interface defined by `interfaceId`.
@notice For more details on how these identifiers are
created, please refer to:
https://eips.ethereum.org/EIPS/eip-165.
@param interfaceId The 4-byte interface identifier.
@return bool The verification whether the contract
implements the interface or not.
"""
...
@external
@view
def totalSupply() -> uint256:
"""
@dev Returns the amount of tokens in existence.
@return uint256 The 32-byte token supply.
"""
...
@external
@view
def tokenByIndex(_index: uint256) -> uint256:
"""
@dev Returns a token ID at a given `_index` of
all the tokens stored by the contract.
@notice Use along with `totalSupply` to enumerate
all tokens.
@param _index The 32-byte counter (must be less
than `totalSupply()`).
@return uint256 The 32-byte token ID at index
`_index`.
"""
...
@external
@view
def tokenOfOwnerByIndex(_owner: address, _index: uint256) -> uint256:
"""
@dev Returns a token ID owned by `_owner` at a
given `_index` of its token list.
@notice Use along with `balanceOf` to enumerate
all of `_owner`'s tokens.
@param _owner The 20-byte owner address.
@param _index The 32-byte counter (must be less
than `balanceOf(_owner)`).
@return uint256 The 32-byte token ID owned by
`_owner` at index `_index`.
"""
...# @version 0.4.0
"""
@title EIP-4494 Interface Definition
@custom:contract-name IERC721Permit
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@notice The `permit` function implements approvals via
EIP-712 secp256k1 signatures for ERC-721 tokens:
https://eips.ethereum.org/EIPS/eip-4494. The
`permit` function allows users to modify the
permission of who can manage a `tokenId` using
a signed message (via secp256k1 signatures),
instead of through `msg.sender`. By not relying
on `approve`, the token holder's account does not
need to send a transaction and therefore does not
need to hold ether, enabling important use cases
such as meta-transactions.
IMPORTANT: Due to sake of consistency, we follow EIP-2612's
pattern (see https://eips.ethereum.org/EIPS/eip-2612) and
implement the `permit` function via the secp256k1 signature
parameters `v`, `r`, and `s` and do not support EIP-2098
signatures (64-byte length, see https://eips.ethereum.org/EIPS/eip-2098).
The ERC-165 identifier for this interface is `0x589C5CE2`.
On how to use interfaces in Vyper, please visit:
https://vyper.readthedocs.io/en/latest/interfaces.html#interfaces.
"""
# @dev We import and implement the `IERC165` interface,
# which is a built-in interface of the Vyper compiler.
from ethereum.ercs import IERC165
implements: IERC165
@external
@view
def supportsInterface(interfaceId: bytes4) -> bool:
"""
@dev Returns `True` if this contract implements the
interface defined by `interfaceId`.
@notice For more details on how these identifiers are
created, please refer to:
https://eips.ethereum.org/EIPS/eip-165.
@param interfaceId The 4-byte interface identifier.
@return bool The verification whether the contract
implements the interface or not.
"""
...
@external
def permit(
spender: address,
tokenId: uint256,
deadline: uint256,
v: uint8,
r: bytes32,
s: bytes32,
):
"""
@dev Sets permission to `spender` to transfer `tokenId`
token to another account, given `owner`'s signed
approval.
@notice Note that `spender` cannot be the zero address.
Also, `deadline` must be a block timestamp in
the future. `v`, `r`, and `s` must be a valid
secp256k1 signature from `owner` over the
EIP-712-formatted function arguments. Eventually,
the signature must use `tokenId`'s current nonce.
@param spender The 20-byte spender address.
@param tokenId The 32-byte identifier of the token.
@param deadline The 32-byte block timestamp up
which the `spender` is allowed to spend `tokenId`.
@param v The secp256k1 1-byte signature parameter `v`.
@param r The secp256k1 32-byte signature parameter `r`.
@param s The secp256k1 32-byte signature parameter `s`.
"""
...
@external
@view
def nonces(tokenId: uint256) -> uint256:
"""
@dev Returns the current on-chain tracked nonce of `tokenId`.
@param tokenId The 32-byte identifier of the token.
@return uint256 The 32-byte `tokenId` nonce.
"""
...
@external
@view
def DOMAIN_SEPARATOR() -> bytes32:
"""
@dev Returns the domain separator for the current chain.
@return bytes32 The 32-byte domain separator.
"""
...# @version 0.4.0
"""
@title EIP-4906 Interface Definition
@custom:contract-name IERC4906
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@notice The ERC-4906 standard is an extension of EIP-721.
It adds a `MetadataUpdate` event to EIP-721 tokens.
The ERC-165 identifier for this interface is `0x49064906`.
For more details, please refer to:
https://eips.ethereum.org/EIPS/eip-4906.
On how to use interfaces in Vyper, please visit:
https://vyper.readthedocs.io/en/latest/interfaces.html#interfaces.
"""
# @dev We import and implement the `IERC165` interface,
# which is a built-in interface of the Vyper compiler.
from ethereum.ercs import IERC165
implements: IERC165
# @dev We import the `IERC721` interface, which is a built-in
# interface of the Vyper compiler, to highlight the association
# of the custom `IERC4906` interface with the built-in `IERC721`
# interface.
# @notice The interface `IERC4906` must be used in conjunction
# with the built-in interface `IERC721` to be EIP-721 compatible.
# If you want to use this interface as a stand-alone interface,
# you must add `implements: IERC721` to this interface and implement
# all required events and functions accordingly.
from ethereum.ercs import IERC721
# @dev Emitted when the metadata of a token is changed.
# Thus, third-party platforms, such as NFT marketplaces,
# can update the images and associated attributes of the
# NFT in a timely manner.
event MetadataUpdate:
_tokenId: uint256
# @dev Emitted when the metadata of a range of tokens is
# changed. Thus, third-party platforms, such as NFT marketplaces,
# can update the images and associated attributes of the
# NFTs in a timely manner.
event BatchMetadataUpdate:
_fromTokenId: uint256
_toTokenId: uint256
@external
@view
def supportsInterface(interfaceId: bytes4) -> bool:
"""
@dev Returns `True` if this contract implements the
interface defined by `interfaceId`.
@notice For more details on how these identifiers are
created, please refer to:
https://eips.ethereum.org/EIPS/eip-165.
@param interfaceId The 4-byte interface identifier.
@return bool The verification whether the contract
implements the interface or not.
"""
...# @version 0.4.0
"""
@title EIP-5267 Interface Definition
@custom:contract-name IERC5267
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@notice The ERC-5267 standard complements the EIP-712 standard
by standardising how contracts should publish the fields
and values that describe their domain. This enables
applications to retrieve this description and generate
appropriate domain separators in a general way, and thus
integrate EIP-712 signatures securely and scalably. For
more details, please refer to:
https://eips.ethereum.org/EIPS/eip-5267.
Note that Vyper interfaces that implement functions
with return values that require an upper bound (e.g.
`Bytes`, `DynArray`, or `String`), the upper bound
defined in the interface represents the lower bound
of the implementation:
https://github.com/vyperlang/vyper/pull/3205.
On how to use interfaces in Vyper, please visit:
https://vyper.readthedocs.io/en/latest/interfaces.html#interfaces.
"""
# @dev May be emitted to signal that the domain could
# have changed.
event EIP712DomainChanged:
pass
@external
@view
def eip712Domain() -> (
bytes1,
String[50],
String[20],
uint256,
address,
bytes32,
DynArray[uint256, 32],
):
"""
@dev Returns the fields and values that describe the domain
separator used by this contract for EIP-712 signatures.
@notice The bits in the 1-byte bit map are read from the least
significant to the most significant, and fields are indexed
in the order that is specified by EIP-712, identical to the
order in which they are listed in the function type.
@return bytes1 The 1-byte bit map where bit `i` is set to `1`
if and only if domain field `i` is present (`0 ≤ i ≤ 4`).
@return String The maximum 50-character user-readable string name
of the signing domain, i.e. the name of the dApp or protocol.
@return String The maximum 20-character current main version of
the signing domain. Signatures from different versions are
not compatible.
@return uint256 The 32-byte EIP-155 chain ID.
@return address The 20-byte address of the verifying contract.
@return bytes32 The 32-byte disambiguation salt for the protocol.
@return DynArray The 32-byte array of EIP-712 extensions.
"""
...# @version 0.4.0
"""
@title EIP-721 Token Receiver Interface Definition
@custom:contract-name IERC721Receiver
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@notice The interface definition for any contract
that wants to support safe transfers from
ERC-721 asset contracts. For more details,
please refer to:
https://eips.ethereum.org/EIPS/eip-721#specification.
On how to use interfaces in Vyper, please visit:
https://vyper.readthedocs.io/en/latest/interfaces.html#interfaces.
"""
@external
def onERC721Received(
_operator: address, _from: address, _tokenId: uint256, _data: Bytes[1_024]
) -> bytes4:
"""
@dev Whenever a `_tokenId` token is transferred to
this contract via `safeTransferFrom` by
`_operator` from `_from`, this function is called.
@notice It must return its function selector to
confirm the token transfer. If any other value
is returned or the interface is not implemented
by the recipient, the transfer will be reverted.
@param _operator The 20-byte address which called
the `safeTransferFrom` function.
@param _from The 20-byte address which previously
owned the token.
@param _tokenId The 32-byte identifier of the token.
@param _data The maximum 1,024-byte additional data
with no specified format.
@return bytes4 The 4-byte function selector of `onERC721Received`.
"""
...# @version 0.4.0
"""
@title Owner-Based Access Control Functions
@custom:contract-name ownable
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@notice These functions can be used to implement a basic access
control mechanism, where there is an account (an owner)
that can be granted exclusive access to specific functions.
By default, the owner account will be the one that deploys
the contract. This can later be changed with `transfer_ownership`.
An exemplary integration can be found in the ERC-20 implementation here:
https://github.com/pcaversaccio/snekmate/blob/main/src/snekmate/tokens/erc20.vy.
The implementation is inspired by OpenZeppelin's implementation here:
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol.
"""
# @dev Returns the address of the current owner.
# @notice If you declare a variable as `public`,
# Vyper automatically generates an `external`
# getter function for the variable.
owner: public(address)
# @dev Emitted when the ownership is transferred
# from `previous_owner` to `new_owner`.
event OwnershipTransferred:
previous_owner: indexed(address)
new_owner: indexed(address)
@deploy
@payable
def __init__():
"""
@dev To omit the opcodes for checking the `msg.value`
in the creation-time EVM bytecode, the constructor
is declared as `payable`.
@notice The `owner` role will be assigned to
the `msg.sender`.
"""
self._transfer_ownership(msg.sender)
@external
def transfer_ownership(new_owner: address):
"""
@dev Transfers the ownership of the contract
to a new account `new_owner`.
@notice Note that this function can only be
called by the current `owner`. Also,
the `new_owner` cannot be the zero address.
@param new_owner The 20-byte address of the new owner.
"""
self._check_owner()
assert new_owner != empty(address), "ownable: new owner is the zero address"
self._transfer_ownership(new_owner)
@external
def renounce_ownership():
"""
@dev Leaves the contract without an owner.
@notice Renouncing ownership will leave the
contract without an owner, thereby
removing any functionality that is
only available to the owner.
"""
self._check_owner()
self._transfer_ownership(empty(address))
@internal
def _check_owner():
"""
@dev Throws if the sender is not the owner.
"""
assert msg.sender == self.owner, "ownable: caller is not the owner"
@internal
def _transfer_ownership(new_owner: address):
"""
@dev Transfers the ownership of the contract
to a new account `new_owner`.
@notice This is an `internal` function without
access restriction.
@param new_owner The 20-byte address of the new owner.
"""
old_owner: address = self.owner
self.owner = new_owner
log OwnershipTransferred(old_owner, new_owner)# @version 0.4.0
"""
@title Elliptic Curve Digital Signature Algorithm (ECDSA) Secp256k1-Based Functions
@custom:contract-name ecdsa
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@notice These functions can be used to verify that a message was signed by
the holder of the private key of a given address. All cryptographic
calculations are based on the Ethereum-native secp256k1 elliptic curve
(see https://en.bitcoin.it/wiki/Secp256k1). For verification functions
based on the NIST P-256 elliptic curve (also known as secp256r1), see
the {p256} contract. The implementation is inspired by OpenZeppelin's
implementation here:
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/ECDSA.sol.
@custom:security Signatures must not be used as unique identifiers since the
`ecrecover` EVM precompile allows for malleable (non-unique)
signatures (see EIP-2: https://eips.ethereum.org/EIPS/eip-2)
or signatures can be malleablised using EIP-2098:
https://eips.ethereum.org/EIPS/eip-2098.
"""
# @dev The malleability threshold used as part of the ECDSA
# verification function.
_MALLEABILITY_THRESHOLD: constant(uint256) = (
57_896_044_618_658_097_711_785_492_504_343_953_926_418_782_139_537_452_191_302_581_570_759_080_747_168
)
@deploy
@payable
def __init__():
"""
@dev To omit the opcodes for checking the `msg.value`
in the creation-time EVM bytecode, the constructor
is declared as `payable`.
"""
pass
@internal
@pure
def _recover_sig(hash: bytes32, signature: Bytes[65]) -> address:
"""
@dev Recovers the signer address from a message digest `hash`
and the signature `signature`.
@notice WARNING: This function is vulnerable to a kind of
signature malleability due to accepting EIP-2098
compact signatures in addition to the traditional
65-byte signature format. The potentially affected
contracts are those that implement signature reuse
or replay protection by marking the signature itself
as used rather than the signed message or a nonce
included in it. A user may take a signature that has
already been submitted, submit it again in a different
form, and bypass this protection. Also, see OpenZeppelin's
security advisory for more information:
https://github.com/OpenZeppelin/openzeppelin-contracts/security/advisories/GHSA-4h98-2769-gh6h.
@param hash The 32-byte message digest that was signed.
@param signature The secp256k1 64/65-byte signature of `hash`.
@return address The recovered 20-byte signer address.
"""
sig_length: uint256 = len(signature)
# 65-byte case: `(r,s,v)` standard signature.
if sig_length == 65:
r: uint256 = extract32(signature, empty(uint256), output_type=uint256)
s: uint256 = extract32(signature, 32, output_type=uint256)
v: uint256 = convert(slice(signature, 64, 1), uint256)
return self._try_recover_vrs(hash, v, r, s)
# 64-byte case: `(r,vs)` signature; see: https://eips.ethereum.org/EIPS/eip-2098.
elif sig_length == 64:
r: uint256 = extract32(signature, empty(uint256), output_type=uint256)
vs: uint256 = extract32(signature, 32, output_type=uint256)
return self._try_recover_r_vs(hash, r, vs)
return empty(address)
@internal
@pure
def _recover_vrs(hash: bytes32, v: uint256, r: uint256, s: uint256) -> address:
"""
@dev Recovers the signer address from a message digest `hash`
and the secp256k1 signature parameters `v`, `r`, and `s`.
@param hash The 32-byte message digest that was signed.
@param v The secp256k1 1-byte signature parameter `v`.
@param r The secp256k1 32-byte signature parameter `r`.
@param s The secp256k1 32-byte signature parameter `s`.
@return address The recovered 20-byte signer address.
"""
return self._try_recover_vrs(hash, v, r, s)
@internal
@pure
def _try_recover_r_vs(hash: bytes32, r: uint256, vs: uint256) -> address:
"""
@dev Recovers the signer address from a message digest `hash`
and the secp256k1 short signature fields `r` and `vs`.
@notice See https://eips.ethereum.org/EIPS/eip-2098 for the
compact signature representation.
@param hash The 32-byte message digest that was signed.
@param r The secp256k1 32-byte signature parameter `r`.
@param vs The secp256k1 32-byte short signature field of `v` and `s`.
@return address The recovered 20-byte signer address.
"""
s: uint256 = vs & convert(max_value(int256), uint256)
# We do not check for an overflow here, as the shift operation
# `vs >> 255` results in `0` or `1`.
v: uint256 = unsafe_add(vs >> 255, 27)
return self._try_recover_vrs(hash, v, r, s)
@internal
@pure
def _try_recover_vrs(
hash: bytes32, v: uint256, r: uint256, s: uint256
) -> address:
"""
@dev Recovers the signer address from a message digest `hash`
and the secp256k1 signature parameters `v`, `r`, and `s`.
@notice All client implementations of the precompile `ecrecover`
check if the value of `v` is `27` or `28`. The references
for the different client implementations can be found here:
https://github.com/ethereum/yellowpaper/pull/860. Thus,
the signature check on the value of `v` is neglected.
@param hash The 32-byte message digest that was signed.
@param v The secp256k1 1-byte signature parameter `v`.
@param r The secp256k1 32-byte signature parameter `r`.
@param s The secp256k1 32-byte signature parameter `s`.
@return address The recovered 20-byte signer address.
"""
assert s <= _MALLEABILITY_THRESHOLD, "ecdsa: invalid signature `s` value"
signer: address = ecrecover(hash, v, r, s)
assert signer != empty(address), "ecdsa: invalid signature"
return signer# @version 0.4.0
"""
@title Signature Message Hash Utility Functions
@custom:contract-name message_hash_utils
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@notice These functions can be used to generate message hashes that conform
to the EIP-191 (https://eips.ethereum.org/EIPS/eip-191) as well as
EIP-712 (https://eips.ethereum.org/EIPS/eip-712) specifications. The
implementation is inspired by OpenZeppelin's implementation here:
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MessageHashUtils.sol.
"""
@deploy
@payable
def __init__():
"""
@dev To omit the opcodes for checking the `msg.value`
in the creation-time EVM bytecode, the constructor
is declared as `payable`.
"""
pass
@internal
@pure
def _to_eth_signed_message_hash(hash: bytes32) -> bytes32:
"""
@dev Returns an Ethereum signed message from a 32-byte
message digest `hash`.
@notice This function returns a 32-byte hash that
corresponds to the one signed with the JSON-RPC method:
https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sign.
This method is part of EIP-191:
https://eips.ethereum.org/EIPS/eip-191.
@param hash The 32-byte message digest.
@return bytes32 The 32-byte Ethereum signed message.
"""
return keccak256(concat(b"\x19Ethereum Signed Message:\n32", hash))
@internal
@view
def _to_data_with_intended_validator_hash_self(data: Bytes[1_024]) -> bytes32:
"""
@dev Returns an Ethereum signed data with this contract
as the intended validator and a maximum 1,024-byte
payload `data`.
@notice This function structures the data according to
the version `0x00` of EIP-191:
https://eips.ethereum.org/EIPS/eip-191#version-0x00.
@param data The maximum 1,024-byte data to be signed.
@return bytes32 The 32-byte Ethereum signed data.
"""
return self._to_data_with_intended_validator_hash(self, data)
@internal
@pure
def _to_data_with_intended_validator_hash(
validator: address, data: Bytes[1_024]
) -> bytes32:
"""
@dev Returns an Ethereum signed data with `validator` as
the intended validator and a maximum 1,024-byte payload
`data`.
@notice This function structures the data according to
the version `0x00` of EIP-191:
https://eips.ethereum.org/EIPS/eip-191#version-0x00.
@param validator The 20-byte intended validator address.
@param data The maximum 1,024-byte data to be signed.
@return bytes32 The 32-byte Ethereum signed data.
"""
return keccak256(concat(b"\x19\x00", convert(validator, bytes20), data))
@internal
@pure
def _to_typed_data_hash(
domain_separator: bytes32, struct_hash: bytes32
) -> bytes32:
"""
@dev Returns an Ethereum signed typed data from a 32-byte
`domain_separator` and a 32-byte `struct_hash`.
@notice This function returns a 32-byte hash that
corresponds to the one signed with the JSON-RPC method:
https://eips.ethereum.org/EIPS/eip-712#specification-of-the-eth_signtypeddata-json-rpc.
This method is part of EIP-712:
https://eips.ethereum.org/EIPS/eip-712.
@param domain_separator The 32-byte domain separator that is
used as part of the EIP-712 encoding scheme.
@param struct_hash The 32-byte struct hash that is used as
part of the EIP-712 encoding scheme. See the definition:
https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct.
@return bytes32 The 32-byte Ethereum signed typed data.
"""
return keccak256(concat(b"\x19\x01", domain_separator, struct_hash))# @version 0.4.0
"""
@title EIP-712 Domain Separator
@custom:contract-name eip712_domain_separator
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@notice These functions are part of EIP-712: https://eips.ethereum.org/EIPS/eip-712.
These functions implement the version of encoding known
as "v4" as implemented by the JSON-RPC method:
https://docs.metamask.io/guide/signing-data.html#sign-typed-data-v4.
In addition, this contract also implements EIP-5267:
https://eips.ethereum.org/EIPS/eip-5267.
The implementation is inspired by OpenZeppelin's implementation here:
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/EIP712.sol.
"""
# @dev We import and implement the `IERC5267` interface,
# which is written using standard Vyper syntax.
from ..interfaces import IERC5267
implements: IERC5267
# @dev We import the `message_hash_utils` module.
# @notice Please note that the `message_hash_utils`
# module is stateless and therefore does not require
# the `uses` keyword for usage.
from . import message_hash_utils
# @dev The 32-byte type hash for the EIP-712 domain separator.
_TYPE_HASH: constant(bytes32) = keccak256(
"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
)
# @dev Caches the domain separator as an `immutable`
# value, but also stores the corresponding chain ID
# to invalidate the cached domain separator if the
# chain ID changes.
_CACHED_DOMAIN_SEPARATOR: immutable(bytes32)
_CACHED_CHAIN_ID: immutable(uint256)
# @dev Caches `self` to `immutable` storage to avoid
# potential issues if a vanilla contract is used in
# a `delegatecall` context.
_CACHED_SELF: immutable(address)
# @dev `immutable` variables to store the (hashed)
# name and (hashed) version during contract creation.
_NAME: immutable(String[50])
_HASHED_NAME: immutable(bytes32)
_VERSION: immutable(String[20])
_HASHED_VERSION: immutable(bytes32)
@deploy
@payable
def __init__(name_: String[50], version_: String[20]):
"""
@dev Initialises the domain separator and the parameter caches.
To omit the opcodes for checking the `msg.value` in the
creation-time EVM bytecode, the constructor is declared as
`payable`.
@notice The definition of the domain separator can be found here:
https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator.
Since the Vyper design requires strings of fixed size,
we arbitrarily set the maximum length for `name` to 50
characters and `version` to 20 characters.
@param name_ The maximum 50-character user-readable string name
of the signing domain, i.e. the name of the dApp or protocol.
@param version_ The maximum 20-character current main version of
the signing domain. Signatures from different versions are
not compatible.
"""
_NAME = name_
_VERSION = version_
_HASHED_NAME = keccak256(name_)
_HASHED_VERSION = keccak256(version_)
_CACHED_DOMAIN_SEPARATOR = self._build_domain_separator()
_CACHED_CHAIN_ID = chain.id
_CACHED_SELF = self
@external
@view
def eip712Domain() -> (
bytes1,
String[50],
String[20],
uint256,
address,
bytes32,
DynArray[uint256, 32],
):
"""
@dev Returns the fields and values that describe the domain
separator used by this contract for EIP-712 signatures.
@notice The bits in the 1-byte bit map are read from the least
significant to the most significant, and fields are indexed
in the order that is specified by EIP-712, identical to the
order in which they are listed in the function type.
@return bytes1 The 1-byte bit map where bit `i` is set to `1`
if and only if domain field `i` is present (`0 ≤ i ≤ 4`).
@return String The maximum 50-character user-readable string name
of the signing domain, i.e. the name of the dApp or protocol.
@return String The maximum 20-character current main version of
the signing domain. Signatures from different versions are
not compatible.
@return uint256 The 32-byte EIP-155 chain ID.
@return address The 20-byte address of the verifying contract.
@return bytes32 The 32-byte disambiguation salt for the protocol.
@return DynArray The 32-byte array of EIP-712 extensions.
"""
# Note that `0x0f` equals `01111`.
return (
0x0f,
_NAME,
_VERSION,
chain.id,
self,
empty(bytes32),
empty(DynArray[uint256, 32]),
)
@internal
@view
def _domain_separator_v4() -> bytes32:
"""
@dev Returns the domain separator for the current chain.
@return bytes32 The 32-byte domain separator.
"""
if self == _CACHED_SELF and chain.id == _CACHED_CHAIN_ID:
return _CACHED_DOMAIN_SEPARATOR
return self._build_domain_separator()
@internal
@view
def _build_domain_separator() -> bytes32:
"""
@dev Builds the domain separator for the current chain.
@return bytes32 The 32-byte domain separator.
"""
return keccak256(
abi_encode(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION, chain.id, self)
)
@internal
@view
def _hash_typed_data_v4(struct_hash: bytes32) -> bytes32:
"""
@dev Returns the hash of the fully encoded EIP-712
message for this domain.
@notice The definition of the hashed struct can be found here:
https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct.
@param struct_hash The 32-byte hashed struct.
@return bytes32 The 32-byte fully encoded EIP712
message hash for this domain.
"""
return message_hash_utils._to_typed_data_hash(
self._domain_separator_v4(), struct_hash
){
"outputSelection": {
"contracts/AuctionNFT.vy": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
},
"search_paths": [
"."
]
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"name":"minter","type":"address"},{"indexed":false,"name":"status","type":"bool"}],"name":"RoleMinterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previous_owner","type":"address"},{"indexed":true,"name":"new_owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"token_id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":true,"name":"receiver","type":"address"},{"indexed":true,"name":"token_id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"name":"","type":"bytes1"},{"name":"","type":"string"},{"name":"","type":"string"},{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"bytes32"},{"name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"interface_id","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"token_id","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"to","type":"address"},{"name":"token_id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"name":"token_id","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"operator","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"owner","type":"address"},{"name":"to","type":"address"},{"name":"token_id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"name":"owner","type":"address"},{"name":"to","type":"address"},{"name":"token_id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"name":"owner","type":"address"},{"name":"to","type":"address"},{"name":"token_id","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"name":"token_id","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"token_id","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"owner","type":"address"},{"name":"contract_address","type":"address"},{"name":"auction_id","type":"uint256"}],"name":"safe_mint","outputs":[{"name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"new_uri","type":"string"}],"name":"set_base_uri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"minter","type":"address"},{"name":"status","type":"bool"}],"name":"set_minter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"spender","type":"address"},{"name":"token_id","type":"uint256"},{"name":"deadline","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"auction_house","type":"address"},{"name":"auction_id","type":"uint256"}],"name":"auction_to_token","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"new_owner","type":"address"}],"name":"transfer_ownership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounce_ownership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"token_addr","type":"address"},{"name":"amount","type":"uint256"}],"name":"recover_erc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"base_uri","outputs":[{"name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"address"}],"name":"is_minter","outputs":[{"name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"uint256"}],"name":"nonces","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"uint256"}],"name":"token_to_auction","outputs":[{"components":[{"name":"contract_address","type":"address"},{"name":"auction_id","type":"uint256"}],"name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"name_","type":"string"},{"name":"symbol_","type":"string"},{"name":"base_uri_","type":"string"},{"name":"name_eip712_","type":"string"},{"name":"version_eip712_","type":"string"}],"outputs":[],"stateMutability":"payable","type":"constructor"}]Contract Creation Code
612c7f51506020612e145f395f51602081612e14015f395f516019811161031a57506020602082612e14015f395f51018082612e14016101c03950506020612e345f395f51602081612e14015f395f516005811161031a57506020602082612e14015f395f51018082612e14016102003950506020612e545f395f51602081612e14015f395f516050811161031a57506020602082612e14015f395f51018082612e14016102403950506020612e745f395f51602081612e14015f395f516032811161031a57506020602082612e14015f395f51018082612e14016102c03950506020612e945f395f51602081612e14015f395f516014811161031a57506020602082612e14015f395f51018082612e14016103203950505f6801000000000000000f5561012b610234565b6101c051612c1f526101e051612c3f5261020051612c5f5261022051612c7f52602061024051015f81601f0160051c6004811161031a57801561018357905b8060051b6102400151816001015560010181811861016a575b50505060016006336020525f5260405f2055337fbb6e183664bd7425a9e444072cb0f1c7f7c4d5486a36d7d24d0b0735687c2ef46001610360526020610360a260206102c05101806102c06101005e5060206103205101806103206101605e506101eb610291565b612adf61031e61000039612c9f610000f35b5f546060526040515f556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f6080a3565b336040526102406101fd565b565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f606052612b9f51608052612bff5160a0524660c0523060e05260a06040526040805160208201209050815250565b602061010051015f81601f0160051c6003811161031a5780156102d057905b8060051b61010001518160051b606001612adf01526001018181186102b0575b50505061016051612bbf5261018051612bdf526101005161012020612b9f526101605161018020612bff526103066101a0610242565b6101a051612adf5246612aff5230612b1f52565b5f80fd5f3560e01c6002601c820660011b612aa701601e395f51565b638da5cb5b81186117605734612aa3575f5460405260206040f35b6384b0196e811861013e5734612aa35760e07f0f00000000000000000000000000000000000000000000000000000000000000604052806060528060400160206020612b3f5f395f510180612b3f8339508051806020830101601f825f03163682375050601f19601f82516020010116905081019050806080528060400160206020612bbf5f395f510180612bbf8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190504660a0523060c0525f60e0528061010052806040015f5f82525f5f5f60208111612aa357801561012b57905b5f8160051b602087010152600101818118610115575b5050810160200190509050810190506040f35b639f0fa61e811861176057604436103417612aa3576004358060a01c612aa3576040525f6060525f600d5467ffffffffffffffff8111612aa35780156101eb57905b80600e01546080526040516801000000000000000e6080516020525f5260405f2054186101ce576024356801000000000000000e6080516020525f5260405f206001810190505418156101d0565b5f5b156101e0576080516060526101eb565b600101818118610180575b505060206060f35b6301ffc9a7811861032f57602436103417612aa3576004358060201b612aa3576040526040517f01ffc9a7000000000000000000000000000000000000000000000000000000008118610247576001610324565b7f80ac58cd000000000000000000000000000000000000000000000000000000008118610275576001610324565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081186102a3576001610324565b7f780e9d630000000000000000000000000000000000000000000000000000000081186102d1576001610324565b7f589c5ce20000000000000000000000000000000000000000000000000000000081186102ff576001610324565b7f49064906000000000000000000000000000000000000000000000000000000008118155b905060805260206080f35b634f6ccce7811861176057602436103417612aa35761034e6040612302565b604051600435106103f35760208060e05260226060527f6572633732313a20676c6f62616c20696e646578206f7574206f6620626f756e6080527f647300000000000000000000000000000000000000000000000000000000000060a05260608160e00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060c0528060040160dcfd5b600435600d54811015612aa357600e015460405260206040f35b6370a08231811861044a57602436103417612aa3576004358060a01c612aa35761016052602061016051604052610445610180611764565b610180f35b63a22cb465811861049357604436103417612aa3576004358060a01c612aa357610160526024358060011c612aa3576101805233604052604061016060605e6104916119d5565b005b633644e51581186117605734612aa35760206104b061012061285c565b610120f35b636352211e811861176057602436103417612aa35760206004356040526104dd610140611819565b610140f35b63095ea7b381186106bb576043361115612aa3576004358060a01c612aa3576101a0526024356040526105166101e0611819565b6101e0516101c0526101c0516101a051186105cd576020806102605260216101e0527f6572633732313a20617070726f76616c20746f2063757272656e74206f776e65610200527f7200000000000000000000000000000000000000000000000000000000000000610220526101e0816102600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610240528060040161025cfd5b6101c05133186105de5760016105fc565b60056101c0516020525f5260405f2080336020525f5260405f209050545b6106a25760208061026052603d6101e0527f6572633732313a20617070726f76652063616c6c6572206973206e6f7420746f610200527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000610220526101e0816102600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610240528060040161025cfd5b6101a05161014052602435610160526106b96118b0565b005b637ac2ff7b81186117605760c436103417612aa3576004358060a01c612aa357610260526064358060081c612aa35761028052604435421115610775576020806103005260186102a0527f6572633732313a206578706972656420646561646c696e6500000000000000006102c0526102a0816103000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a06102e052806004016102fcfd5b60076024356020525f5260405f20546102a05260016102a0510160076024356020525f5260405f20557f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad610300526102605161032052602435610340526102a051610360526044356103805260a06102e0526102e08051602082012090506102c0526102c0516101605261080a6103006128a5565b610300516102e0526102e0516101c052610280516101e0526084356102005260a4356102205261083b610320612a50565b6103205161030052602435604052610854610320611819565b610320516103005118156108df576020806103a0526019610340527f6572633732313a20696e76616c6964207369676e61747572650000000000000061036052610340816103a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610380528060040161039cfd5b6102605161014052602435610160526108f66118b0565b005b63081812fc811861092657602436103417612aa3576020600435610160526109216101806119b1565b610180f35b63141a468c811861176057602436103417612aa35760076004356020525f5260405f205460405260206040f35b6323b872dd8118610a60576063361115612aa3576004358060a01c612aa3576103e0526024358060a01c612aa3576104005233610180526044356101a05261099c610420611aad565b61042051610a46576020806104c052602d610440527f6572633732313a2063616c6c6572206973206e6f7420746f6b656e206f776e65610460527f72206f7220617070726f7665640000000000000000000000000000000000000061048052610440816104c00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a06104a052806004016104bcfd5b60406103e06102605e6044356102a052610a5e611da3565b005b63af1c5211811861176057602436103417612aa357600435600401803560508111612aa3575060208135018082610100375050610a9b612715565b602061010051015f81601f0160051c60048111612aa3578015610ad357905b8060051b61010001518160010155600101818118610aba575b505050005b6342842e0e8118610af6576063361115612aa3575f610fa052610b2a565b63b88d4fde8118610c33576083361115612aa35760643560040180356104008111612aa3575060208135018082610fa03750505b6004358060a01c612aa357610f60526024358060a01c612aa357610f805233610180526044356101a052610b5f6113e0611aad565b6113e051610c095760208061148052602d611400527f6572633732313a2063616c6c6572206973206e6f7420746f6b656e206f776e65611420527f72206f7220617070726f7665640000000000000000000000000000000000000061144052611400816114800160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0611460528060040161147cfd5b6040610f606109c05e604435610a00526020610fa0510180610fa0610a205e50610c31612223565b005b632ff7cece811861176057602436103417612aa3576801000000000000000e6004356020525f5260405f20805460405260018101546060525060406040f35b63c87b56dd811861176057602436103417612aa357600435606052610c95611920565b6020806102c0525f60015481610200015f82601f0160051c60038111612aa3578015610cd457905b80600201548160051b840152600101818118610cbd575b50505080820191505060043580610cf957603061016152600161016052610160610d38565b5f604f905b82610d165780816101ae0352806101ae039250610d34565b600a8306603001816101ae0352600a83049250600101818118610cfe575b5050805b905080516020820183610200018282825e505080830192505050806101e0526101e09050816102c00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506102c0f35b6318160ddd81186117605734612aa3576020610db36040612302565b6040f35b632f745c59811861176057604436103417612aa3576004358060a01c612aa3576101605261016051604052610ded610180611764565b6101805160243510610e9b576020806102205260216101a0527f6572633732313a206f776e657220696e646578206f7574206f6620626f756e646101c0527f73000000000000000000000000000000000000000000000000000000000000006101e0526101a0816102200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610200528060040161021cfd5b600b610160516020525f5260405f20806024356020525f5260405f20905054610180526020610180f35b6342966c688118610fac57602436103417612aa35733610180526004356101a052610ef16102c0611aad565b6102c051610f9b5760208061036052602d6102e0527f6572633732313a2063616c6c6572206973206e6f7420746f6b656e206f776e65610300527f72206f7220617070726f76656400000000000000000000000000000000000000610320526102e0816103600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610340528060040161035cfd5b60043561026052610faa61230a565b005b63f0350c04811861176057602436103417612aa3576004358060a01c612aa35761010052610fd8612715565b61010051611082576020806101a0526025610120527f6572633732313a206e6577206f776e657220697320746865207a65726f206164610140527f647265737300000000000000000000000000000000000000000000000000000061016052610120816101a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610180528060040161019cfd5b5f6006336020525f5260405f2055337fbb6e183664bd7425a9e444072cb0f1c7f7c4d5486a36d7d24d0b0735687c2ef45f610120526020610120a2610100516040526110cc612a6c565b60016006610100516020525f5260405f2055610100517fbb6e183664bd7425a9e444072cb0f1c7f7c4d5486a36d7d24d0b0735687c2ef46001610120526020610120a2005b63cbcc5814811861176057606436103417612aa3576004358060a01c612aa357610f40526024358060a01c612aa357610f60526006336020525f5260405f20546111d257602080610fe0526018610f80527f6572633732313a206163636573732069732064656e6965640000000000000000610fa052610f8081610fe00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610fc05280600401610fdcfd5b6801000000000000000f5460018101818110612aa3579050610f8052610f80516801000000000000000f55610f40516109c052610f80516109e0525f610a005261121a612632565b6801000000000000000e610f80516020525f5260405f20610f605181556044356001820155507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7610f8051610fa0526020610fa0a16020610f80f35b637c3bec3c811861176057604436103417612aa3576004358060a01c612aa357610100526024358060011c612aa357610120526112b1612715565b6101005161135b576020806101c0526022610140527f6572633732313a206d696e74657220697320746865207a65726f206164647265610160527f737300000000000000000000000000000000000000000000000000000000000061018052610140816101c00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a06101a052806004016101bcfd5b3361010051186113e2576020806101a052601f610140527f6572633732313a206d696e746572206973206f776e657220616464726573730061016052610140816101a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610180528060040161019cfd5b610120516006610100516020525f5260405f2055610100517fbb6e183664bd7425a9e444072cb0f1c7f7c4d5486a36d7d24d0b0735687c2ef461012051610140526020610140a2005b63b15e13ee81186117605734612aa357611443612715565b5f6006336020525f5260405f2055337fbb6e183664bd7425a9e444072cb0f1c7f7c4d5486a36d7d24d0b0735687c2ef45f610100526020610100a25f60405261148a612a6c565b005b6323a50d3c811861176057604436103417612aa3576004358060a01c612aa357610100526114b8612715565b61010051610120526101205163a9059cbb610140525f5461016052602435610180526020610140604461015c5f855af16114f4573d5f5f3e3d5ffd5b3d602081183d6020100218806101400161016011612aa357610140518060011c612aa3576101a052506101a09050516115a45760208061022052600f6101c0527f7472616e73666572206661696c656400000000000000000000000000000000006101e0526101c0816102200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610200528060040161021cfd5b005b6306fdde0381186117605734612aa3576020806040528060400160206020612c1f5f395f510180612c1f8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186116525734612aa3576020806040528060400160206020612c5f5f395f510180612c5f8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f35b6392c94f65811861176057602436103417612aa3576004358060a01c612aa35760405260066040516020525f5260405f205460605260206060f35b63786f291081186117605734612aa357602080604052806040016020600154015f81601f0160051c60048111612aa35780156116dc57905b80600101548160051b8501526001018181186116c5575b5050508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f35b63e985e9c5811861176057604436103417612aa3576004358060a01c612aa3576040526024358060a01c612aa35760605260056040516020525f5260405f20806060516020525f5260405f2090505460805260206080f35b5f5ffd5b6040516118055760208060e052602d6060527f6572633732313a20746865207a65726f2061646472657373206973206e6f74206080527f612076616c6964206f776e65720000000000000000000000000000000000000060a05260608160e00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060c0528060040160dcfd5b60086040516020525f5260405f2054815250565b60096040516020525f5260405f20546060526060516118a85760208060e05260186080527f6572633732313a20696e76616c696420746f6b656e204944000000000000000060a05260808160e00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060c0528060040160dcfd5b606051815250565b61014051600a610160516020525f5260405f20556101605161014051610160516040526118de610180611819565b610180517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f6101a0a4565b60096040516020525f5260405f20541515815250565b606051604052611930608061190a565b6080516119af5760208061010052601860a0527f6572633732313a20696e76616c696420746f6b656e204944000000000000000060c05260a0816101000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b565b610160516060526119c0611920565b600a610160516020525f5260405f2054815250565b60605160405118611a585760208061010052601960a0527f6572633732313a20617070726f766520746f2063616c6c65720000000000000060c05260a0816101000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b60805160056040516020525f5260405f20806060516020525f5260405f209050556060516040517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160805160a052602060a0a3565b6101a051604052611abf6101e0611819565b6101e0516101c0526101c0516101805118611adb576001611b24565b60056101c0516020525f5260405f2080610180516020525f5260405f20905054611b2157610180516101a05161016052611b166101e06119b1565b6101e0511815611b24565b60015b815250565b600d546801000000000000000d6040516020525f5260405f2055600d5467fffffffffffffffe8111612aa35760405181600e015560018101600d5550565b61016051604052611b796101c0611764565b6101c05160018103818111612aa35790506101a052600c610180516020525f5260405f20546101c0526101a0516101c05114611c0c57600b610160516020525f5260405f20806101a0516020525f5260405f209050546101e0526101e051600b610160516020525f5260405f20806101c0516020525f5260405f209050556101c051600c6101e0516020525f5260405f20555b5f600c610180516020525f5260405f20555f600b610160516020525f5260405f20806101a0516020525f5260405f20905055565b600d5460018103818111612aa35790506060526801000000000000000d6040516020525f5260405f2054608052606051600d54811015612aa357600e015460a05260a051608051600d54811015612aa357600e01556080516801000000000000000d60a0516020525f5260405f20555f6801000000000000000d6040516020525f5260405f20556001600d548015612aa3570380600d5550565b61016051604052611cec6101c0611764565b6101c0516101a05261018051600b610160516020525f5260405f20806101a0516020525f5260405f209050556101a051600c610180516020525f5260405f2055565b61020051611d455761024051604052611d6a611b29565b610220516102005114611d6a5761020051610160526102405161018052611d6a611b67565b61022051611d815761024051604052611d9f611c40565b610200516102205114611d9f5760406102206101605e611d9f611cda565b565b565b610260516102a051604052611db96102c0611819565b6102c0511815611e65576020806103605260256102e0527f6572633732313a207472616e736665722066726f6d20696e636f727265637420610300527f6f776e6572000000000000000000000000000000000000000000000000000000610320526102e0816103600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610340528060040161035cfd5b61028051611f0f576020806103405260246102c0527f6572633732313a207472616e7366657220746f20746865207a65726f206164646102e0527f7265737300000000000000000000000000000000000000000000000000000000610300526102c0816103400160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610320528060040161033cfd5b60606102606102005e611f20611d2e565b610260516102a051604052611f366102c0611819565b6102c0511815611fe2576020806103605260256102e0527f6572633732313a207472616e736665722066726f6d20696e636f727265637420610300527f6f776e6572000000000000000000000000000000000000000000000000000000610320526102e0816103600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610340528060040161035cfd5b5f600a6102a0516020525f5260405f205560016008610260516020525f5260405f2054036008610260516020525f5260405f205560016008610280516020525f5260405f2054016008610280516020525f5260405f20556102805160096102a0516020525f5260405f20556102a05161028051610260517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f6102c0a4606061026060405e61208f611da1565b565b6060513b1561221b5760605163150b7a026104e05260803361050052604051610520526080516105405280610560528061050001602060a051018060a0835e508051806020830101601f825f03163682375050601f19601f8251602001011690508101505060206104e06104a46104fc5f855af1612111573d5f5f3e3d5ffd5b3d602081183d6020100218806104e00161050011612aa3576104e0518060201b612aa3576109a052506109a09050516104c0527f150b7a02000000000000000000000000000000000000000000000000000000006104c0511815612211576020806105605260336104e0527f6572633732313a207472616e7366657220746f206e6f6e2d4945524337323152610500527f6563656976657220696d706c656d656e74657200000000000000000000000000610520526104e0816105600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610540528060040161055cfd5b6001815250612221565b60018152505b565b60606109c06102605e612234611da3565b60606109c060405e6020610a20510180610a2060a05e50612256610e40612091565b610e405161230057602080610ee0526033610e60527f6572633732313a207472616e7366657220746f206e6f6e2d4945524337323152610e80527f6563656976657220696d706c656d656e74657200000000000000000000000000610ea052610e6081610ee00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610ec05280600401610edcfd5b565b600d54815250565b6102605160405261231c6102a0611819565b6102a0516102805261028051610200525f610220526102605161024052612341611d2e565b610260516040526123536102a0611819565b6102a051610280525f600a610260516020525f5260405f205560016008610280516020525f5260405f2054036008610280516020525f5260405f20555f6009610260516020525f5260405f2055610260515f610280517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f6102a0a4610280516040525f606052610260516080526123e9611da1565b565b61026051612470576020806103005260206102a0527f6572633732313a206d696e7420746f20746865207a65726f20616464726573736102c0526102a0816103000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a06102e052806004016102fcfd5b610280516040526124826102a061190a565b6102a051156125085760208061032052601c6102c0527f6572633732313a20746f6b656e20616c7265616479206d696e746564000000006102e0526102c0816103200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610300528060040161031cfd5b5f6102005260406102606102205e61251e611d2e565b610280516040526125306102a061190a565b6102a051156125b65760208061032052601c6102c0527f6572633732313a20746f6b656e20616c7265616479206d696e746564000000006102e0526102c0816103200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610300528060040161031cfd5b60016008610260516020525f5260405f2054016008610260516020525f5260405f2055610260516009610280516020525f5260405f205561028051610260515f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f6102a0a45f604052604061026060605e612630611da1565b565b60406109c06102605e6126436123eb565b5f60405260406109c060605e6020610a00510180610a0060a05e50612669610e20612091565b610e205161271357602080610ec0526033610e40527f6572633732313a207472616e7366657220746f206e6f6e2d4945524337323152610e60527f6563656976657220696d706c656d656e74657200000000000000000000000000610e8052610e4081610ec00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610ea05280600401610ebcfd5b565b5f543318156127945760208060a05260206040527f6f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260605260408160a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060805280600401609cfd5b565b5f60026080527f190100000000000000000000000000000000000000000000000000000000000060a05260808051602082018360e001815181525050808301925050506040518160e001526020810190506060518160e001526020810190508060c05260c09050805160208201209050815250565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6060526020612b9f6080396020612bff60a0394660c0523060e05260a06040526040805160208201209050815250565b6020612b1f5f395f51301861287c576020612aff5f395f5146181561287e565b5f5b15612890576020612adf8239506128a3565b61289b61010061280b565b610100518152505b565b6128b061018061285c565b610180516101c052610160516101e05260406101c060405e6128d36101a0612796565b6101a051815250565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a060a05111156129a55760208061014052602260c0527f65636473613a20696e76616c6964207369676e6174757265206073602076616c60e0527f75650000000000000000000000000000000000000000000000000000000000006101005260c0816101400160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610120528060040161013cfd5b5f610160526080604060e05e6020610160608060e060015afa506101605160c05260c051612a485760208061014052601860e0527f65636473613a20696e76616c6964207369676e617475726500000000000000006101005260e0816101400160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610120528060040161013cfd5b60c051815250565b60806101c060405e612a636102406128dc565b61024051815250565b5f546060526040515f556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f6080a3565b5f80fd12760db7176015a6168d0d9717601760148c09530ad81760176015fc142b04e208f80c72176001f30ec5040d003300181111170804b5176084192adf8118381901c0a165767970657283000400001700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000154c657669617468616e2041756374696f6e204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000055351554944000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6170692e6c657669617468616e6e6577732e78797a2f6170692f76312f696d6167652f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000154c657669617468616e2041756374696f6e204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x5f3560e01c6002601c820660011b612aa701601e395f51565b638da5cb5b81186117605734612aa3575f5460405260206040f35b6384b0196e811861013e5734612aa35760e07f0f00000000000000000000000000000000000000000000000000000000000000604052806060528060400160206020612b3f5f395f510180612b3f8339508051806020830101601f825f03163682375050601f19601f82516020010116905081019050806080528060400160206020612bbf5f395f510180612bbf8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190504660a0523060c0525f60e0528061010052806040015f5f82525f5f5f60208111612aa357801561012b57905b5f8160051b602087010152600101818118610115575b5050810160200190509050810190506040f35b639f0fa61e811861176057604436103417612aa3576004358060a01c612aa3576040525f6060525f600d5467ffffffffffffffff8111612aa35780156101eb57905b80600e01546080526040516801000000000000000e6080516020525f5260405f2054186101ce576024356801000000000000000e6080516020525f5260405f206001810190505418156101d0565b5f5b156101e0576080516060526101eb565b600101818118610180575b505060206060f35b6301ffc9a7811861032f57602436103417612aa3576004358060201b612aa3576040526040517f01ffc9a7000000000000000000000000000000000000000000000000000000008118610247576001610324565b7f80ac58cd000000000000000000000000000000000000000000000000000000008118610275576001610324565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081186102a3576001610324565b7f780e9d630000000000000000000000000000000000000000000000000000000081186102d1576001610324565b7f589c5ce20000000000000000000000000000000000000000000000000000000081186102ff576001610324565b7f49064906000000000000000000000000000000000000000000000000000000008118155b905060805260206080f35b634f6ccce7811861176057602436103417612aa35761034e6040612302565b604051600435106103f35760208060e05260226060527f6572633732313a20676c6f62616c20696e646578206f7574206f6620626f756e6080527f647300000000000000000000000000000000000000000000000000000000000060a05260608160e00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060c0528060040160dcfd5b600435600d54811015612aa357600e015460405260206040f35b6370a08231811861044a57602436103417612aa3576004358060a01c612aa35761016052602061016051604052610445610180611764565b610180f35b63a22cb465811861049357604436103417612aa3576004358060a01c612aa357610160526024358060011c612aa3576101805233604052604061016060605e6104916119d5565b005b633644e51581186117605734612aa35760206104b061012061285c565b610120f35b636352211e811861176057602436103417612aa35760206004356040526104dd610140611819565b610140f35b63095ea7b381186106bb576043361115612aa3576004358060a01c612aa3576101a0526024356040526105166101e0611819565b6101e0516101c0526101c0516101a051186105cd576020806102605260216101e0527f6572633732313a20617070726f76616c20746f2063757272656e74206f776e65610200527f7200000000000000000000000000000000000000000000000000000000000000610220526101e0816102600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610240528060040161025cfd5b6101c05133186105de5760016105fc565b60056101c0516020525f5260405f2080336020525f5260405f209050545b6106a25760208061026052603d6101e0527f6572633732313a20617070726f76652063616c6c6572206973206e6f7420746f610200527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000610220526101e0816102600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610240528060040161025cfd5b6101a05161014052602435610160526106b96118b0565b005b637ac2ff7b81186117605760c436103417612aa3576004358060a01c612aa357610260526064358060081c612aa35761028052604435421115610775576020806103005260186102a0527f6572633732313a206578706972656420646561646c696e6500000000000000006102c0526102a0816103000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a06102e052806004016102fcfd5b60076024356020525f5260405f20546102a05260016102a0510160076024356020525f5260405f20557f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad610300526102605161032052602435610340526102a051610360526044356103805260a06102e0526102e08051602082012090506102c0526102c0516101605261080a6103006128a5565b610300516102e0526102e0516101c052610280516101e0526084356102005260a4356102205261083b610320612a50565b6103205161030052602435604052610854610320611819565b610320516103005118156108df576020806103a0526019610340527f6572633732313a20696e76616c6964207369676e61747572650000000000000061036052610340816103a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610380528060040161039cfd5b6102605161014052602435610160526108f66118b0565b005b63081812fc811861092657602436103417612aa3576020600435610160526109216101806119b1565b610180f35b63141a468c811861176057602436103417612aa35760076004356020525f5260405f205460405260206040f35b6323b872dd8118610a60576063361115612aa3576004358060a01c612aa3576103e0526024358060a01c612aa3576104005233610180526044356101a05261099c610420611aad565b61042051610a46576020806104c052602d610440527f6572633732313a2063616c6c6572206973206e6f7420746f6b656e206f776e65610460527f72206f7220617070726f7665640000000000000000000000000000000000000061048052610440816104c00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a06104a052806004016104bcfd5b60406103e06102605e6044356102a052610a5e611da3565b005b63af1c5211811861176057602436103417612aa357600435600401803560508111612aa3575060208135018082610100375050610a9b612715565b602061010051015f81601f0160051c60048111612aa3578015610ad357905b8060051b61010001518160010155600101818118610aba575b505050005b6342842e0e8118610af6576063361115612aa3575f610fa052610b2a565b63b88d4fde8118610c33576083361115612aa35760643560040180356104008111612aa3575060208135018082610fa03750505b6004358060a01c612aa357610f60526024358060a01c612aa357610f805233610180526044356101a052610b5f6113e0611aad565b6113e051610c095760208061148052602d611400527f6572633732313a2063616c6c6572206973206e6f7420746f6b656e206f776e65611420527f72206f7220617070726f7665640000000000000000000000000000000000000061144052611400816114800160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0611460528060040161147cfd5b6040610f606109c05e604435610a00526020610fa0510180610fa0610a205e50610c31612223565b005b632ff7cece811861176057602436103417612aa3576801000000000000000e6004356020525f5260405f20805460405260018101546060525060406040f35b63c87b56dd811861176057602436103417612aa357600435606052610c95611920565b6020806102c0525f60015481610200015f82601f0160051c60038111612aa3578015610cd457905b80600201548160051b840152600101818118610cbd575b50505080820191505060043580610cf957603061016152600161016052610160610d38565b5f604f905b82610d165780816101ae0352806101ae039250610d34565b600a8306603001816101ae0352600a83049250600101818118610cfe575b5050805b905080516020820183610200018282825e505080830192505050806101e0526101e09050816102c00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506102c0f35b6318160ddd81186117605734612aa3576020610db36040612302565b6040f35b632f745c59811861176057604436103417612aa3576004358060a01c612aa3576101605261016051604052610ded610180611764565b6101805160243510610e9b576020806102205260216101a0527f6572633732313a206f776e657220696e646578206f7574206f6620626f756e646101c0527f73000000000000000000000000000000000000000000000000000000000000006101e0526101a0816102200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610200528060040161021cfd5b600b610160516020525f5260405f20806024356020525f5260405f20905054610180526020610180f35b6342966c688118610fac57602436103417612aa35733610180526004356101a052610ef16102c0611aad565b6102c051610f9b5760208061036052602d6102e0527f6572633732313a2063616c6c6572206973206e6f7420746f6b656e206f776e65610300527f72206f7220617070726f76656400000000000000000000000000000000000000610320526102e0816103600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610340528060040161035cfd5b60043561026052610faa61230a565b005b63f0350c04811861176057602436103417612aa3576004358060a01c612aa35761010052610fd8612715565b61010051611082576020806101a0526025610120527f6572633732313a206e6577206f776e657220697320746865207a65726f206164610140527f647265737300000000000000000000000000000000000000000000000000000061016052610120816101a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610180528060040161019cfd5b5f6006336020525f5260405f2055337fbb6e183664bd7425a9e444072cb0f1c7f7c4d5486a36d7d24d0b0735687c2ef45f610120526020610120a2610100516040526110cc612a6c565b60016006610100516020525f5260405f2055610100517fbb6e183664bd7425a9e444072cb0f1c7f7c4d5486a36d7d24d0b0735687c2ef46001610120526020610120a2005b63cbcc5814811861176057606436103417612aa3576004358060a01c612aa357610f40526024358060a01c612aa357610f60526006336020525f5260405f20546111d257602080610fe0526018610f80527f6572633732313a206163636573732069732064656e6965640000000000000000610fa052610f8081610fe00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610fc05280600401610fdcfd5b6801000000000000000f5460018101818110612aa3579050610f8052610f80516801000000000000000f55610f40516109c052610f80516109e0525f610a005261121a612632565b6801000000000000000e610f80516020525f5260405f20610f605181556044356001820155507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7610f8051610fa0526020610fa0a16020610f80f35b637c3bec3c811861176057604436103417612aa3576004358060a01c612aa357610100526024358060011c612aa357610120526112b1612715565b6101005161135b576020806101c0526022610140527f6572633732313a206d696e74657220697320746865207a65726f206164647265610160527f737300000000000000000000000000000000000000000000000000000000000061018052610140816101c00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a06101a052806004016101bcfd5b3361010051186113e2576020806101a052601f610140527f6572633732313a206d696e746572206973206f776e657220616464726573730061016052610140816101a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610180528060040161019cfd5b610120516006610100516020525f5260405f2055610100517fbb6e183664bd7425a9e444072cb0f1c7f7c4d5486a36d7d24d0b0735687c2ef461012051610140526020610140a2005b63b15e13ee81186117605734612aa357611443612715565b5f6006336020525f5260405f2055337fbb6e183664bd7425a9e444072cb0f1c7f7c4d5486a36d7d24d0b0735687c2ef45f610100526020610100a25f60405261148a612a6c565b005b6323a50d3c811861176057604436103417612aa3576004358060a01c612aa357610100526114b8612715565b61010051610120526101205163a9059cbb610140525f5461016052602435610180526020610140604461015c5f855af16114f4573d5f5f3e3d5ffd5b3d602081183d6020100218806101400161016011612aa357610140518060011c612aa3576101a052506101a09050516115a45760208061022052600f6101c0527f7472616e73666572206661696c656400000000000000000000000000000000006101e0526101c0816102200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610200528060040161021cfd5b005b6306fdde0381186117605734612aa3576020806040528060400160206020612c1f5f395f510180612c1f8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186116525734612aa3576020806040528060400160206020612c5f5f395f510180612c5f8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f35b6392c94f65811861176057602436103417612aa3576004358060a01c612aa35760405260066040516020525f5260405f205460605260206060f35b63786f291081186117605734612aa357602080604052806040016020600154015f81601f0160051c60048111612aa35780156116dc57905b80600101548160051b8501526001018181186116c5575b5050508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f35b63e985e9c5811861176057604436103417612aa3576004358060a01c612aa3576040526024358060a01c612aa35760605260056040516020525f5260405f20806060516020525f5260405f2090505460805260206080f35b5f5ffd5b6040516118055760208060e052602d6060527f6572633732313a20746865207a65726f2061646472657373206973206e6f74206080527f612076616c6964206f776e65720000000000000000000000000000000000000060a05260608160e00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060c0528060040160dcfd5b60086040516020525f5260405f2054815250565b60096040516020525f5260405f20546060526060516118a85760208060e05260186080527f6572633732313a20696e76616c696420746f6b656e204944000000000000000060a05260808160e00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060c0528060040160dcfd5b606051815250565b61014051600a610160516020525f5260405f20556101605161014051610160516040526118de610180611819565b610180517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f6101a0a4565b60096040516020525f5260405f20541515815250565b606051604052611930608061190a565b6080516119af5760208061010052601860a0527f6572633732313a20696e76616c696420746f6b656e204944000000000000000060c05260a0816101000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b565b610160516060526119c0611920565b600a610160516020525f5260405f2054815250565b60605160405118611a585760208061010052601960a0527f6572633732313a20617070726f766520746f2063616c6c65720000000000000060c05260a0816101000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b60805160056040516020525f5260405f20806060516020525f5260405f209050556060516040517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160805160a052602060a0a3565b6101a051604052611abf6101e0611819565b6101e0516101c0526101c0516101805118611adb576001611b24565b60056101c0516020525f5260405f2080610180516020525f5260405f20905054611b2157610180516101a05161016052611b166101e06119b1565b6101e0511815611b24565b60015b815250565b600d546801000000000000000d6040516020525f5260405f2055600d5467fffffffffffffffe8111612aa35760405181600e015560018101600d5550565b61016051604052611b796101c0611764565b6101c05160018103818111612aa35790506101a052600c610180516020525f5260405f20546101c0526101a0516101c05114611c0c57600b610160516020525f5260405f20806101a0516020525f5260405f209050546101e0526101e051600b610160516020525f5260405f20806101c0516020525f5260405f209050556101c051600c6101e0516020525f5260405f20555b5f600c610180516020525f5260405f20555f600b610160516020525f5260405f20806101a0516020525f5260405f20905055565b600d5460018103818111612aa35790506060526801000000000000000d6040516020525f5260405f2054608052606051600d54811015612aa357600e015460a05260a051608051600d54811015612aa357600e01556080516801000000000000000d60a0516020525f5260405f20555f6801000000000000000d6040516020525f5260405f20556001600d548015612aa3570380600d5550565b61016051604052611cec6101c0611764565b6101c0516101a05261018051600b610160516020525f5260405f20806101a0516020525f5260405f209050556101a051600c610180516020525f5260405f2055565b61020051611d455761024051604052611d6a611b29565b610220516102005114611d6a5761020051610160526102405161018052611d6a611b67565b61022051611d815761024051604052611d9f611c40565b610200516102205114611d9f5760406102206101605e611d9f611cda565b565b565b610260516102a051604052611db96102c0611819565b6102c0511815611e65576020806103605260256102e0527f6572633732313a207472616e736665722066726f6d20696e636f727265637420610300527f6f776e6572000000000000000000000000000000000000000000000000000000610320526102e0816103600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610340528060040161035cfd5b61028051611f0f576020806103405260246102c0527f6572633732313a207472616e7366657220746f20746865207a65726f206164646102e0527f7265737300000000000000000000000000000000000000000000000000000000610300526102c0816103400160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610320528060040161033cfd5b60606102606102005e611f20611d2e565b610260516102a051604052611f366102c0611819565b6102c0511815611fe2576020806103605260256102e0527f6572633732313a207472616e736665722066726f6d20696e636f727265637420610300527f6f776e6572000000000000000000000000000000000000000000000000000000610320526102e0816103600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610340528060040161035cfd5b5f600a6102a0516020525f5260405f205560016008610260516020525f5260405f2054036008610260516020525f5260405f205560016008610280516020525f5260405f2054016008610280516020525f5260405f20556102805160096102a0516020525f5260405f20556102a05161028051610260517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f6102c0a4606061026060405e61208f611da1565b565b6060513b1561221b5760605163150b7a026104e05260803361050052604051610520526080516105405280610560528061050001602060a051018060a0835e508051806020830101601f825f03163682375050601f19601f8251602001011690508101505060206104e06104a46104fc5f855af1612111573d5f5f3e3d5ffd5b3d602081183d6020100218806104e00161050011612aa3576104e0518060201b612aa3576109a052506109a09050516104c0527f150b7a02000000000000000000000000000000000000000000000000000000006104c0511815612211576020806105605260336104e0527f6572633732313a207472616e7366657220746f206e6f6e2d4945524337323152610500527f6563656976657220696d706c656d656e74657200000000000000000000000000610520526104e0816105600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610540528060040161055cfd5b6001815250612221565b60018152505b565b60606109c06102605e612234611da3565b60606109c060405e6020610a20510180610a2060a05e50612256610e40612091565b610e405161230057602080610ee0526033610e60527f6572633732313a207472616e7366657220746f206e6f6e2d4945524337323152610e80527f6563656976657220696d706c656d656e74657200000000000000000000000000610ea052610e6081610ee00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610ec05280600401610edcfd5b565b600d54815250565b6102605160405261231c6102a0611819565b6102a0516102805261028051610200525f610220526102605161024052612341611d2e565b610260516040526123536102a0611819565b6102a051610280525f600a610260516020525f5260405f205560016008610280516020525f5260405f2054036008610280516020525f5260405f20555f6009610260516020525f5260405f2055610260515f610280517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f6102a0a4610280516040525f606052610260516080526123e9611da1565b565b61026051612470576020806103005260206102a0527f6572633732313a206d696e7420746f20746865207a65726f20616464726573736102c0526102a0816103000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a06102e052806004016102fcfd5b610280516040526124826102a061190a565b6102a051156125085760208061032052601c6102c0527f6572633732313a20746f6b656e20616c7265616479206d696e746564000000006102e0526102c0816103200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610300528060040161031cfd5b5f6102005260406102606102205e61251e611d2e565b610280516040526125306102a061190a565b6102a051156125b65760208061032052601c6102c0527f6572633732313a20746f6b656e20616c7265616479206d696e746564000000006102e0526102c0816103200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610300528060040161031cfd5b60016008610260516020525f5260405f2054016008610260516020525f5260405f2055610260516009610280516020525f5260405f205561028051610260515f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f6102a0a45f604052604061026060605e612630611da1565b565b60406109c06102605e6126436123eb565b5f60405260406109c060605e6020610a00510180610a0060a05e50612669610e20612091565b610e205161271357602080610ec0526033610e40527f6572633732313a207472616e7366657220746f206e6f6e2d4945524337323152610e60527f6563656976657220696d706c656d656e74657200000000000000000000000000610e8052610e4081610ec00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610ea05280600401610ebcfd5b565b5f543318156127945760208060a05260206040527f6f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260605260408160a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060805280600401609cfd5b565b5f60026080527f190100000000000000000000000000000000000000000000000000000000000060a05260808051602082018360e001815181525050808301925050506040518160e001526020810190506060518160e001526020810190508060c05260c09050805160208201209050815250565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6060526020612b9f6080396020612bff60a0394660c0523060e05260a06040526040805160208201209050815250565b6020612b1f5f395f51301861287c576020612aff5f395f5146181561287e565b5f5b15612890576020612adf8239506128a3565b61289b61010061280b565b610100518152505b565b6128b061018061285c565b610180516101c052610160516101e05260406101c060405e6128d36101a0612796565b6101a051815250565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a060a05111156129a55760208061014052602260c0527f65636473613a20696e76616c6964207369676e6174757265206073602076616c60e0527f75650000000000000000000000000000000000000000000000000000000000006101005260c0816101400160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610120528060040161013cfd5b5f610160526080604060e05e6020610160608060e060015afa506101605160c05260c051612a485760208061014052601860e0527f65636473613a20696e76616c6964207369676e617475726500000000000000006101005260e0816101400160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610120528060040161013cfd5b60c051815250565b60806101c060405e612a636102406128dc565b61024051815250565b5f546060526040515f556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f6080a3565b5f80fd12760db7176015a6168d0d9717601760148c09530ad81760176015fc142b04e208f80c72176001f30ec5040d003300181111170804b5176058af849154a9330cf3197654f0051440b4225bb49e4a69a4c4e035aecef56adc00000000000000000000000000000000000000000000000000000000000000fc0000000000000000000000004c62740ed0bfc8b2afc53ad70919a964b9bef7e200000000000000000000000000000000000000000000000000000000000000154c657669617468616e2041756374696f6e204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000096575bccedcae3295ff8f7d48e647f987b651ef4911e3c8102fd6e520118601e00000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc600000000000000000000000000000000000000000000000000000000000000154c657669617468616e2041756374696f6e204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000055351554944000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000154c657669617468616e2041756374696f6e204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000055351554944000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6170692e6c657669617468616e6e6577732e78797a2f6170692f76312f696d6167652f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000154c657669617468616e2041756374696f6e204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Leviathan Auction NFT
Arg [1] : symbol_ (string): SQUID
Arg [2] : base_uri_ (string): https://api.leviathannews.xyz/api/v1/image/
Arg [3] : name_eip712_ (string): Leviathan Auction NFT
Arg [4] : version_eip712_ (string): 1
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [6] : 4c657669617468616e2041756374696f6e204e46540000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 5351554944000000000000000000000000000000000000000000000000000000
Arg [9] : 000000000000000000000000000000000000000000000000000000000000002b
Arg [10] : 68747470733a2f2f6170692e6c657669617468616e6e6577732e78797a2f6170
Arg [11] : 692f76312f696d6167652f000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [13] : 4c657669617468616e2041756374696f6e204e46540000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [15] : 3100000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
0:44451:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;1047:22:7;-1:-1:-1;1047:22:7;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;4541:4:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;4588:8:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;4606:4:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;3227:1452:9;-1:-1:-1;3227:1452:9;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;24474:22:0;-1:-1:-1;24474:22:0;24898:1:0;-1:-1:-1;-1:-1:-1;24875:24:0;-1:-1:-1;24927:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24453:736:0;24453:736:0;24453:736:0;-1:-1:-1;-1:-1:-1;24453:736:0:-;24453:736:0;24453:736:0;24453:736:0;-1:-1:-1;-1:-1:-1;24453:736:0:-;24453:736:0;24453:736:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;25020:13:0;-1:-1:-1;24970:63:0;24970:21:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24992:6:0;-1:-1:-1;-1:-1:-1;24970:29:0;-1:-1:-1;24970:29:0;24970:29:0;24970:29:0;24970:29:0;-1:-1:-1;24970:29:0;24970:29:0;24970:63:0;24970:63:0;24970:134:0;-1:-1:-1;-1:-1:-1;24970:134:0:-;25094:10:0;-1:-1:-1;25050:54:0;25050:21:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;25072:6:0;-1:-1:-1;-1:-1:-1;25050:29:0;-1:-1:-1;25050:29:0;25050:29:0;25050:29:0;25050:29:0;-1:-1:-1;25050:29:0;25050:29:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;25050:40:0;25050:40:0;25050:54:0;25050:54:0;25050:54:0;24970:134:0;-1:-1:-1;-1:-1:-1;24970:134:0:-;24970:134:0:-;24970:134:0;24970:134:0:-;24953:213:0;24453:736:0;-1:-1:-1;-1:-1:-1;24953:213:0:-;25142:6:0;-1:-1:-1;-1:-1:-1;25128:11:0;-1:-1:-1;-1:-1:-1;25161:5:0;-1:-1:-1;-1:-1:-1;25161:5:0:-;24453:736:0:-;24453:736:0;-1:-1:-1;24453:736:0;24453:736:0;24453:736:0;24453:736:0;24453:736:0;-1:-1:-1;-1:-1:-1;24453:736:0:-;24453:736:0:-;24453:736:0;24453:736:0;24453:736:0;-1:-1:-1;25178:11:0;-1:-1:-1;24453:736:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;11251:20:0;-1:-1:-1;11251:20:0;11568:12:0;-1:-1:-1;11568:37:0;6965:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;11568:37:0;-1:-1:-1;11568:37:0;-1:-1:-1;-1:-1:-1;11568:37:0:-;-1:-1:-1;-1:-1:-1;11568:37:0;-1:-1:-1;-1:-1:-1;11568:37:0:-;11568:37:0:-;7020:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;11568:37:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;11568:37:0;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;7075:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;11568:37:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;11568:37:0;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;7153:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;11568:37:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;11568:37:0;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;7234:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;11568:37:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;11568:37:0;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;7290:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;11568:37:0;-1:-1:-1;-1:-1:-1;11568:37:0:-;11568:37:0;11568:37:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;11229:376:0;-1:-1:-1;11229:376:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;19079:20:0;-1:-1:-1;19079:20:0;-1:-1:-1;-1:-1:-1;19079:20:0:i;19079:20:0:-;19079:20:0;-1:-1:-1;19071:28:0;19166:5:0;-1:-1:-1;19071:28:0;19071:28:0;19064:73:0;-1:-1:-1;-1:-1:-1;19064:73:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;19101:36:0;-1:-1:-1;19101:36:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;19101:36:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;19101:36:0;19101:36:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;19064:73:0:-;19166:5:0;-1:-1:-1;-1:-1:-1;19149:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;19149:23:0;-1:-1:-1;19149:23:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;18669:503:0;-1:-1:-1;18669:503:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;11638:14:0;-1:-1:-1;-1:-1:-1;11638:14:0;11624:325:0;-1:-1:-1;11943:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;11926:23:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;11926:23:0;-1:-1:-1;-1:-1:-1;11926:23:0;-1:-1:-1;-1:-1:-1;11926:23:0:i;11926:23:0:-;11926:23:0;-1:-1:-1;-1:-1:-1;11624:325:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;13736:17:0;-1:-1:-1;-1:-1:-1;13736:17:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;13755:14:0;-1:-1:-1;-1:-1:-1;13755:14:0;14200:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13714:517:0;-1:-1:-1;-1:-1:-1;14173:58:0;-1:-1:-1;-1:-1:-1;14173:58:0:i;13714:517:0:-;13714:517:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;24215:219:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24388:46:0;-1:-1:-1;-1:-1:-1;24388:46:0;-1:-1:-1;-1:-1:-1;24388:46:0:i;24388:46:0:-;24388:46:0;-1:-1:-1;-1:-1:-1;24215:219:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;11968:295:0;-1:-1:-1;12254:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;12239:24:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;12239:24:0;-1:-1:-1;-1:-1:-1;12239:24:0;-1:-1:-1;-1:-1:-1;12239:24:0:i;12239:24:0:-;12239:24:0;-1:-1:-1;-1:-1:-1;11968:295:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;12297:11:0;-1:-1:-1;-1:-1:-1;12297:11:0;13350:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13087:24:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;13087:24:0;-1:-1:-1;-1:-1:-1;13087:24:0;-1:-1:-1;-1:-1:-1;13087:24:0:i;13087:24:0:-;13087:24:0;-1:-1:-1;-1:-1:-1;13070:41:0;13070:41:0;-1:-1:-1;-1:-1:-1;13070:41:0;13129:5:0;-1:-1:-1;-1:-1:-1;13123:11:0;13123:2:0;-1:-1:-1;-1:-1:-1;13123:11:0;13123:11:0;13116:55:0;-1:-1:-1;-1:-1:-1;13116:55:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13136:35:0;-1:-1:-1;-1:-1:-1;13136:35:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13136:35:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13136:35:0;13136:35:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13116:55:0:-;13207:5:0;-1:-1:-1;-1:-1:-1;13193:19:0;13193:10:0;13193:19:0;13193:63:0;-1:-1:-1;-1:-1:-1;13193:63:0:-;13193:63:0;-1:-1:-1;13193:63:0;-1:-1:-1;-1:-1:-1;13193:63:0:-;13193:63:0:-;13216:21:0;-1:-1:-1;13238:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;13216:28:0;-1:-1:-1;13216:28:0;13216:28:0;13216:28:0;13216:28:0;-1:-1:-1;13216:28:0;13216:28:0;-1:-1:-1;13245:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13216:40:0;13216:40:0;13193:63:0;13193:63:0:-;13176:151:0;-1:-1:-1;-1:-1:-1;13176:151:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13264:63:0;-1:-1:-1;-1:-1:-1;13264:63:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13264:63:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13264:63:0;13264:63:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13176:151:0:-;13346:2:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13350:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;12285:1074:0;-1:-1:-1;-1:-1:-1;13332:27:0;-1:-1:-1;-1:-1:-1;13332:27:0:i;12285:1074:0:-;12285:1074:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;22537:16:0;-1:-1:-1;-1:-1:-1;22537:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;22605:8:0;-1:-1:-1;-1:-1:-1;22605:8:0;23857:8:0;-1:-1:-1;23568:27:0;23568:15:0;-1:-1:-1;23561:62:0;23561:62:0;-1:-1:-1;-1:-1:-1;23561:62:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;23597:26:0;-1:-1:-1;-1:-1:-1;23597:26:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;23597:26:0;23597:26:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;23561:62:0:-;23654:11:0;-1:-1:-1;24187:8:0;-1:-1:-1;23654:21:0;23654:21:0;-1:-1:-1;23654:21:0;23654:21:0;23654:21:0;23654:21:0;-1:-1:-1;23654:21:0;23654:21:0;23629:46:0;23629:46:0;-1:-1:-1;-1:-1:-1;23629:46:0;23730:1:0;-1:-1:-1;23715:13:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;23704:28:0;23680:11:0;-1:-1:-1;24187:8:0;-1:-1:-1;23680:21:0;23680:21:0;-1:-1:-1;23680:21:0;23680:21:0;23680:21:0;23680:21:0;-1:-1:-1;23680:21:0;23680:21:0;-1:-1:-1;23804:17:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;23823:7:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24187:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;23842:13:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;23857:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;23780:95:0;-1:-1:-1;-1:-1:-1;23780:95:0;23780:95:0;-1:-1:-1;-1:-1:-1;23761:120:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;23761:120:0;-1:-1:-1;23761:120:0;23761:120:0;23761:120:0;23738:143:0;-1:-1:-1;-1:-1:-1;23738:143:0;23946:11:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;23902:56:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;23902:56:0;-1:-1:-1;-1:-1:-1;23902:56:0;-1:-1:-1;-1:-1:-1;23902:56:0:i;23902:56:0:-;23902:56:0;-1:-1:-1;-1:-1:-1;23886:72:0;23886:72:0;-1:-1:-1;-1:-1:-1;23886:72:0;24010:4:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24016:19:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24045:1:0;-1:-1:-1;24037:19:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24066:1:0;-1:-1:-1;24058:19:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;23982:101:0;-1:-1:-1;-1:-1:-1;23982:101:0;-1:-1:-1;-1:-1:-1;23982:101:0:i;23982:101:0:-;23982:101:0;-1:-1:-1;-1:-1:-1;23964:119:0;23964:119:0;-1:-1:-1;-1:-1:-1;23964:119:0;24187:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24105:24:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;24105:24:0;-1:-1:-1;-1:-1:-1;24105:24:0;-1:-1:-1;-1:-1:-1;24105:24:0:i;24105:24:0:-;24105:24:0;-1:-1:-1;-1:-1:-1;24095:34:0;24095:6:0;-1:-1:-1;-1:-1:-1;24095:34:0;24095:34:0;24095:34:0;24088:70:0;-1:-1:-1;-1:-1:-1;24088:70:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24131:27:0;-1:-1:-1;-1:-1:-1;24131:27:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24131:27:0;24131:27:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24088:70:0:-;24178:7:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;24187:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;22521:1675:0;-1:-1:-1;-1:-1:-1;24164:32:0;-1:-1:-1;-1:-1:-1;24164:32:0:i;22521:1675:0:-;22521:1675:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;13378:323:0;-1:-1:-1;13692:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;13673:28:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;13673:28:0;-1:-1:-1;-1:-1:-1;13673:28:0;-1:-1:-1;-1:-1:-1;13673:28:0:i;13673:28:0:-;13673:28:0;-1:-1:-1;-1:-1:-1;13378:323:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;8478:41:0;-1:-1:-1;8478:41:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;14270:14:0;-1:-1:-1;-1:-1:-1;14270:14:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;14286:11:0;-1:-1:-1;-1:-1:-1;14286:11:0;15460:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;15566:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;15424:62:0;-1:-1:-1;-1:-1:-1;15424:62:0;-1:-1:-1;-1:-1:-1;15424:62:0:i;15424:62:0:-;15424:62:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;15417:118:0;-1:-1:-1;-1:-1:-1;15417:118:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;15488:47:0;-1:-1:-1;-1:-1:-1;15488:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;15488:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;15488:47:0;15488:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;15417:118:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;15566:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;14253:1322:0;-1:-1:-1;-1:-1:-1;15540:35:0;-1:-1:-1;-1:-1:-1;15540:35:0:i;14253:1322:0:-;14253:1322:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;21584:19:0;21584:19:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;21584:19:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;21584:19:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;21584:19:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;21610:22:0;-1:-1:-1;-1:-1:-1;21610:22:0:i;21610:22:0:-;-1:-1:-1;-1:-1:-1;21653:7:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;21653:7:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;21637:13:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;21567:93:0;21567:93:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;15671:18:0;-1:-1:-1;-1:-1:-1;15671:18:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;15671:18:0;15671:18:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;15671:18:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;15671:18:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;15671:18:0;15597:2300:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;15623:14:0;-1:-1:-1;-1:-1:-1;15623:14:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;15639:11:0;-1:-1:-1;-1:-1:-1;15639:11:0;17771:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;17882:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;17735:62:0;-1:-1:-1;-1:-1:-1;17735:62:0;-1:-1:-1;-1:-1:-1;17735:62:0:i;17735:62:0:-;17735:62:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;17728:118:0;-1:-1:-1;-1:-1:-1;17728:118:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;17799:47:0;-1:-1:-1;-1:-1:-1;17799:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;17799:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;17799:47:0;17799:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;17728:118:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;17882:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;17892:4:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;17892:4:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;15597:2300:0;-1:-1:-1;-1:-1:-1;17851:46:0;-1:-1:-1;-1:-1:-1;17851:46:0:i;15597:2300:0:-;15597:2300:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;9376:55:0;-1:-1:-1;9376:55:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;18446:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;18303:30:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;18303:30:0;-1:-1:-1;-1:-1:-1;18303:30:0:i;18303:30:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;18415:41:0;18422:13:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;18446:8:0;-1:-1:-1;18437:18:0;18437:18:0;18437:18:0;-1:-1:-1;-1:-1:-1;18437:18:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;18437:18:0;-1:-1:-1;-1:-1:-1;18437:18:0:-;18437:18:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;18437:18:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;18437:18:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;18437:18:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;18437:18:0;18437:18:0:-;18437:18:0;18437:18:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;18415:41:0;18415:41:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;17916:540:0;-1:-1:-1;-1:-1:-1;17916:540:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;18475:175:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;18630:20:0;-1:-1:-1;18630:20:0;-1:-1:-1;-1:-1:-1;18630:20:0:i;18630:20:0:-;18630:20:0;-1:-1:-1;18475:175:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;19215:14:0;-1:-1:-1;-1:-1:-1;19215:14:0;19712:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;19695:23:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;19695:23:0;-1:-1:-1;-1:-1:-1;19695:23:0;-1:-1:-1;-1:-1:-1;19695:23:0:i;19695:23:0:-;19695:23:0;-1:-1:-1;-1:-1:-1;19687:31:0;19793:5:0;-1:-1:-1;19687:31:0;19687:31:0;19680:75:0;-1:-1:-1;-1:-1:-1;19680:75:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;19720:35:0;-1:-1:-1;-1:-1:-1;19720:35:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;19720:35:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;19720:35:0;19720:35:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;19680:75:0:-;19767:18:0;-1:-1:-1;19786:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;19767:25:0;-1:-1:-1;19767:25:0;19767:25:0;19767:25:0;19767:25:0;-1:-1:-1;19767:25:0;19767:25:0;19767:32:0;19793:5:0;-1:-1:-1;-1:-1:-1;19767:32:0;-1:-1:-1;19767:32:0;19767:32:0;19767:32:0;19767:32:0;-1:-1:-1;19767:32:0;19767:32:0;19767:32:0;19767:32:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;19191:608:0;-1:-1:-1;-1:-1:-1;19191:608:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;20091:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20182:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20055:62:0;-1:-1:-1;-1:-1:-1;20055:62:0;-1:-1:-1;-1:-1:-1;20055:62:0:i;20055:62:0:-;20055:62:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;20048:118:0;-1:-1:-1;-1:-1:-1;20048:118:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20119:47:0;-1:-1:-1;-1:-1:-1;20119:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20119:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20119:47:0;20119:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20048:118:0:-;20182:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20171:20:0;19812:379:0;-1:-1:-1;-1:-1:-1;20171:20:0;-1:-1:-1;-1:-1:-1;20171:20:0:i;19812:379:0:-;19812:379:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;25225:18:0;-1:-1:-1;-1:-1:-1;25225:18:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;25737:22:0;-1:-1:-1;-1:-1:-1;25737:22:0:i;25737:22:0:-;25771:9:0;-1:-1:-1;-1:-1:-1;25771:27:0;25764:75:0;-1:-1:-1;-1:-1:-1;25764:75:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;25800:39:0;-1:-1:-1;-1:-1:-1;25800:39:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;25800:39:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;25800:39:0;25800:39:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;25764:75:0:-;25874:5:0;25845:14:0;-1:-1:-1;25860:10:0;25845:26:0;-1:-1:-1;25845:26:0;25845:26:0;25845:26:0;25845:26:0;-1:-1:-1;25845:26:0;25845:26:0;-1:-1:-1;25906:10:0;25884:40:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;25918:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;25884:40:0;-1:-1:-1;-1:-1:-1;25884:40:0;25958:9:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;25930:38:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;25930:38:0;-1:-1:-1;-1:-1:-1;25930:38:0:i;25930:38:0:-;26001:4:0;-1:-1:-1;25973:14:0;-1:-1:-1;25988:9:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;25973:25:0;-1:-1:-1;25973:25:0;25973:25:0;25973:25:0;25973:25:0;-1:-1:-1;25973:25:0;25973:25:0;-1:-1:-1;26032:9:0;-1:-1:-1;-1:-1:-1;26010:38:0;26010:38:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;26043:4:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;26010:38:0;-1:-1:-1;-1:-1:-1;26010:38:0;25202:846:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;20223:14:0;-1:-1:-1;-1:-1:-1;20223:14:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;20239:25:0;-1:-1:-1;-1:-1:-1;20239:25:0;20768:14:0;-1:-1:-1;20783:10:0;20768:26:0;-1:-1:-1;20768:26:0;20768:26:0;20768:26:0;20768:26:0;-1:-1:-1;20768:26:0;20768:26:0;-1:-1:-1;20761:61:0;-1:-1:-1;-1:-1:-1;20761:61:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20796:26:0;-1:-1:-1;-1:-1:-1;20796:26:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20796:26:0;20796:26:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20761:61:0:-;20952:13:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20968:1:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;20952:17:0;20952:17:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;20932:37:0;20990:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;20974:13:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;21349:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;21356:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;21333:37:0;-1:-1:-1;-1:-1:-1;21333:37:0:i;21333:37:0:-;21375:21:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;21397:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;21375:31:0;-1:-1:-1;21375:31:0;21375:31:0;21375:31:0;21375:31:0;-1:-1:-1;21375:31:0;21375:31:0;21447:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;21476:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;20204:1350:0;21497:37:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;21525:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;21497:37:0;-1:-1:-1;-1:-1:-1;21497:37:0;20204:1350:0;-1:-1:-1;21546:8:0;-1:-1:-1;-1:-1:-1;20204:1350:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;21688:15:0;-1:-1:-1;-1:-1:-1;21688:15:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;21705:12:0;-1:-1:-1;-1:-1:-1;21705:12:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;22166:22:0;-1:-1:-1;-1:-1:-1;22166:22:0:i;22166:22:0:-;22200:6:0;-1:-1:-1;-1:-1:-1;22200:24:0;22193:69:0;-1:-1:-1;-1:-1:-1;22193:69:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;22226:36:0;-1:-1:-1;-1:-1:-1;22226:36:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;22226:36:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;22226:36:0;22226:36:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;22193:69:0:-;22385:10:0;22375:6:0;-1:-1:-1;-1:-1:-1;22375:20:0;22375:20:0;22368:62:0;-1:-1:-1;-1:-1:-1;22368:62:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;22397:33:0;-1:-1:-1;-1:-1:-1;22397:33:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;22397:33:0;22397:33:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;22368:62:0:-;22460:6:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;22435:14:0;-1:-1:-1;22450:6:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;22435:22:0;-1:-1:-1;22435:22:0;22435:22:0;22435:22:0;22435:22:0;-1:-1:-1;22435:22:0;22435:22:0;-1:-1:-1;22493:6:0;-1:-1:-1;-1:-1:-1;22471:37:0;22471:37:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;22501:6:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;22471:37:0;-1:-1:-1;-1:-1:-1;22471:37:0;21673:835:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;26691:22:0;-1:-1:-1;-1:-1:-1;26691:22:0:i;26691:22:0:-;26747:5:0;26718:14:0;-1:-1:-1;26733:10:0;26718:26:0;-1:-1:-1;26718:26:0;26718:26:0;26718:26:0;26718:26:0;-1:-1:-1;26718:26:0;26718:26:0;-1:-1:-1;26779:10:0;26757:40:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;26791:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;26757:40:0;-1:-1:-1;-1:-1:-1;26757:40:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;26802:43:0;26061:784:0;-1:-1:-1;-1:-1:-1;26802:43:0;-1:-1:-1;-1:-1:-1;26802:43:0:i;26061:784:0:-;26061:784:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;26876:19:0;-1:-1:-1;-1:-1:-1;26876:19:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;27146:22:0;-1:-1:-1;-1:-1:-1;27146:22:0:i;27146:22:0:-;27189:18:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;27173:34:0;27228:5:0;-1:-1:-1;-1:-1:-1;27220:45:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;27243:13:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;27258:6:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;27220:45:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;27220:45:0;27220:45:0;-1:-1:-1;26858:426:0;-1:-1:-1;-1:-1:-1;27213:71:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;27267:17:0;-1:-1:-1;-1:-1:-1;27267:17:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;27267:17:0;27267:17:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;26858:426:0:-;26858:426:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;7907:35:0;-1:-1:-1;7907:35:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;8052:36:0;-1:-1:-1;8052:36:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;8367:41:0;-1:-1:-1;8367:41:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;8144:28:0;-1:-1:-1;8144:28:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;8224:66:0;-1:-1:-1;8224:66:0;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;27651:5:0;-1:-1:-1;27651:37:0;27644:93:0;-1:-1:-1;-1:-1:-1;27644:93:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;27690:47:0;-1:-1:-1;27690:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;27690:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;27690:47:0;27690:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;27644:93:0:-;27749:14:0;-1:-1:-1;27764:5:0;-1:-1:-1;-1:-1:-1;27749:21:0;-1:-1:-1;27749:21:0;27749:21:0;27749:21:0;27749:21:0;-1:-1:-1;27749:21:0;27749:21:0;-1:-1:-1;-1:-1:-1;27742:28:0;27742:28:0;-1:-1:-1:-;-1:-1:-1:-;28116:12:0;-1:-1:-1;28129:8:0;-1:-1:-1;-1:-1:-1;28116:22:0;-1:-1:-1;28116:22:0;28116:22:0;28116:22:0;28116:22:0;-1:-1:-1;28116:22:0;28116:22:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;28099:39:0;28150:5:0;-1:-1:-1;28150:23:0;28143:58:0;-1:-1:-1;-1:-1:-1;28143:58:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;28175:26:0;-1:-1:-1;28175:26:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;28175:26:0;28175:26:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;28143:58:0:-;28213:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;28206:12:0;28206:12:0;-1:-1:-1:-;-1:-1:-1:-;29288:2:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;29254:21:0;-1:-1:-1;29276:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;29254:31:0;-1:-1:-1;29254:31:0;29254:31:0;29254:31:0;29254:31:0;-1:-1:-1;29254:31:0;29254:31:0;-1:-1:-1;29346:8:0;-1:-1:-1;-1:-1:-1;29295:60:0;29344:1:0;-1:-1:-1;-1:-1:-1;29295:60:0;29331:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;29316:24:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;29316:24:0;-1:-1:-1;-1:-1:-1;29316:24:0;-1:-1:-1;-1:-1:-1;29316:24:0:i;29316:24:0:-;29316:24:0;-1:-1:-1;-1:-1:-1;29295:60:0;29295:60:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;29295:60:0;29295:60:0;-1:-1:-1;-1:-1:-1;29295:60:0;-1:-1:-1:-;-1:-1:-1:-;28986:12:0;-1:-1:-1;28999:8:0;-1:-1:-1;-1:-1:-1;28986:22:0;-1:-1:-1;28986:22:0;28986:22:0;28986:22:0;28986:22:0;-1:-1:-1;28986:22:0;28986:22:0;28986:40:0;28986:40:0;28986:40:0;-1:-1:-1;28979:47:0;28979:47:0;-1:-1:-1:-;-1:-1:-1:-;28434:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;28421:22:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;28421:22:0;-1:-1:-1;28421:22:0;-1:-1:-1;-1:-1:-1;28421:22:0:i;28421:22:0:-;28421:22:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;28414:57:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;28445:26:0;-1:-1:-1;28445:26:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;28445:26:0;28445:26:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;29720:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;29699:30:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;29699:30:0;-1:-1:-1;-1:-1:-1;29699:30:0:i;29699:30:0:-;29741:21:0;-1:-1:-1;29763:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;29741:31:0;-1:-1:-1;29741:31:0;29741:31:0;29741:31:0;29741:31:0;-1:-1:-1;29741:31:0;29741:31:0;-1:-1:-1;-1:-1:-1;29734:38:0;29734:38:0;-1:-1:-1:-;-1:-1:-1:-;30142:8:0;-1:-1:-1;30133:17:0;30133:5:0;-1:-1:-1;30133:17:0;30133:17:0;30126:53:0;-1:-1:-1;-1:-1:-1;30126:53:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;30152:27:0;-1:-1:-1;30152:27:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;30152:27:0;30152:27:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;30126:53:0:-;30225:8:0;-1:-1:-1;-1:-1:-1;30184:21:0;-1:-1:-1;30206:5:0;-1:-1:-1;-1:-1:-1;30184:28:0;-1:-1:-1;30184:28:0;30184:28:0;30184:28:0;30184:28:0;-1:-1:-1;30184:28:0;30184:28:0;-1:-1:-1;30213:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;30184:38:0;30184:38:0;-1:-1:-1;30272:8:0;-1:-1:-1;30238:53:0;30265:5:0;-1:-1:-1;30238:53:0;30238:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;30282:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;30238:53:0;-1:-1:-1;30238:53:0;-1:-1:-1:-;-1:-1:-1:-;30655:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;30640:24:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;30640:24:0;-1:-1:-1;-1:-1:-1;30640:24:0;-1:-1:-1;-1:-1:-1;30640:24:0:i;30640:24:0:-;30640:24:0;-1:-1:-1;-1:-1:-1;30623:41:0;30623:41:0;-1:-1:-1;-1:-1:-1;30623:41:0;30698:5:0;-1:-1:-1;-1:-1:-1;30687:16:0;30687:7:0;-1:-1:-1;-1:-1:-1;30687:16:0;30687:16:0;30686:122:0;-1:-1:-1;-1:-1:-1;30686:122:0:-;30686:122:0;-1:-1:-1;30686:122:0;-1:-1:-1;-1:-1:-1;30686:122:0:-;30686:122:0:-;30717:21:0;-1:-1:-1;30739:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;30717:28:0;-1:-1:-1;30717:28:0;30717:28:0;30717:28:0;30717:28:0;-1:-1:-1;30717:28:0;30717:28:0;-1:-1:-1;30746:7:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;30717:37:0;30717:37:0;-1:-1:-1;30686:122:0;-1:-1:-1;-1:-1:-1;30686:122:0:-;30800:7:0;-1:-1:-1;-1:-1:-1;30768:39:0;30787:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;30768:28:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;30768:28:0;-1:-1:-1;-1:-1:-1;30768:28:0;-1:-1:-1;-1:-1:-1;30768:28:0:i;30768:28:0:-;30768:28:0;-1:-1:-1;-1:-1:-1;30768:39:0;30768:39:0;30768:39:0;30686:122:0;-1:-1:-1;-1:-1:-1;30686:122:0:-;30686:122:0:-;-1:-1:-1;-1:-1:-1;30686:122:0:-;-1:-1:-1;30669:145:0;30669:145:0;-1:-1:-1:-;-1:-1:-1:-;41448:16:0;-1:-1:-1;41444:21:0;41409:22:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;41432:8:0;-1:-1:-1;-1:-1:-1;41409:32:0;-1:-1:-1;41409:32:0;41409:32:0;41409:32:0;41409:32:0;-1:-1:-1;41409:32:0;41409:32:0;-1:-1:-1;41470:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;41494:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;41470:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;42410:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;42393:23:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;42393:23:0;-1:-1:-1;-1:-1:-1;42393:23:0;-1:-1:-1;-1:-1:-1;42393:23:0:i;42393:23:0:-;42393:23:0;-1:-1:-1;-1:-1:-1;42393:27:0;42419:1:0;-1:-1:-1;42393:27:0;-1:-1:-1;42393:27:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;42393:27:0;42393:27:0;42365:55:0;-1:-1:-1;-1:-1:-1;42365:55:0;42448:24:0;-1:-1:-1;42473:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;42448:34:0;-1:-1:-1;42448:34:0;42448:34:0;42448:34:0;42448:34:0;-1:-1:-1;42448:34:0;42448:34:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;42425:57:0;42597:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;42582:11:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;42579:347:0;-1:-1:-1;-1:-1:-1;42579:347:0:-;42648:18:0;-1:-1:-1;42667:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;42648:25:0;-1:-1:-1;42648:25:0;42648:25:0;42648:25:0;42648:25:0;-1:-1:-1;42648:25:0;42648:25:0;-1:-1:-1;42674:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;42648:43:0;42648:43:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;42623:68:0;42808:13:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;42767:18:0;-1:-1:-1;42786:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;42767:25:0;-1:-1:-1;42767:25:0;42767:25:0;42767:25:0;42767:25:0;-1:-1:-1;42767:25:0;42767:25:0;-1:-1:-1;42793:11:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;42767:38:0;42767:38:0;-1:-1:-1;42915:11:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;42873:24:0;-1:-1:-1;42898:13:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;42873:39:0;-1:-1:-1;42873:39:0;42873:39:0;42873:39:0;42873:39:0;-1:-1:-1;42873:39:0;42873:39:0;-1:-1:-1;42579:347:0:-;-1:-1:-1;42932:24:0;-1:-1:-1;42957:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;42932:34:0;-1:-1:-1;42932:34:0;42932:34:0;42932:34:0;42932:34:0;-1:-1:-1;42932:34:0;42932:34:0;-1:-1:-1;-1:-1:-1;42988:18:0;-1:-1:-1;43007:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;42988:25:0;-1:-1:-1;42988:25:0;42988:25:0;42988:25:0;42988:25:0;-1:-1:-1;42988:25:0;42988:25:0;-1:-1:-1;43014:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;42988:43:0;42988:43:0;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;43614:16:0;-1:-1:-1;43610:21:0;43634:1:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;43610:25:0;43610:25:0;-1:-1:-1;-1:-1:-1;43582:53:0;43663:22:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;43686:8:0;-1:-1:-1;-1:-1:-1;43663:32:0;-1:-1:-1;43663:32:0;43663:32:0;43663:32:0;43663:32:0;-1:-1:-1;43663:32:0;43663:32:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;43640:55:0;44065:16:0;-1:-1:-1;-1:-1:-1;44048:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;44048:34:0;-1:-1:-1;44048:34:0;44023:59:0;44023:59:0;-1:-1:-1;44023:59:0;44183:13:0;-1:-1:-1;-1:-1:-1;44168:11:0;-1:-1:-1;-1:-1:-1;44151:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;44151:29:0;-1:-1:-1;44151:29:0;-1:-1:-1;44280:11:0;-1:-1:-1;-1:-1:-1;44240:22:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;44263:13:0;-1:-1:-1;-1:-1:-1;44240:37:0;-1:-1:-1;44240:37:0;44240:37:0;44240:37:0;44240:37:0;-1:-1:-1;44240:37:0;44240:37:0;-1:-1:-1;-1:-1:-1;44375:22:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;44398:8:0;-1:-1:-1;-1:-1:-1;44375:32:0;-1:-1:-1;44375:32:0;44375:32:0;44375:32:0;44375:32:0;-1:-1:-1;44375:32:0;44375:32:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;44429:16:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;44429:22:0;44429:22:0;44429:16:0;-1:-1:-1;-1:-1:-1;44429:22:0;-1:-1:-1:-;-1:-1:-1:-;41055:2:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;41038:20:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;41038:20:0;-1:-1:-1;-1:-1:-1;41038:20:0;-1:-1:-1;-1:-1:-1;41038:20:0:i;41038:20:0:-;41038:20:0;-1:-1:-1;-1:-1:-1;41020:38:0;41020:38:0;-1:-1:-1;-1:-1:-1;41020:38:0;41096:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;41063:18:0;-1:-1:-1;41082:2:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;41063:22:0;-1:-1:-1;41063:22:0;41063:22:0;41063:22:0;41063:22:0;-1:-1:-1;41063:22:0;41063:22:0;-1:-1:-1;41086:6:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;41063:30:0;41063:30:0;-1:-1:-1;41146:6:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;41109:24:0;-1:-1:-1;41134:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;41109:34:0;-1:-1:-1;41109:34:0;41109:34:0;41109:34:0;41109:34:0;-1:-1:-1;41109:34:0;41109:34:0;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;39632:5:0;-1:-1:-1;-1:-1:-1;39632:23:0;39629:176:0;-1:-1:-1;-1:-1:-1;39629:176:0:-;39707:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;39665:51:0;39629:176:0;-1:-1:-1;-1:-1:-1;39665:51:0;-1:-1:-1;-1:-1:-1;39665:51:0:i;39629:176:0:-;39735:2:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;39726:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;39629:176:0;-1:-1:-1;-1:-1:-1;39721:84:0:-;39789:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;39796:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;39629:176:0;-1:-1:-1;-1:-1:-1;39747:58:0;-1:-1:-1;-1:-1:-1;39747:58:0:i;39629:176:0:-;39814:2:0;-1:-1:-1;-1:-1:-1;39814:20:0;39811:170:0;-1:-1:-1;-1:-1:-1;39811:170:0:-;39891:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;39844:56:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;39844:56:0;-1:-1:-1;-1:-1:-1;39844:56:0:i;39811:170:0:-;39916:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;39910:2:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;39905:76:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;39931:50:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;39931:50:0;-1:-1:-1;-1:-1:-1;39931:50:0:i;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;35646:5:0;-1:-1:-1;-1:-1:-1;35618:33:0;35633:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35618:24:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;35618:24:0;-1:-1:-1;-1:-1:-1;35618:24:0;-1:-1:-1;-1:-1:-1;35618:24:0:i;35618:24:0:-;35618:24:0;-1:-1:-1;-1:-1:-1;35618:33:0;35618:33:0;35618:33:0;35601:97:0;-1:-1:-1;-1:-1:-1;35601:97:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35659:39:0;-1:-1:-1;-1:-1:-1;35659:39:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35659:39:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35659:39:0;35659:39:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35601:97:0:-;35710:2:0;-1:-1:-1;-1:-1:-1;35710:20:0;35703:67:0;-1:-1:-1;-1:-1:-1;35703:67:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35732:38:0;-1:-1:-1;-1:-1:-1;35732:38:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35732:38:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35732:38:0;35732:38:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35703:67:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35776:48:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;35776:48:0;-1:-1:-1;-1:-1:-1;35776:48:0:i;35776:48:0:-;35971:5:0;-1:-1:-1;-1:-1:-1;35943:33:0;35958:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35943:24:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;35943:24:0;-1:-1:-1;-1:-1:-1;35943:24:0;-1:-1:-1;-1:-1:-1;35943:24:0:i;35943:24:0:-;35943:24:0;-1:-1:-1;-1:-1:-1;35943:33:0;35943:33:0;35943:33:0;35926:97:0;-1:-1:-1;-1:-1:-1;35926:97:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35984:39:0;-1:-1:-1;-1:-1:-1;35984:39:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35984:39:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35984:39:0;35984:39:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35926:97:0:-;-1:-1:-1;36029:21:0;-1:-1:-1;36051:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;36029:31:0;-1:-1:-1;36029:31:0;36029:31:0;36029:31:0;36029:31:0;-1:-1:-1;36029:31:0;36029:31:0;-1:-1:-1;36241:1:0;-1:-1:-1;36218:14:0;-1:-1:-1;36233:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;36218:21:0;-1:-1:-1;36218:21:0;36218:21:0;36218:21:0;36218:21:0;-1:-1:-1;36218:21:0;36218:21:0;-1:-1:-1;36207:36:0;36183:14:0;-1:-1:-1;36198:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;36183:21:0;-1:-1:-1;36183:21:0;36183:21:0;36183:21:0;36183:21:0;-1:-1:-1;36183:21:0;36183:21:0;-1:-1:-1;36300:1:0;-1:-1:-1;36280:14:0;-1:-1:-1;36295:2:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;36280:18:0;-1:-1:-1;36280:18:0;36280:18:0;36280:18:0;36280:18:0;-1:-1:-1;36280:18:0;36280:18:0;-1:-1:-1;36269:33:0;36248:14:0;-1:-1:-1;36263:2:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;36248:18:0;-1:-1:-1;36248:18:0;36248:18:0;36248:18:0;36248:18:0;-1:-1:-1;36248:18:0;36248:18:0;-1:-1:-1;36332:2:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;36307:12:0;-1:-1:-1;36320:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;36307:22:0;-1:-1:-1;36307:22:0;36307:22:0;36307:22:0;36307:22:0;-1:-1:-1;36307:22:0;36307:22:0;-1:-1:-1;36371:8:0;-1:-1:-1;-1:-1:-1;36339:41:0;36369:1:0;-1:-1:-1;-1:-1:-1;36339:41:0;36360:5:0;-1:-1:-1;-1:-1:-1;36339:41:0;36339:41:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;36339:41:0;36339:41:0;-1:-1:-1;-1:-1:-1;36339:41:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;36386:47:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;36386:47:0:o;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;38515:2:0;-1:-1:-1;-1:-1:-1;38515:14:0;38515:14:0;38512:373:0;-1:-1:-1;-1:-1:-1;38512:373:0:-;38570:19:0;-1:-1:-1;38562:101:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38620:10:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38632:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38639:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38649:4:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38649:4:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38562:101:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38562:101:0;38562:101:0;38539:124:0;38539:124:0;-1:-1:-1;-1:-1:-1;38539:124:0;38695:115:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38679:12:0;-1:-1:-1;-1:-1:-1;38679:131:0;38679:131:0;38679:131:0;38672:193:0;-1:-1:-1;-1:-1:-1;38672:193:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38812:53:0;-1:-1:-1;-1:-1:-1;38812:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38812:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38812:53:0;38812:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;38672:193:0:-;38881:4:0;-1:-1:-1;-1:-1:-1;38874:11:0;38874:11:0;38874:11:0;-1:-1:-1;-1:-1:-1;38874:11:0:o;38512:373:0:-;38898:4:0;-1:-1:-1;-1:-1:-1;38891:11:0;38891:11:0;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;34913:35:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;34913:35:0;-1:-1:-1;-1:-1:-1;34913:35:0:i;34913:35:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35021:4:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35021:4:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;34960:71:0;-1:-1:-1;-1:-1:-1;34960:71:0;-1:-1:-1;-1:-1:-1;34960:71:0:i;34960:71:0:-;34960:71:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;34953:133:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35033:53:0;-1:-1:-1;-1:-1:-1;35033:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35033:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;35033:53:0;35033:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;36657:16:0;-1:-1:-1;36653:21:0;-1:-1:-1;36646:28:0;36646:28:0;-1:-1:-1:-;-1:-1:-1:-;37091:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;37076:24:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;37076:24:0;-1:-1:-1;-1:-1:-1;37076:24:0;-1:-1:-1;-1:-1:-1;37076:24:0:i;37076:24:0:-;37076:24:0;-1:-1:-1;-1:-1:-1;37059:41:0;37059:41:0;-1:-1:-1;-1:-1:-1;37059:41:0;37134:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;37157:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;37106:60:0;-1:-1:-1;-1:-1:-1;37106:60:0:i;37106:60:0:-;37301:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;37286:24:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;37286:24:0;-1:-1:-1;-1:-1:-1;37286:24:0;-1:-1:-1;-1:-1:-1;37286:24:0:i;37286:24:0:-;37286:24:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;37278:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;37316:21:0;-1:-1:-1;37338:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;37316:31:0;-1:-1:-1;37316:31:0;37316:31:0;37316:31:0;37316:31:0;-1:-1:-1;37316:31:0;37316:31:0;-1:-1:-1;37600:1:0;-1:-1:-1;37577:14:0;-1:-1:-1;37592:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;37577:21:0;-1:-1:-1;37577:21:0;37577:21:0;37577:21:0;37577:21:0;-1:-1:-1;37577:21:0;37577:21:0;-1:-1:-1;37566:36:0;37542:14:0;-1:-1:-1;37557:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;37542:21:0;-1:-1:-1;37542:21:0;37542:21:0;37542:21:0;37542:21:0;-1:-1:-1;37542:21:0;37542:21:0;-1:-1:-1;-1:-1:-1;37607:12:0;-1:-1:-1;37620:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;37607:22:0;-1:-1:-1;37607:22:0;37607:22:0;37607:22:0;37607:22:0;-1:-1:-1;37607:22:0;37607:22:0;-1:-1:-1;37695:8:0;-1:-1:-1;-1:-1:-1;37651:53:0;37651:53:0;37672:5:0;-1:-1:-1;-1:-1:-1;37651:53:0;37651:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;37651:53:0;37651:53:0;-1:-1:-1;-1:-1:-1;37651:53:0;37737:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;37760:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;37710:59:0:o;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;32495:5:0;-1:-1:-1;-1:-1:-1;32495:23:0;32488:66:0;-1:-1:-1;-1:-1:-1;32488:66:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32520:34:0;-1:-1:-1;-1:-1:-1;32520:34:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32520:34:0;32520:34:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32488:66:0:-;32583:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32570:22:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;32570:22:0;-1:-1:-1;-1:-1:-1;32570:22:0;-1:-1:-1;-1:-1:-1;32570:22:0:i;32570:22:0:-;32570:22:0;-1:-1:-1;-1:-1:-1;32566:26:0;32566:26:0;32559:65:0;-1:-1:-1;-1:-1:-1;32559:65:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32594:30:0;-1:-1:-1;-1:-1:-1;32594:30:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32594:30:0;32594:30:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32559:65:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32630:60:0;-1:-1:-1;-1:-1:-1;32630:60:0:i;32630:60:0:-;32811:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32798:22:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;32798:22:0;-1:-1:-1;-1:-1:-1;32798:22:0;-1:-1:-1;-1:-1:-1;32798:22:0:i;32798:22:0:-;32798:22:0;-1:-1:-1;-1:-1:-1;32794:26:0;32794:26:0;32787:65:0;-1:-1:-1;-1:-1:-1;32787:65:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32822:30:0;-1:-1:-1;-1:-1:-1;32822:30:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32822:30:0;32822:30:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;32787:65:0:-;33194:1:0;-1:-1:-1;33171:14:0;-1:-1:-1;33186:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;33171:21:0;-1:-1:-1;33171:21:0;33171:21:0;33171:21:0;33171:21:0;-1:-1:-1;33171:21:0;33171:21:0;-1:-1:-1;33160:36:0;33136:14:0;-1:-1:-1;33151:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;33136:21:0;-1:-1:-1;33136:21:0;33136:21:0;33136:21:0;33136:21:0;-1:-1:-1;33136:21:0;33136:21:0;-1:-1:-1;33226:5:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;33201:12:0;-1:-1:-1;33214:8:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;33201:22:0;-1:-1:-1;33201:22:0;33201:22:0;33201:22:0;33201:22:0;-1:-1:-1;33201:22:0;33201:22:0;-1:-1:-1;33280:8:0;-1:-1:-1;-1:-1:-1;33236:53:0;33273:5:0;-1:-1:-1;-1:-1:-1;33236:53:0;33236:53:0;33236:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;33236:53:0;33236:53:0;-1:-1:-1;-1:-1:-1;33236:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;33295:59:0:o;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;31869:27:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;31869:27:0;-1:-1:-1;-1:-1:-1;31869:27:0:i;31869:27:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;31981:4:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;31981:4:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;31908:83:0;-1:-1:-1;-1:-1:-1;31908:83:0;-1:-1:-1;-1:-1:-1;31908:83:0:i;31908:83:0:-;31908:83:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;31901:145:0:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;31993:53:0;-1:-1:-1;-1:-1:-1;31993:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;31993:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;31993:53:0;31993:53:0;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;2573:10:7;2559:24:7;2559:10:7;2559:24:7;2559:24:7;-1:-1:-1;-1:-1:-1;-1:-1:-1;2552:67:7:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;2585:34:7;-1:-1:-1;2585:34:7;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;2585:34:7;2585:34:7;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;3750:50:10;-1:-1:-1;-1:-1:-1;3757:11:10;-1:-1:-1;3757:11:10;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;3757:11:10;3757:11:10;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;3770:16:10;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;3788:11:10;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;3750:50:10;3750:50:10;3740:61:10;-1:-1:-1;-1:-1:-1;-1:-1:-1;3740:61:10;-1:-1:-1;3740:61:10;3740:61:10;3740:61:10;-1:-1:-1;3733:68:10;3733:68:10;-1:-1:-1:-;-1:-1:-1:-;5236:10:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5279:8:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;5289:4:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5225:69:9;-1:-1:-1;5225:69:9;5225:69:9;-1:-1:-1;5206:94:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;5206:94:9;-1:-1:-1;5206:94:9;5206:94:9;5206:94:9;-1:-1:-1;5199:101:9;5199:101:9;-1:-1:-1:-;-1:-1:-1:-;4871:20:9;4871:20:9;4871:20:9;-1:-1:-1;-1:-1:-1;4871:20:9;4871:20:9;4871:20:9;4871:20:9;4871:4:9;4871:20:9;4871:53:9;-1:-1:-1;-1:-1:-1;4871:53:9:-;4896:28:9;4896:28:9;4896:28:9;-1:-1:-1;-1:-1:-1;4896:28:9;4896:28:9;4896:28:9;4896:28:9;4896:8:9;4896:28:9;4896:28:9;4871:53:9;-1:-1:-1;-1:-1:-1;4871:53:9:-;4871:53:9:-;4871:53:9;4871:53:9:-;4868:97:9;4868:97:9;-1:-1:-1;-1:-1:-1;4868:97:9:-;-1:-1:-1;4934:31:9;4934:31:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;4934:31:9;4934:31:9;4934:31:9;-1:-1:-1;-1:-1:-1;4934:31:9:o;4868:97:9:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;4978:30:9;-1:-1:-1;-1:-1:-1;4978:30:9;-1:-1:-1;-1:-1:-1;4978:30:9:i;4978:30:9:-;4978:30:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;4971:37:9;4971:37:9;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;5830:27:9;-1:-1:-1;-1:-1:-1;5830:27:9;-1:-1:-1;-1:-1:-1;5830:27:9:i;5830:27:9:-;5830:27:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5859:11:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5782:94:9;-1:-1:-1;-1:-1:-1;5782:94:9;-1:-1:-1;-1:-1:-1;5782:94:9:i;5782:94:9:-;5782:94:9;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5775:101:9;5775:101:9;-1:-1:-1:-;-1:-1:-1:-;5906:23:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5901:1:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;5894:73:8;5894:73:8;-1:-1:-1;-1:-1:-1;5894:73:8:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5931:36:8;-1:-1:-1;5931:36:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5931:36:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5931:36:8;5931:36:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5894:73:8:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5991:24:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5991:24:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;5991:24:8;5991:24:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;5991:24:8;5973:42:8;-1:-1:-1;5973:42:8;6027:6:8;-1:-1:-1;6027:24:8;6020:59:8;-1:-1:-1;-1:-1:-1;6020:59:8:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;6053:26:8;-1:-1:-1;6053:26:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;6053:26:8;6053:26:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;6020:59:8:-;6092:6:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;6085:13:8;6085:13:8;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;4097:36:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;4097:36:8;-1:-1:-1;-1:-1:-1;4097:36:8;-1:-1:-1;-1:-1:-1;4097:36:8:i;4097:36:8:-;4097:36:8;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;4090:43:8;4090:43:8;-1:-1:-1:-;-1:-1:-1:-;2948:10:7;-1:-1:-1;-1:-1:-1;-1:-1:-1;2927:31:7;2976:9:7;-1:-1:-1;-1:-1:-1;2963:10:7;-1:-1:-1;3026:9:7;-1:-1:-1;2990:46:7;3015:9:7;-1:-1:-1;2990:46:7;2990:46:7;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;2990:46:7;2990:46:7;-1:-1:-1;2990:46:7;-1:-1:-1:-;-1:-1:-1:-;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1;-1:-1:-1
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.