Contract 0x2a781796a372da624bf177b21dc33db5a1348e00

Contract Overview

Balance:
0 MATIC
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x40c32f68ad78997cb15c6e733bba82a64d6364f934e90991d176eec53301c1bcBurn And Withdra...240344172022-01-19 3:46:31164 days 5 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000091934 2
0x3581c1b134f17603c2542b710a493b665d012841a2cf3919bdf11578ecec205bMint240343942022-01-19 3:45:45164 days 5 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000226458 2
0xa5ca2154cfe1f4a7682162bac923a66f99791e54a9ab4c10faba83de9f7b9a42Burn And Withdra...239550722022-01-16 20:04:28166 days 13 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000181890955 3.956989908
0x8fdb79810557cbb78405a2cfed4b5369e46a0a63e3591e320c4ba78a8d10ce1fMint239550482022-01-16 20:03:34166 days 13 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000443320191 3.756027686
0x5cac95aa8f8891a55640d043dd76f3461c70d3bf287a23ae9cef4fb4291c0ba6Burn And Withdra...239547072022-01-16 19:49:44166 days 13 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000107699922 2.342983502
0x6869eeb7939df4a165bc34328c785f7c43587529a35610d88c95a1d25e7eebedMint239546762022-01-16 19:48:16166 days 13 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000239721517 2.031039129
0xf19e615675c43496653bc2256e5b0725a5a7ef5794b593e7ddea08ca31a59f6bSet URI239494052022-01-16 15:58:24166 days 17 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000082404 2
0x9d746426a0daa10ba9fc3616e69c7a3e831f8197e52a941511168c4c36b61907Set URI239492802022-01-16 15:54:06166 days 17 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000127146 2
0x08d41ce50f9ea521cec71f8dfbff789c703b240018498878b95d4b7e8c95067dBurn And Withdra...239358782022-01-16 6:28:54167 days 2 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000091934 2
0x71343126264636b45144f2340a98b16649271ed7a285bc0c0fe2c04151e9f480Mint239358532022-01-16 6:28:00167 days 2 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000226458 2.000000001
0x482b403f02e37710992e69ab04cbc3d95f2728710b8fae3ecd969455f26f7fdaBurn And Withdra...239357922022-01-16 6:25:54167 days 2 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000091934 2
0x0cf9c7a5796db61c28de697609db13abf47b50654f7642c27de2d3e496d35727Mint239357682022-01-16 6:25:06167 days 2 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000226457999 1.999999999
0xcc914989181d81926c1c29373ac2ab828436b51973b3a224846ac925af2c04bbBurn And Withdra...239357242022-01-16 6:22:56167 days 2 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000091934 2
0x6df6326624bbb538a59059def29e3367dac5f4ddd7716bd448fc7946485b93ceMint239357152022-01-16 6:22:20167 days 2 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000226458 2.000000001
0xd7e453cecaa6c31e286996eeea7e4b19539a3700ccbfb9ade3202f36559325a0Burn And Withdra...239356872022-01-16 6:20:28167 days 3 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000091934 2.000000001
0xa95cffa3a9b4ac253dfdeaf118077b19376c5810b874050a6adf06067d2bac51Mint239356562022-01-16 6:19:06167 days 3 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000226458 2
0xb13758d34d2974df987487ac73e0e88f627b71f30ffbbc279458a5fb16407adaBurn And Withdra...239355752022-01-16 6:16:20167 days 3 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000091934 2
0x3dd6f75bbf20ef11ae9833342ed10226d90f3ad6fed4fd0f2bbf8eaa339cf3feMint239355622022-01-16 6:15:54167 days 3 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000226458 2
0xdf5e45904875f4de9f0b8eaff5e6bd0c48ab93fe41726dd481fed1e2957dd9cfBurn And Withdra...239355322022-01-16 6:14:50167 days 3 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000091934 2
0xd4830fe21dc96d41f1f41c98244ca3cd5295ed4a4d813f147648c8c0d635204aMint239355032022-01-16 6:13:52167 days 3 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000226457999 1.999999999
0xb17cc7849be97625b313b9f03bd5bf334af4ff33b7d9f83539c45d748f9dfdffBurn And Withdra...239352642022-01-16 6:02:28167 days 3 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000091934 2
0x1fe6b463bbfd6bc3b3783748285ea5e6a4b79de3139985e6962d91fb8b8e6e58Mint239352432022-01-16 6:01:04167 days 3 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000226458 2
0x5e8f7c3f9e332348c4db5205fbf339e0e12e93e6ad4919925715e26b075febb5Burn And Withdra...239345352022-01-16 5:30:12167 days 3 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000091934 2
0x5d98f794d63b5abb741473b0bb228eecc60b313ebb2444a97286ff7760a3666cMint239344642022-01-16 5:27:30167 days 3 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000226458 2
0x3d20ec60a49d20f0080acba7759893fafb82167229d9e072f8832ed939ea001bBurn And Withdra...239343772022-01-16 5:24:28167 days 3 hrs ago0xcb5d91514d00d9266c429db1ffb3a69a7b74485b IN  0x2a781796a372da624bf177b21dc33db5a1348e000 MATIC0.000091952 2
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Gether

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 15: Gether.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;

import "./ERC1155.sol";
import "./Ownable.sol";
import "./Pausable.sol";
import "./ERC1155Burnable.sol";
import "./Counters.sol";
import "./IERC20.sol";
import "./ERC1155Supply.sol";

contract Gether is ERC1155, Ownable, Pausable, ERC1155Burnable, ERC1155Supply {


    // start additional code
    address internal tokenAddress;

    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    // end additional code

    // constructor was modified
    constructor(address _tokenAdd) ERC1155("") {
        tokenAddress = _tokenAdd;
    }

   // end modified

    // start additional code

    function setTokenAddress(address _tokenAdd) public onlyOwner {
        tokenAddress = _tokenAdd;
    }

    function getTokenAddress() public view returns (address _tokenAdd) {

        _tokenAdd = tokenAddress;

        return _tokenAdd;
    }

    // end additional code

    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    //start modified code

    function mint(address account, uint256 id, uint256 amount, bytes memory data)
        public
    {
        
        deposit(amount);

        _mint(account, id, amount, data);
    }

    //end modified code

    //start additional code

    function burnAndWithdraw(uint256 id, uint256 amount) public 
    {

        _burn(msg.sender, id , amount);

        withdraw(payable(msg.sender), amount);

    }

    function mintIncremental(address _recipient, uint256 amount, bytes memory data)
        public
    {

        deposit(amount);

        _tokenIds.increment();
        uint256 newTokenId = _tokenIds.current();

        _mint(_recipient, newTokenId, amount, data);
    }


    function deposit(uint256 amount) 
        public 
        onlyOwner
    {

        // Check if transfer passes
        IERC20(tokenAddress).transferFrom(msg.sender, address(this), amount);
        require(checkSuccess(), "ImgToken#deposit: TRANSFER_FAILED");

    }

    /**
    * @dev Withdraw tokens in this contract to receive the original ERC20s 
    * @param _to      The address where the withdrawn tokens will go to
    * @param _value   The amount of tokens to withdraw
    */

    function withdraw(
        address payable _to, 
        uint256 _value)
        public 
        onlyOwner
    {
      IERC20(tokenAddress).transfer(_to, _value);
      require(checkSuccess(), "ImgToken#withdraw: TRANSFER_FAILED");
    }

    //end additional code
    
    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        public
        onlyOwner
    {
        _mintBatch(to, ids, amounts, data);
    }


    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }

    //start additional code

      /**
    * Checks the return value of the previous function up to 32 bytes. Returns true if the previous
    * function returned 0 bytes or 32 bytes that are not all-zero.
    * Code taken from: https://github.com/dydxprotocol/solo/blob/10baf8e4c3fb9db4d0919043d3e6fdd6ba834046/contracts/protocol/lib/Token.sol
    */
  function checkSuccess()
    private pure
    returns (bool)
  {
    uint256 returnValue = 0;

    /* solium-disable-next-line security/no-inline-assembly */
    assembly {
      // check number of bytes returned from last function call
      switch returndatasize()

        // no bytes returned: assume success
        case 0x0 {
          returnValue := 1
        }

        // 32 bytes returned: check if non-zero
        case 0x20 {
          // copy 32 bytes into scratch space
          returndatacopy(0x0, 0x0, 0x20)

          // load those bytes into returnValue
          returnValue := mload(0x0)
        }

        // not sure what was returned: dont mark as success
        default { }
      
    }

    return returnValue != 0;
  }

  //end additional code
}

File 2 of 15: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 15: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 15: Counters.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 5 of 15: ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./IERC1155MetadataURI.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

File 6 of 15: ERC1155Burnable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol)

pragma solidity ^0.8.0;

import "./ERC1155.sol";

/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

File 7 of 15: ERC1155Supply.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;

import "./ERC1155.sol";

/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] -= amounts[i];
            }
        }
    }
}

File 8 of 15: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 9 of 15: IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 10 of 15: IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 11 of 15: IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 12 of 15: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 13 of 15: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

File 14 of 15: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides 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 {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 15 of 15: Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_tokenAdd","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnAndWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAddress","outputs":[{"internalType":"address","name":"_tokenAdd","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintIncremental","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAdd","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162004edb38038062004edb83398181016040528101906200003791906200028d565b604051806020016040528060008152506200005881620000dc60201b60201c565b50620000796200006d620000f860201b60201c565b6200010060201b60201c565b6000600360146101000a81548160ff02191690831515021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200036c565b8060029080519060200190620000f4929190620001c6565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001d490620002ed565b90600052602060002090601f016020900481019282620001f8576000855562000244565b82601f106200021357805160ff191683800117855562000244565b8280016001018555821562000244579182015b828111156200024357825182559160200191906001019062000226565b5b50905062000253919062000257565b5090565b5b808211156200027257600081600090555060010162000258565b5090565b600081519050620002878162000352565b92915050565b600060208284031215620002a057600080fd5b6000620002b08482850162000276565b91505092915050565b6000620002c682620002cd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200030657607f821691505b602082108114156200031d576200031c62000323565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200035d81620002b9565b81146200036957600080fd5b50565b614b5f806200037c6000396000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c80636b20c454116100f9578063b6b55f2511610097578063f242432a11610071578063f242432a1461048d578063f2fde38b146104a9578063f3fef3a3146104c5578063f5298aca146104e1576101a8565b8063b6b55f2514610411578063bd85b0391461042d578063e985e9c51461045d576101a8565b80638456cb59116100d35780638456cb59146103b15780638da5cb5b146103bb578063a22cb465146103d9578063b6571caf146103f5576101a8565b80636b20c4541461036f578063715018a61461038b578063731133e914610395576101a8565b806326a4e8d2116101665780633f4ba83a116101405780633f4ba83a146102e75780634e1273f4146102f15780634f558e79146103215780635c975abb14610351576101a8565b806326a4e8d2146102935780632eb2c2d6146102af5780633bb60495146102cb576101a8565b8062fdd58e146101ad57806301ffc9a7146101dd57806302fe53051461020d5780630e89341c1461022957806310fe9ae8146102595780631f7fdffa14610277575b600080fd5b6101c760048036038101906101c29190613527565b6104fd565b6040516101d49190614020565b60405180910390f35b6101f760048036038101906101f29190613729565b6105c6565b6040516102049190613d83565b60405180910390f35b6102276004803603810190610222919061377b565b6106a8565b005b610243600480360381019061023e91906137bc565b610730565b6040516102509190613d9e565b60405180910390f35b6102616107c4565b60405161026e9190613bed565b60405180910390f35b610291600480360381019061028c9190613440565b6107ee565b005b6102ad60048036038101906102a891906131d2565b61087c565b005b6102c960048036038101906102c49190613273565b61093c565b005b6102e560048036038101906102e091906137e5565b6109dd565b005b6102ef6109f6565b005b61030b60048036038101906103069190613694565b610a7c565b6040516103189190613d2a565b60405180910390f35b61033b600480360381019061033691906137bc565b610c2d565b6040516103489190613d83565b60405180910390f35b610359610c41565b6040516103669190613d83565b60405180910390f35b610389600480360381019061038491906133c1565b610c58565b005b610393610cf5565b005b6103af60048036038101906103aa9190613619565b610d7d565b005b6103b9610d98565b005b6103c3610e1e565b6040516103d09190613bed565b60405180910390f35b6103f360048036038101906103ee91906134eb565b610e48565b005b61040f600480360381019061040a9190613563565b610e5e565b005b61042b600480360381019061042691906137bc565b610e91565b005b610447600480360381019061044291906137bc565b611009565b6040516104549190614020565b60405180910390f35b61047760048036038101906104729190613237565b611026565b6040516104849190613d83565b60405180910390f35b6104a760048036038101906104a29190613332565b6110ba565b005b6104c360048036038101906104be91906131d2565b61115b565b005b6104df60048036038101906104da91906131fb565b611253565b005b6104fb60048036038101906104f691906135ca565b6113ca565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561056e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056590613e20565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061069157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106a157506106a082611467565b5b9050919050565b6106b06114d1565b73ffffffffffffffffffffffffffffffffffffffff166106ce610e1e565b73ffffffffffffffffffffffffffffffffffffffff1614610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071b90613f40565b60405180910390fd5b61072d816114d9565b50565b60606002805461073f9061433c565b80601f016020809104026020016040519081016040528092919081815260200182805461076b9061433c565b80156107b85780601f1061078d576101008083540402835291602001916107b8565b820191906000526020600020905b81548152906001019060200180831161079b57829003601f168201915b50505050509050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107f66114d1565b73ffffffffffffffffffffffffffffffffffffffff16610814610e1e565b73ffffffffffffffffffffffffffffffffffffffff161461086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190613f40565b60405180910390fd5b610876848484846114f3565b50505050565b6108846114d1565b73ffffffffffffffffffffffffffffffffffffffff166108a2610e1e565b73ffffffffffffffffffffffffffffffffffffffff16146108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ef90613f40565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109446114d1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061098a5750610989856109846114d1565b611026565b5b6109c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c090613ee0565b60405180910390fd5b6109d6858585858561175d565b5050505050565b6109e8338383611abd565b6109f23382611253565b5050565b6109fe6114d1565b73ffffffffffffffffffffffffffffffffffffffff16610a1c610e1e565b73ffffffffffffffffffffffffffffffffffffffff1614610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6990613f40565b60405180910390fd5b610a7a611cda565b565b60608151835114610ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab990613fc0565b60405180910390fd5b6000835167ffffffffffffffff811115610b05577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b335781602001602082028036833780820191505090505b50905060005b8451811015610c2257610bcc858281518110610b7e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610bbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516104fd565b828281518110610c05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610c1b9061439f565b9050610b39565b508091505092915050565b600080610c3983611009565b119050919050565b6000600360149054906101000a900460ff16905090565b610c606114d1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ca65750610ca583610ca06114d1565b611026565b5b610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc90613e80565b60405180910390fd5b610cf0838383611d7c565b505050565b610cfd6114d1565b73ffffffffffffffffffffffffffffffffffffffff16610d1b610e1e565b73ffffffffffffffffffffffffffffffffffffffff1614610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890613f40565b60405180910390fd5b610d7b6000612079565b565b610d8682610e91565b610d928484848461213f565b50505050565b610da06114d1565b73ffffffffffffffffffffffffffffffffffffffff16610dbe610e1e565b73ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b90613f40565b60405180910390fd5b610e1c6122d5565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e5a610e536114d1565b8383612378565b5050565b610e6782610e91565b610e7160066124e5565b6000610e7d60066124fb565b9050610e8b8482858561213f565b50505050565b610e996114d1565b73ffffffffffffffffffffffffffffffffffffffff16610eb7610e1e565b73ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490613f40565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610f6c93929190613c99565b602060405180830381600087803b158015610f8657600080fd5b505af1158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe9190613700565b50610fc7612509565b611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613f60565b60405180910390fd5b50565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110c26114d1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111085750611107856111026114d1565b611026565b5b611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e90613e80565b60405180910390fd5b6111548585858585612547565b5050505050565b6111636114d1565b73ffffffffffffffffffffffffffffffffffffffff16611181610e1e565b73ffffffffffffffffffffffffffffffffffffffff16146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90613f40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90613e40565b60405180910390fd5b61125081612079565b50565b61125b6114d1565b73ffffffffffffffffffffffffffffffffffffffff16611279610e1e565b73ffffffffffffffffffffffffffffffffffffffff16146112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690613f40565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161132c929190613c08565b602060405180830381600087803b15801561134657600080fd5b505af115801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e9190613700565b50611387612509565b6113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd90613f80565b60405180910390fd5b5050565b6113d26114d1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114185750611417836114126114d1565b611026565b5b611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90613e80565b60405180910390fd5b611462838383611abd565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906114ef929190612ea0565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155a90614000565b60405180910390fd5b81518351146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90613fe0565b60405180910390fd5b60006115b16114d1565b90506115c2816000878787876127c9565b60005b84518110156116c757838181518110611607577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160008087848151811061164b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116ad91906141b4565b9250508190555080806116bf9061439f565b9150506115c5565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161173f929190613d4c565b60405180910390a4611756816000878787876127df565b5050505050565b81518351146117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890613fe0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180890613ec0565b60405180910390fd5b600061181b6114d1565b905061182b8187878787876127c9565b60005b8451811015611a28576000858281518110611872577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008583815181106118b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90613f20565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a0d91906141b4565b9250508190555050505080611a219061439f565b905061182e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a9f929190613d4c565b60405180910390a4611ab58187878787876127df565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2490613f00565b60405180910390fd5b6000611b376114d1565b9050611b6781856000611b49876129c6565b611b52876129c6565b604051806020016040528060008152506127c9565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590613e60565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611ccb92919061403b565b60405180910390a45050505050565b611ce2610c41565b611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1890613e00565b60405180910390fd5b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611d656114d1565b604051611d729190613bed565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de390613f00565b60405180910390fd5b8051825114611e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2790613fe0565b60405180910390fd5b6000611e3a6114d1565b9050611e5a818560008686604051806020016040528060008152506127c9565b60005b8351811015611ff3576000848281518110611ea1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110611ee6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e90613e60565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611feb9061439f565b915050611e5d565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161206b929190613d4c565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690614000565b60405180910390fd5b60006121b96114d1565b90506121da816000876121cb886129c6565b6121d4886129c6565b876127c9565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223991906141b4565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516122b792919061403b565b60405180910390a46122ce81600087878787612a8c565b5050505050565b6122dd610c41565b1561231d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231490613ea0565b60405180910390fd5b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586123616114d1565b60405161236e9190613bed565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123de90613fa0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124d89190613d83565b60405180910390a3505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080600090503d60008114612526576020811461252f5761253b565b6001915061253b565b60206000803e60005191505b50600081141591505090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90613ec0565b60405180910390fd5b60006125c16114d1565b90506125e18187876125d2886129c6565b6125db886129c6565b876127c9565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f90613f20565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461272d91906141b4565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516127aa92919061403b565b60405180910390a46127c0828888888888612a8c565b50505050505050565b6127d7868686868686612c73565b505050505050565b6127fe8473ffffffffffffffffffffffffffffffffffffffff16612e85565b156129be578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612844959493929190613c31565b602060405180830381600087803b15801561285e57600080fd5b505af192505050801561288f57506040513d601f19601f8201168201806040525081019061288c9190613752565b60015b6129355761289b614475565b806308c379a014156128f857506128b0614a20565b806128bb57506128fa565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef9190613d9e565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292c90613dc0565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b390613de0565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612a0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a395781602001602082028036833780820191505090505b5090508281600081518110612a77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b612aab8473ffffffffffffffffffffffffffffffffffffffff16612e85565b15612c6b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612af1959493929190613cd0565b602060405180830381600087803b158015612b0b57600080fd5b505af1925050508015612b3c57506040513d601f19601f82011682018060405250810190612b399190613752565b60015b612be257612b48614475565b806308c379a01415612ba55750612b5d614a20565b80612b685750612ba7565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9c9190613d9e565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd990613dc0565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6090613de0565b60405180910390fd5b505b505050505050565b612c81868686868686612e98565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612d7f5760005b8351811015612d7d57828181518110612cfb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160046000868481518110612d40577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206000828254612d6591906141b4565b9250508190555080612d769061439f565b9050612cb9565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e7d5760005b8351811015612e7b57828181518110612df9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160046000868481518110612e3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206000828254612e63919061420a565b9250508190555080612e749061439f565b9050612db7565b505b505050505050565b600080823b905060008111915050919050565b505050505050565b828054612eac9061433c565b90600052602060002090601f016020900481019282612ece5760008555612f15565b82601f10612ee757805160ff1916838001178555612f15565b82800160010185558215612f15579182015b82811115612f14578251825591602001919060010190612ef9565b5b509050612f229190612f26565b5090565b5b80821115612f3f576000816000905550600101612f27565b5090565b6000612f56612f5184614089565b614064565b90508083825260208201905082856020860282011115612f7557600080fd5b60005b85811015612fa55781612f8b8882613097565b845260208401935060208301925050600181019050612f78565b5050509392505050565b6000612fc2612fbd846140b5565b614064565b90508083825260208201905082856020860282011115612fe157600080fd5b60005b858110156130115781612ff788826131bd565b845260208401935060208301925050600181019050612fe4565b5050509392505050565b600061302e613029846140e1565b614064565b90508281526020810184848401111561304657600080fd5b6130518482856142fa565b509392505050565b600061306c61306784614112565b614064565b90508281526020810184848401111561308457600080fd5b61308f8482856142fa565b509392505050565b6000813590506130a681614ab6565b92915050565b6000813590506130bb81614acd565b92915050565b600082601f8301126130d257600080fd5b81356130e2848260208601612f43565b91505092915050565b600082601f8301126130fc57600080fd5b813561310c848260208601612faf565b91505092915050565b60008135905061312481614ae4565b92915050565b60008151905061313981614ae4565b92915050565b60008135905061314e81614afb565b92915050565b60008151905061316381614afb565b92915050565b600082601f83011261317a57600080fd5b813561318a84826020860161301b565b91505092915050565b600082601f8301126131a457600080fd5b81356131b4848260208601613059565b91505092915050565b6000813590506131cc81614b12565b92915050565b6000602082840312156131e457600080fd5b60006131f284828501613097565b91505092915050565b6000806040838503121561320e57600080fd5b600061321c858286016130ac565b925050602061322d858286016131bd565b9150509250929050565b6000806040838503121561324a57600080fd5b600061325885828601613097565b925050602061326985828601613097565b9150509250929050565b600080600080600060a0868803121561328b57600080fd5b600061329988828901613097565b95505060206132aa88828901613097565b945050604086013567ffffffffffffffff8111156132c757600080fd5b6132d3888289016130eb565b935050606086013567ffffffffffffffff8111156132f057600080fd5b6132fc888289016130eb565b925050608086013567ffffffffffffffff81111561331957600080fd5b61332588828901613169565b9150509295509295909350565b600080600080600060a0868803121561334a57600080fd5b600061335888828901613097565b955050602061336988828901613097565b945050604061337a888289016131bd565b935050606061338b888289016131bd565b925050608086013567ffffffffffffffff8111156133a857600080fd5b6133b488828901613169565b9150509295509295909350565b6000806000606084860312156133d657600080fd5b60006133e486828701613097565b935050602084013567ffffffffffffffff81111561340157600080fd5b61340d868287016130eb565b925050604084013567ffffffffffffffff81111561342a57600080fd5b613436868287016130eb565b9150509250925092565b6000806000806080858703121561345657600080fd5b600061346487828801613097565b945050602085013567ffffffffffffffff81111561348157600080fd5b61348d878288016130eb565b935050604085013567ffffffffffffffff8111156134aa57600080fd5b6134b6878288016130eb565b925050606085013567ffffffffffffffff8111156134d357600080fd5b6134df87828801613169565b91505092959194509250565b600080604083850312156134fe57600080fd5b600061350c85828601613097565b925050602061351d85828601613115565b9150509250929050565b6000806040838503121561353a57600080fd5b600061354885828601613097565b9250506020613559858286016131bd565b9150509250929050565b60008060006060848603121561357857600080fd5b600061358686828701613097565b9350506020613597868287016131bd565b925050604084013567ffffffffffffffff8111156135b457600080fd5b6135c086828701613169565b9150509250925092565b6000806000606084860312156135df57600080fd5b60006135ed86828701613097565b93505060206135fe868287016131bd565b925050604061360f868287016131bd565b9150509250925092565b6000806000806080858703121561362f57600080fd5b600061363d87828801613097565b945050602061364e878288016131bd565b935050604061365f878288016131bd565b925050606085013567ffffffffffffffff81111561367c57600080fd5b61368887828801613169565b91505092959194509250565b600080604083850312156136a757600080fd5b600083013567ffffffffffffffff8111156136c157600080fd5b6136cd858286016130c1565b925050602083013567ffffffffffffffff8111156136ea57600080fd5b6136f6858286016130eb565b9150509250929050565b60006020828403121561371257600080fd5b60006137208482850161312a565b91505092915050565b60006020828403121561373b57600080fd5b60006137498482850161313f565b91505092915050565b60006020828403121561376457600080fd5b600061377284828501613154565b91505092915050565b60006020828403121561378d57600080fd5b600082013567ffffffffffffffff8111156137a757600080fd5b6137b384828501613193565b91505092915050565b6000602082840312156137ce57600080fd5b60006137dc848285016131bd565b91505092915050565b600080604083850312156137f857600080fd5b6000613806858286016131bd565b9250506020613817858286016131bd565b9150509250929050565b600061382d8383613bcf565b60208301905092915050565b613842816142c4565b82525050565b6138518161423e565b82525050565b600061386282614153565b61386c8185614181565b935061387783614143565b8060005b838110156138a857815161388f8882613821565b975061389a83614174565b92505060018101905061387b565b5085935050505092915050565b6138be81614262565b82525050565b60006138cf8261415e565b6138d98185614192565b93506138e9818560208601614309565b6138f281614497565b840191505092915050565b600061390882614169565b61391281856141a3565b9350613922818560208601614309565b61392b81614497565b840191505092915050565b60006139436034836141a3565b915061394e826144b5565b604082019050919050565b60006139666028836141a3565b915061397182614504565b604082019050919050565b60006139896014836141a3565b915061399482614553565b602082019050919050565b60006139ac602b836141a3565b91506139b78261457c565b604082019050919050565b60006139cf6026836141a3565b91506139da826145cb565b604082019050919050565b60006139f26024836141a3565b91506139fd8261461a565b604082019050919050565b6000613a156029836141a3565b9150613a2082614669565b604082019050919050565b6000613a386010836141a3565b9150613a43826146b8565b602082019050919050565b6000613a5b6025836141a3565b9150613a66826146e1565b604082019050919050565b6000613a7e6032836141a3565b9150613a8982614730565b604082019050919050565b6000613aa16023836141a3565b9150613aac8261477f565b604082019050919050565b6000613ac4602a836141a3565b9150613acf826147ce565b604082019050919050565b6000613ae76020836141a3565b9150613af28261481d565b602082019050919050565b6000613b0a6021836141a3565b9150613b1582614846565b604082019050919050565b6000613b2d6022836141a3565b9150613b3882614895565b604082019050919050565b6000613b506029836141a3565b9150613b5b826148e4565b604082019050919050565b6000613b736029836141a3565b9150613b7e82614933565b604082019050919050565b6000613b966028836141a3565b9150613ba182614982565b604082019050919050565b6000613bb96021836141a3565b9150613bc4826149d1565b604082019050919050565b613bd8816142ba565b82525050565b613be7816142ba565b82525050565b6000602082019050613c026000830184613848565b92915050565b6000604082019050613c1d6000830185613839565b613c2a6020830184613bde565b9392505050565b600060a082019050613c466000830188613848565b613c536020830187613848565b8181036040830152613c658186613857565b90508181036060830152613c798185613857565b90508181036080830152613c8d81846138c4565b90509695505050505050565b6000606082019050613cae6000830186613848565b613cbb6020830185613848565b613cc86040830184613bde565b949350505050565b600060a082019050613ce56000830188613848565b613cf26020830187613848565b613cff6040830186613bde565b613d0c6060830185613bde565b8181036080830152613d1e81846138c4565b90509695505050505050565b60006020820190508181036000830152613d448184613857565b905092915050565b60006040820190508181036000830152613d668185613857565b90508181036020830152613d7a8184613857565b90509392505050565b6000602082019050613d9860008301846138b5565b92915050565b60006020820190508181036000830152613db881846138fd565b905092915050565b60006020820190508181036000830152613dd981613936565b9050919050565b60006020820190508181036000830152613df981613959565b9050919050565b60006020820190508181036000830152613e198161397c565b9050919050565b60006020820190508181036000830152613e398161399f565b9050919050565b60006020820190508181036000830152613e59816139c2565b9050919050565b60006020820190508181036000830152613e79816139e5565b9050919050565b60006020820190508181036000830152613e9981613a08565b9050919050565b60006020820190508181036000830152613eb981613a2b565b9050919050565b60006020820190508181036000830152613ed981613a4e565b9050919050565b60006020820190508181036000830152613ef981613a71565b9050919050565b60006020820190508181036000830152613f1981613a94565b9050919050565b60006020820190508181036000830152613f3981613ab7565b9050919050565b60006020820190508181036000830152613f5981613ada565b9050919050565b60006020820190508181036000830152613f7981613afd565b9050919050565b60006020820190508181036000830152613f9981613b20565b9050919050565b60006020820190508181036000830152613fb981613b43565b9050919050565b60006020820190508181036000830152613fd981613b66565b9050919050565b60006020820190508181036000830152613ff981613b89565b9050919050565b6000602082019050818103600083015261401981613bac565b9050919050565b60006020820190506140356000830184613bde565b92915050565b60006040820190506140506000830185613bde565b61405d6020830184613bde565b9392505050565b600061406e61407f565b905061407a828261436e565b919050565b6000604051905090565b600067ffffffffffffffff8211156140a4576140a3614446565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156140d0576140cf614446565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156140fc576140fb614446565b5b61410582614497565b9050602081019050919050565b600067ffffffffffffffff82111561412d5761412c614446565b5b61413682614497565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006141bf826142ba565b91506141ca836142ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141ff576141fe6143e8565b5b828201905092915050565b6000614215826142ba565b9150614220836142ba565b925082821015614233576142326143e8565b5b828203905092915050565b60006142498261429a565b9050919050565b600061425b8261429a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006142cf826142d6565b9050919050565b60006142e1826142e8565b9050919050565b60006142f38261429a565b9050919050565b82818337600083830152505050565b60005b8381101561432757808201518184015260208101905061430c565b83811115614336576000848401525b50505050565b6000600282049050600182168061435457607f821691505b6020821081141561436857614367614417565b5b50919050565b61437782614497565b810181811067ffffffffffffffff8211171561439657614395614446565b5b80604052505050565b60006143aa826142ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143dd576143dc6143e8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156144945760046000803e6144916000516144a8565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496d67546f6b656e236465706f7369743a205452414e534645525f4641494c4560008201527f4400000000000000000000000000000000000000000000000000000000000000602082015250565b7f496d67546f6b656e2377697468647261773a205452414e534645525f4641494c60008201527f4544000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614a3057614ab3565b614a3861407f565b60043d036004823e80513d602482011167ffffffffffffffff82111715614a60575050614ab3565b808201805167ffffffffffffffff811115614a7e5750505050614ab3565b80602083010160043d038501811115614a9b575050505050614ab3565b614aaa8260200185018661436e565b82955050505050505b90565b614abf8161423e565b8114614aca57600080fd5b50565b614ad681614250565b8114614ae157600080fd5b50565b614aed81614262565b8114614af857600080fd5b50565b614b048161426e565b8114614b0f57600080fd5b50565b614b1b816142ba565b8114614b2657600080fd5b5056fea26469706673582212203903b1bda350492c2fa958ea0dede081ee46ef6bf15a603f72881d9540743c2b64736f6c63430008040033000000000000000000000000e11a86849d99f524cac3e7a0ec1241828e332c62

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

000000000000000000000000e11a86849d99f524cac3e7a0ec1241828e332c62

-----Decoded View---------------
Arg [0] : _tokenAdd (address): 0xe11a86849d99f524cac3e7a0ec1241828e332c62

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000e11a86849d99f524cac3e7a0ec1241828e332c62


Deployed ByteCode Sourcemap

241:4020:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2115:228:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1166:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;952:87:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1870:103:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;782:136:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2654:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;674:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3990:430:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1447:162:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1110:63;;;:::i;:::-;;2500:508:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;885:120:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1091:84:14;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;708:342:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1661:101:13;;;:::i;:::-;;1206:181:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1045:59;;;:::i;:::-;;1029:85:13;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3076:153:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1615:268:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1890:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;681:111:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3296:166:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3529:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1911:198:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2380:237:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;392:310:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2115:228:3;2201:7;2247:1;2228:21;;:7;:21;;;;2220:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2314:9;:13;2324:2;2314:13;;;;;;;;;;;:22;2328:7;2314:22;;;;;;;;;;;;;;;;2307:29;;2115:228;;;;:::o;1166:305::-;1268:4;1318:26;1303:41;;;:11;:41;;;;:109;;;;1375:37;1360:52;;;:11;:52;;;;1303:109;:161;;;;1428:36;1452:11;1428:23;:36::i;:::-;1303:161;1284:180;;1166:305;;;:::o;952:87:7:-;1252:12:13;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1017:15:7::1;1025:6;1017:7;:15::i;:::-;952:87:::0;:::o;1870:103:3:-;1930:13;1962:4;1955:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1870:103;;;:::o;782:136:7:-;830:17;872:12;;;;;;;;;;;860:24;;782:136;:::o;2654:186::-;1252:12:13;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2799:34:7::1;2810:2;2814:3;2819:7;2828:4;2799:10;:34::i;:::-;2654:186:::0;;;;:::o;674:102::-;1252:12:13;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;760:9:7::1;745:12;;:24;;;;;;;;;;;;;;;;;;674:102:::0;:::o;3990:430:3:-;4223:12;:10;:12::i;:::-;4215:20;;:4;:20;;;:60;;;;4239:36;4256:4;4262:12;:10;:12::i;:::-;4239:16;:36::i;:::-;4215:60;4194:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;4361:52;4384:4;4390:2;4394:3;4399:7;4408:4;4361:22;:52::i;:::-;3990:430;;;;;:::o;1447:162:7:-;1523:30;1529:10;1541:2;1546:6;1523:5;:30::i;:::-;1564:37;1581:10;1594:6;1564:8;:37::i;:::-;1447:162;;:::o;1110:63::-;1252:12:13;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1156:10:7::1;:8;:10::i;:::-;1110:63::o:0;2500:508:3:-;2651:16;2710:3;:10;2691:8;:15;:29;2683:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2777:30;2824:8;:15;2810:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2777:63;;2856:9;2851:120;2875:8;:15;2871:1;:19;2851:120;;;2930:30;2940:8;2949:1;2940:11;;;;;;;;;;;;;;;;;;;;;;2953:3;2957:1;2953:6;;;;;;;;;;;;;;;;;;;;;;2930:9;:30::i;:::-;2911:13;2925:1;2911:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;2892:3;;;;:::i;:::-;;;2851:120;;;;2988:13;2981:20;;;2500:508;;;;:::o;885:120:5:-;942:4;997:1;965:29;991:2;965:25;:29::i;:::-;:33;958:40;;885:120;;;:::o;1091:84:14:-;1138:4;1161:7;;;;;;;;;;;1154:14;;1091:84;:::o;708:342:4:-;878:12;:10;:12::i;:::-;867:23;;:7;:23;;;:66;;;;894:39;911:7;920:12;:10;:12::i;:::-;894:16;:39::i;:::-;867:66;846:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;1011:32;1022:7;1031:3;1036:6;1011:10;:32::i;:::-;708:342;;;:::o;1661:101:13:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1206:181:7:-;1322:15;1330:6;1322:7;:15::i;:::-;1348:32;1354:7;1363:2;1367:6;1375:4;1348:5;:32::i;:::-;1206:181;;;;:::o;1045:59::-;1252:12:13;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1089:8:7::1;:6;:8::i;:::-;1045:59::o:0;1029:85:13:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;3076:153:3:-;3170:52;3189:12;:10;:12::i;:::-;3203:8;3213;3170:18;:52::i;:::-;3076:153;;:::o;1615:268:7:-;1725:15;1733:6;1725:7;:15::i;:::-;1751:21;:9;:19;:21::i;:::-;1782:18;1803:19;:9;:17;:19::i;:::-;1782:40;;1833:43;1839:10;1851;1863:6;1871:4;1833:5;:43::i;:::-;1615:268;;;;:::o;1890:265::-;1252:12:13;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2016:12:7::1;;;;;;;;;;;2009:33;;;2043:10;2063:4;2070:6;2009:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2095:14;:12;:14::i;:::-;2087:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;1890:265:::0;:::o;681:111:5:-;743:7;769:12;:16;782:2;769:16;;;;;;;;;;;;762:23;;681:111;;;:::o;3296:166:3:-;3395:4;3418:18;:27;3437:7;3418:27;;;;;;;;;;;;;;;:37;3446:8;3418:37;;;;;;;;;;;;;;;;;;;;;;;;;3411:44;;3296:166;;;;:::o;3529:389::-;3737:12;:10;:12::i;:::-;3729:20;;:4;:20;;;:60;;;;3753:36;3770:4;3776:12;:10;:12::i;:::-;3753:16;:36::i;:::-;3729:60;3708:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;3866:45;3884:4;3890:2;3894;3898:6;3906:4;3866:17;:45::i;:::-;3529:389;;;;;:::o;1911:198:13:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;2380:237:7:-;1252:12:13;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2506:12:7::1;;;;;;;;;;;2499:29;;;2529:3;2534:6;2499:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2557:14;:12;:14::i;:::-;2549:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2380:237:::0;;:::o;392:310:4:-;537:12;:10;:12::i;:::-;526:23;;:7;:23;;;:66;;;;553:39;570:7;579:12;:10;:12::i;:::-;553:16;:39::i;:::-;526:66;505:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;670:25;676:7;685:2;689:5;670;:25::i;:::-;392:310;;;:::o;829:155:6:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;7881:86:3:-;7954:6;7947:4;:13;;;;;;;;;;;;:::i;:::-;;7881:86;:::o;9238:715::-;9424:1;9410:16;;:2;:16;;;;9402:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9496:7;:14;9482:3;:10;:28;9474:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;9566:16;9585:12;:10;:12::i;:::-;9566:31;;9608:66;9629:8;9647:1;9651:2;9655:3;9660:7;9669:4;9608:20;:66::i;:::-;9690:9;9685:101;9709:3;:10;9705:1;:14;9685:101;;;9765:7;9773:1;9765:10;;;;;;;;;;;;;;;;;;;;;;9740:9;:17;9750:3;9754:1;9750:6;;;;;;;;;;;;;;;;;;;;;;9740:17;;;;;;;;;;;:21;9758:2;9740:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;9721:3;;;;;:::i;:::-;;;;9685:101;;;;9837:2;9801:53;;9833:1;9801:53;;9815:8;9801:53;;;9841:3;9846:7;9801:53;;;;;;;:::i;:::-;;;;;;;;9865:81;9901:8;9919:1;9923:2;9927:3;9932:7;9941:4;9865:35;:81::i;:::-;9238:715;;;;;:::o;6013:1045::-;6233:7;:14;6219:3;:10;:28;6211:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6324:1;6310:16;;:2;:16;;;;6302:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6379:16;6398:12;:10;:12::i;:::-;6379:31;;6421:60;6442:8;6452:4;6458:2;6462:3;6467:7;6476:4;6421:20;:60::i;:::-;6497:9;6492:411;6516:3;:10;6512:1;:14;6492:411;;;6547:10;6560:3;6564:1;6560:6;;;;;;;;;;;;;;;;;;;;;;6547:19;;6580:14;6597:7;6605:1;6597:10;;;;;;;;;;;;;;;;;;;;;;6580:27;;6622:19;6644:9;:13;6654:2;6644:13;;;;;;;;;;;:19;6658:4;6644:19;;;;;;;;;;;;;;;;6622:41;;6700:6;6685:11;:21;;6677:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;6831:6;6817:11;:20;6795:9;:13;6805:2;6795:13;;;;;;;;;;;:19;6809:4;6795:19;;;;;;;;;;;;;;;:42;;;;6886:6;6865:9;:13;6875:2;6865:13;;;;;;;;;;;:17;6879:2;6865:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6492:411;;;6528:3;;;;:::i;:::-;;;6492:411;;;;6948:2;6918:47;;6942:4;6918:47;;6932:8;6918:47;;;6952:3;6957:7;6918:47;;;;;;;:::i;:::-;;;;;;;;6976:75;7012:8;7022:4;7028:2;7032:3;7037:7;7046:4;6976:35;:75::i;:::-;6013:1045;;;;;;:::o;10193:630::-;10331:1;10315:18;;:4;:18;;;;10307:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;10384:16;10403:12;:10;:12::i;:::-;10384:31;;10426:102;10447:8;10457:4;10471:1;10475:21;10493:2;10475:17;:21::i;:::-;10498:25;10516:6;10498:17;:25::i;:::-;10426:102;;;;;;;;;;;;:20;:102::i;:::-;10539:19;10561:9;:13;10571:2;10561:13;;;;;;;;;;;:19;10575:4;10561:19;;;;;;;;;;;;;;;;10539:41;;10613:6;10598:11;:21;;10590:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10730:6;10716:11;:20;10694:9;:13;10704:2;10694:13;;;;;;;;;;;:19;10708:4;10694:19;;;;;;;;;;;;;;;:42;;;;10801:1;10762:54;;10787:4;10762:54;;10777:8;10762:54;;;10805:2;10809:6;10762:54;;;;;;;:::i;:::-;;;;;;;;10193:630;;;;;:::o;2103:117:14:-;1670:8;:6;:8::i;:::-;1662:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;2171:5:::1;2161:7;;:15;;;;;;;;;;;;;;;;;;2191:22;2200:12;:10;:12::i;:::-;2191:22;;;;;;:::i;:::-;;;;;;;;2103:117::o:0;11017:867:3:-;11180:1;11164:18;;:4;:18;;;;11156:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11254:7;:14;11240:3;:10;:28;11232:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11324:16;11343:12;:10;:12::i;:::-;11324:31;;11366:66;11387:8;11397:4;11411:1;11415:3;11420:7;11366:66;;;;;;;;;;;;:20;:66::i;:::-;11448:9;11443:364;11467:3;:10;11463:1;:14;11443:364;;;11498:10;11511:3;11515:1;11511:6;;;;;;;;;;;;;;;;;;;;;;11498:19;;11531:14;11548:7;11556:1;11548:10;;;;;;;;;;;;;;;;;;;;;;11531:27;;11573:19;11595:9;:13;11605:2;11595:13;;;;;;;;;;;:19;11609:4;11595:19;;;;;;;;;;;;;;;;11573:41;;11651:6;11636:11;:21;;11628:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11776:6;11762:11;:20;11740:9;:13;11750:2;11740:13;;;;;;;;;;;:19;11754:4;11740:19;;;;;;;;;;;;;;;:42;;;;11443:364;;;11479:3;;;;;:::i;:::-;;;;11443:364;;;;11860:1;11822:55;;11846:4;11822:55;;11836:8;11822:55;;;11864:3;11869:7;11822:55;;;;;;;:::i;:::-;;;;;;;;11017:867;;;;:::o;2263:187:13:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2263:187;;:::o;8340:553:3:-;8501:1;8487:16;;:2;:16;;;;8479:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8552:16;8571:12;:10;:12::i;:::-;8552:31;;8594:102;8615:8;8633:1;8637:2;8641:21;8659:2;8641:17;:21::i;:::-;8664:25;8682:6;8664:17;:25::i;:::-;8691:4;8594:20;:102::i;:::-;8728:6;8707:9;:13;8717:2;8707:13;;;;;;;;;;;:17;8721:2;8707:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;8786:2;8749:52;;8782:1;8749:52;;8764:8;8749:52;;;8790:2;8794:6;8749:52;;;;;;;:::i;:::-;;;;;;;;8812:74;8843:8;8861:1;8865:2;8869;8873:6;8881:4;8812:30;:74::i;:::-;8340:553;;;;;:::o;1856:115:14:-;1405:8;:6;:8::i;:::-;1404:9;1396:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1925:4:::1;1915:7;;:14;;;;;;;;;;;;;;;;;;1944:20;1951:12;:10;:12::i;:::-;1944:20;;;;;;:::i;:::-;;;;;;;;1856:115::o:0;12019:323:3:-;12169:8;12160:17;;:5;:17;;;;12152:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12271:8;12233:18;:25;12252:5;12233:25;;;;;;;;;;;;;;;:35;12259:8;12233:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12316:8;12294:41;;12309:5;12294:41;;;12326:8;12294:41;;;;;;:::i;:::-;;;;;;;;12019:323;;;:::o;945:123:2:-;1050:1;1032:7;:14;;;:19;;;;;;;;;;;945:123;:::o;827:112::-;892:7;918;:14;;;911:21;;827:112;;;:::o;3489:745:7:-;3543:4;3557:19;3579:1;3557:23;;3738:16;3814:3;3809:47;;;;3919:4;3914:192;;;;3731:456;;3809:47;3845:1;3830:16;;3809:47;;3914:192;4007:4;4002:3;3997;3982:30;4092:3;4086:10;4071:25;;3731:456;;4228:1;4213:11;:16;;4206:23;;;3489:745;:::o;4870:797:3:-;5065:1;5051:16;;:2;:16;;;;5043:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5120:16;5139:12;:10;:12::i;:::-;5120:31;;5162:96;5183:8;5193:4;5199:2;5203:21;5221:2;5203:17;:21::i;:::-;5226:25;5244:6;5226:17;:25::i;:::-;5253:4;5162:20;:96::i;:::-;5269:19;5291:9;:13;5301:2;5291:13;;;;;;;;;;;:19;5305:4;5291:19;;;;;;;;;;;;;;;;5269:41;;5343:6;5328:11;:21;;5320:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5466:6;5452:11;:20;5430:9;:13;5440:2;5430:13;;;;;;;;;;;:19;5444:4;5430:19;;;;;;;;;;;;;;;:42;;;;5513:6;5492:9;:13;5502:2;5492:13;;;;;;;;;;;:17;5506:2;5492:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5566:2;5535:46;;5560:4;5535:46;;5550:8;5535:46;;;5570:2;5574:6;5535:46;;;;;;;:::i;:::-;;;;;;;;5592:68;5623:8;5633:4;5639:2;5643;5647:6;5655:4;5592:30;:68::i;:::-;4870:797;;;;;;;:::o;2847:286:7:-;3060:66;3087:8;3097:4;3103:2;3107:3;3112:7;3121:4;3060:26;:66::i;:::-;2847:286;;;;;;:::o;14227:792:3:-;14459:15;:2;:13;;;:15::i;:::-;14455:558;;;14511:2;14494:43;;;14538:8;14548:4;14554:3;14559:7;14568:4;14494:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14490:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14879:6;14872:14;;;;;;;;;;;:::i;:::-;;;;;;;;14490:513;;;14926:62;;;;;;;;;;:::i;:::-;;;;;;;;14490:513;14664:48;;;14652:60;;;:8;:60;;;;14648:157;;14736:50;;;;;;;;;;:::i;:::-;;;;;;;;14648:157;14574:245;14455:558;14227:792;;;;;;:::o;15025:193::-;15091:16;15119:22;15158:1;15144:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15119:41;;15181:7;15170:5;15176:1;15170:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;15206:5;15199:12;;;15025:193;;;:::o;13496:725::-;13703:15;:2;:13;;;:15::i;:::-;13699:516;;;13755:2;13738:38;;;13777:8;13787:4;13793:2;13797:6;13805:4;13738:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13734:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14081:6;14074:14;;;;;;;;;;;:::i;:::-;;;;;;;;13734:471;;;14128:62;;;;;;;;;;:::i;:::-;;;;;;;;13734:471;13871:43;;;13859:55;;;:8;:55;;;;13855:152;;13938:50;;;;;;;;;;:::i;:::-;;;;;;;;13855:152;13811:210;13699:516;13496:725;;;;;;:::o;1075:634:5:-;1306:66;1333:8;1343:4;1349:2;1353:3;1358:7;1367:4;1306:26;:66::i;:::-;1403:1;1387:18;;:4;:18;;;1383:156;;;1426:9;1421:108;1445:3;:10;1441:1;:14;1421:108;;;1504:7;1512:1;1504:10;;;;;;;;;;;;;;;;;;;;;;1480:12;:20;1493:3;1497:1;1493:6;;;;;;;;;;;;;;;;;;;;;;1480:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;1457:3;;;;:::i;:::-;;;1421:108;;;;1383:156;1567:1;1553:16;;:2;:16;;;1549:154;;;1590:9;1585:108;1609:3;:10;1605:1;:14;1585:108;;;1668:7;1676:1;1668:10;;;;;;;;;;;;;;;;;;;;;;1644:12;:20;1657:3;1661:1;1657:6;;;;;;;;;;;;;;;;;;;;;;1644:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;1621:3;;;;:::i;:::-;;;1585:108;;;;1549:154;1075:634;;;;;;:::o;771:377:0:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;13276:214:3:-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:15:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2208:155::-;2262:5;2300:6;2287:20;2278:29;;2316:41;2351:5;2316:41;:::i;:::-;2268:95;;;;:::o;2386:303::-;2457:5;2506:3;2499:4;2491:6;2487:17;2483:27;2473:2;;2524:1;2521;2514:12;2473:2;2564:6;2551:20;2589:94;2679:3;2671:6;2664:4;2656:6;2652:17;2589:94;:::i;:::-;2580:103;;2463:226;;;;;:::o;2712:303::-;2783:5;2832:3;2825:4;2817:6;2813:17;2809:27;2799:2;;2850:1;2847;2840:12;2799:2;2890:6;2877:20;2915:94;3005:3;2997:6;2990:4;2982:6;2978:17;2915:94;:::i;:::-;2906:103;;2789:226;;;;;:::o;3021:133::-;3064:5;3102:6;3089:20;3080:29;;3118:30;3142:5;3118:30;:::i;:::-;3070:84;;;;:::o;3160:137::-;3214:5;3245:6;3239:13;3230:22;;3261:30;3285:5;3261:30;:::i;:::-;3220:77;;;;:::o;3303:137::-;3348:5;3386:6;3373:20;3364:29;;3402:32;3428:5;3402:32;:::i;:::-;3354:86;;;;:::o;3446:141::-;3502:5;3533:6;3527:13;3518:22;;3549:32;3575:5;3549:32;:::i;:::-;3508:79;;;;:::o;3606:271::-;3661:5;3710:3;3703:4;3695:6;3691:17;3687:27;3677:2;;3728:1;3725;3718:12;3677:2;3768:6;3755:20;3793:78;3867:3;3859:6;3852:4;3844:6;3840:17;3793:78;:::i;:::-;3784:87;;3667:210;;;;;:::o;3897:273::-;3953:5;4002:3;3995:4;3987:6;3983:17;3979:27;3969:2;;4020:1;4017;4010:12;3969:2;4060:6;4047:20;4085:79;4160:3;4152:6;4145:4;4137:6;4133:17;4085:79;:::i;:::-;4076:88;;3959:211;;;;;:::o;4176:139::-;4222:5;4260:6;4247:20;4238:29;;4276:33;4303:5;4276:33;:::i;:::-;4228:87;;;;:::o;4321:262::-;4380:6;4429:2;4417:9;4408:7;4404:23;4400:32;4397:2;;;4445:1;4442;4435:12;4397:2;4488:1;4513:53;4558:7;4549:6;4538:9;4534:22;4513:53;:::i;:::-;4503:63;;4459:117;4387:196;;;;:::o;4589:423::-;4665:6;4673;4722:2;4710:9;4701:7;4697:23;4693:32;4690:2;;;4738:1;4735;4728:12;4690:2;4781:1;4806:61;4859:7;4850:6;4839:9;4835:22;4806:61;:::i;:::-;4796:71;;4752:125;4916:2;4942:53;4987:7;4978:6;4967:9;4963:22;4942:53;:::i;:::-;4932:63;;4887:118;4680:332;;;;;:::o;5018:407::-;5086:6;5094;5143:2;5131:9;5122:7;5118:23;5114:32;5111:2;;;5159:1;5156;5149:12;5111:2;5202:1;5227:53;5272:7;5263:6;5252:9;5248:22;5227:53;:::i;:::-;5217:63;;5173:117;5329:2;5355:53;5400:7;5391:6;5380:9;5376:22;5355:53;:::i;:::-;5345:63;;5300:118;5101:324;;;;;:::o;5431:1241::-;5585:6;5593;5601;5609;5617;5666:3;5654:9;5645:7;5641:23;5637:33;5634:2;;;5683:1;5680;5673:12;5634:2;5726:1;5751:53;5796:7;5787:6;5776:9;5772:22;5751:53;:::i;:::-;5741:63;;5697:117;5853:2;5879:53;5924:7;5915:6;5904:9;5900:22;5879:53;:::i;:::-;5869:63;;5824:118;6009:2;5998:9;5994:18;5981:32;6040:18;6032:6;6029:30;6026:2;;;6072:1;6069;6062:12;6026:2;6100:78;6170:7;6161:6;6150:9;6146:22;6100:78;:::i;:::-;6090:88;;5952:236;6255:2;6244:9;6240:18;6227:32;6286:18;6278:6;6275:30;6272:2;;;6318:1;6315;6308:12;6272:2;6346:78;6416:7;6407:6;6396:9;6392:22;6346:78;:::i;:::-;6336:88;;6198:236;6501:3;6490:9;6486:19;6473:33;6533:18;6525:6;6522:30;6519:2;;;6565:1;6562;6555:12;6519:2;6593:62;6647:7;6638:6;6627:9;6623:22;6593:62;:::i;:::-;6583:72;;6444:221;5624:1048;;;;;;;;:::o;6678:955::-;6782:6;6790;6798;6806;6814;6863:3;6851:9;6842:7;6838:23;6834:33;6831:2;;;6880:1;6877;6870:12;6831:2;6923:1;6948:53;6993:7;6984:6;6973:9;6969:22;6948:53;:::i;:::-;6938:63;;6894:117;7050:2;7076:53;7121:7;7112:6;7101:9;7097:22;7076:53;:::i;:::-;7066:63;;7021:118;7178:2;7204:53;7249:7;7240:6;7229:9;7225:22;7204:53;:::i;:::-;7194:63;;7149:118;7306:2;7332:53;7377:7;7368:6;7357:9;7353:22;7332:53;:::i;:::-;7322:63;;7277:118;7462:3;7451:9;7447:19;7434:33;7494:18;7486:6;7483:30;7480:2;;;7526:1;7523;7516:12;7480:2;7554:62;7608:7;7599:6;7588:9;7584:22;7554:62;:::i;:::-;7544:72;;7405:221;6821:812;;;;;;;;:::o;7639:838::-;7766:6;7774;7782;7831:2;7819:9;7810:7;7806:23;7802:32;7799:2;;;7847:1;7844;7837:12;7799:2;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8045:2;8034:9;8030:18;8017:32;8076:18;8068:6;8065:30;8062:2;;;8108:1;8105;8098:12;8062:2;8136:78;8206:7;8197:6;8186:9;8182:22;8136:78;:::i;:::-;8126:88;;7988:236;8291:2;8280:9;8276:18;8263:32;8322:18;8314:6;8311:30;8308:2;;;8354:1;8351;8344:12;8308:2;8382:78;8452:7;8443:6;8432:9;8428:22;8382:78;:::i;:::-;8372:88;;8234:236;7789:688;;;;;:::o;8483:1095::-;8628:6;8636;8644;8652;8701:3;8689:9;8680:7;8676:23;8672:33;8669:2;;;8718:1;8715;8708:12;8669:2;8761:1;8786:53;8831:7;8822:6;8811:9;8807:22;8786:53;:::i;:::-;8776:63;;8732:117;8916:2;8905:9;8901:18;8888:32;8947:18;8939:6;8936:30;8933:2;;;8979:1;8976;8969:12;8933:2;9007:78;9077:7;9068:6;9057:9;9053:22;9007:78;:::i;:::-;8997:88;;8859:236;9162:2;9151:9;9147:18;9134:32;9193:18;9185:6;9182:30;9179:2;;;9225:1;9222;9215:12;9179:2;9253:78;9323:7;9314:6;9303:9;9299:22;9253:78;:::i;:::-;9243:88;;9105:236;9408:2;9397:9;9393:18;9380:32;9439:18;9431:6;9428:30;9425:2;;;9471:1;9468;9461:12;9425:2;9499:62;9553:7;9544:6;9533:9;9529:22;9499:62;:::i;:::-;9489:72;;9351:220;8659:919;;;;;;;:::o;9584:401::-;9649:6;9657;9706:2;9694:9;9685:7;9681:23;9677:32;9674:2;;;9722:1;9719;9712:12;9674:2;9765:1;9790:53;9835:7;9826:6;9815:9;9811:22;9790:53;:::i;:::-;9780:63;;9736:117;9892:2;9918:50;9960:7;9951:6;9940:9;9936:22;9918:50;:::i;:::-;9908:60;;9863:115;9664:321;;;;;:::o;9991:407::-;10059:6;10067;10116:2;10104:9;10095:7;10091:23;10087:32;10084:2;;;10132:1;10129;10122:12;10084:2;10175:1;10200:53;10245:7;10236:6;10225:9;10221:22;10200:53;:::i;:::-;10190:63;;10146:117;10302:2;10328:53;10373:7;10364:6;10353:9;10349:22;10328:53;:::i;:::-;10318:63;;10273:118;10074:324;;;;;:::o;10404:663::-;10490:6;10498;10506;10555:2;10543:9;10534:7;10530:23;10526:32;10523:2;;;10571:1;10568;10561:12;10523:2;10614:1;10639:53;10684:7;10675:6;10664:9;10660:22;10639:53;:::i;:::-;10629:63;;10585:117;10741:2;10767:53;10812:7;10803:6;10792:9;10788:22;10767:53;:::i;:::-;10757:63;;10712:118;10897:2;10886:9;10882:18;10869:32;10928:18;10920:6;10917:30;10914:2;;;10960:1;10957;10950:12;10914:2;10988:62;11042:7;11033:6;11022:9;11018:22;10988:62;:::i;:::-;10978:72;;10840:220;10513:554;;;;;:::o;11073:552::-;11150:6;11158;11166;11215:2;11203:9;11194:7;11190:23;11186:32;11183:2;;;11231:1;11228;11221:12;11183:2;11274:1;11299:53;11344:7;11335:6;11324:9;11320:22;11299:53;:::i;:::-;11289:63;;11245:117;11401:2;11427:53;11472:7;11463:6;11452:9;11448:22;11427:53;:::i;:::-;11417:63;;11372:118;11529:2;11555:53;11600:7;11591:6;11580:9;11576:22;11555:53;:::i;:::-;11545:63;;11500:118;11173:452;;;;;:::o;11631:809::-;11726:6;11734;11742;11750;11799:3;11787:9;11778:7;11774:23;11770:33;11767:2;;;11816:1;11813;11806:12;11767:2;11859:1;11884:53;11929:7;11920:6;11909:9;11905:22;11884:53;:::i;:::-;11874:63;;11830:117;11986:2;12012:53;12057:7;12048:6;12037:9;12033:22;12012:53;:::i;:::-;12002:63;;11957:118;12114:2;12140:53;12185:7;12176:6;12165:9;12161:22;12140:53;:::i;:::-;12130:63;;12085:118;12270:2;12259:9;12255:18;12242:32;12301:18;12293:6;12290:30;12287:2;;;12333:1;12330;12323:12;12287:2;12361:62;12415:7;12406:6;12395:9;12391:22;12361:62;:::i;:::-;12351:72;;12213:220;11757:683;;;;;;;:::o;12446:693::-;12564:6;12572;12621:2;12609:9;12600:7;12596:23;12592:32;12589:2;;;12637:1;12634;12627:12;12589:2;12708:1;12697:9;12693:17;12680:31;12738:18;12730:6;12727:30;12724:2;;;12770:1;12767;12760:12;12724:2;12798:78;12868:7;12859:6;12848:9;12844:22;12798:78;:::i;:::-;12788:88;;12651:235;12953:2;12942:9;12938:18;12925:32;12984:18;12976:6;12973:30;12970:2;;;13016:1;13013;13006:12;12970:2;13044:78;13114:7;13105:6;13094:9;13090:22;13044:78;:::i;:::-;13034:88;;12896:236;12579:560;;;;;:::o;13145:278::-;13212:6;13261:2;13249:9;13240:7;13236:23;13232:32;13229:2;;;13277:1;13274;13267:12;13229:2;13320:1;13345:61;13398:7;13389:6;13378:9;13374:22;13345:61;:::i;:::-;13335:71;;13291:125;13219:204;;;;:::o;13429:260::-;13487:6;13536:2;13524:9;13515:7;13511:23;13507:32;13504:2;;;13552:1;13549;13542:12;13504:2;13595:1;13620:52;13664:7;13655:6;13644:9;13640:22;13620:52;:::i;:::-;13610:62;;13566:116;13494:195;;;;:::o;13695:282::-;13764:6;13813:2;13801:9;13792:7;13788:23;13784:32;13781:2;;;13829:1;13826;13819:12;13781:2;13872:1;13897:63;13952:7;13943:6;13932:9;13928:22;13897:63;:::i;:::-;13887:73;;13843:127;13771:206;;;;:::o;13983:375::-;14052:6;14101:2;14089:9;14080:7;14076:23;14072:32;14069:2;;;14117:1;14114;14107:12;14069:2;14188:1;14177:9;14173:17;14160:31;14218:18;14210:6;14207:30;14204:2;;;14250:1;14247;14240:12;14204:2;14278:63;14333:7;14324:6;14313:9;14309:22;14278:63;:::i;:::-;14268:73;;14131:220;14059:299;;;;:::o;14364:262::-;14423:6;14472:2;14460:9;14451:7;14447:23;14443:32;14440:2;;;14488:1;14485;14478:12;14440:2;14531:1;14556:53;14601:7;14592:6;14581:9;14577:22;14556:53;:::i;:::-;14546:63;;14502:117;14430:196;;;;:::o;14632:407::-;14700:6;14708;14757:2;14745:9;14736:7;14732:23;14728:32;14725:2;;;14773:1;14770;14763:12;14725:2;14816:1;14841:53;14886:7;14877:6;14866:9;14862:22;14841:53;:::i;:::-;14831:63;;14787:117;14943:2;14969:53;15014:7;15005:6;14994:9;14990:22;14969:53;:::i;:::-;14959:63;;14914:118;14715:324;;;;;:::o;15045:179::-;15114:10;15135:46;15177:3;15169:6;15135:46;:::i;:::-;15213:4;15208:3;15204:14;15190:28;;15125:99;;;;:::o;15230:147::-;15325:45;15364:5;15325:45;:::i;:::-;15320:3;15313:58;15303:74;;:::o;15383:118::-;15470:24;15488:5;15470:24;:::i;:::-;15465:3;15458:37;15448:53;;:::o;15537:732::-;15656:3;15685:54;15733:5;15685:54;:::i;:::-;15755:86;15834:6;15829:3;15755:86;:::i;:::-;15748:93;;15865:56;15915:5;15865:56;:::i;:::-;15944:7;15975:1;15960:284;15985:6;15982:1;15979:13;15960:284;;;16061:6;16055:13;16088:63;16147:3;16132:13;16088:63;:::i;:::-;16081:70;;16174:60;16227:6;16174:60;:::i;:::-;16164:70;;16020:224;16007:1;16004;16000:9;15995:14;;15960:284;;;15964:14;16260:3;16253:10;;15661:608;;;;;;;:::o;16275:109::-;16356:21;16371:5;16356:21;:::i;:::-;16351:3;16344:34;16334:50;;:::o;16390:360::-;16476:3;16504:38;16536:5;16504:38;:::i;:::-;16558:70;16621:6;16616:3;16558:70;:::i;:::-;16551:77;;16637:52;16682:6;16677:3;16670:4;16663:5;16659:16;16637:52;:::i;:::-;16714:29;16736:6;16714:29;:::i;:::-;16709:3;16705:39;16698:46;;16480:270;;;;;:::o;16756:364::-;16844:3;16872:39;16905:5;16872:39;:::i;:::-;16927:71;16991:6;16986:3;16927:71;:::i;:::-;16920:78;;17007:52;17052:6;17047:3;17040:4;17033:5;17029:16;17007:52;:::i;:::-;17084:29;17106:6;17084:29;:::i;:::-;17079:3;17075:39;17068:46;;16848:272;;;;;:::o;17126:366::-;17268:3;17289:67;17353:2;17348:3;17289:67;:::i;:::-;17282:74;;17365:93;17454:3;17365:93;:::i;:::-;17483:2;17478:3;17474:12;17467:19;;17272:220;;;:::o;17498:366::-;17640:3;17661:67;17725:2;17720:3;17661:67;:::i;:::-;17654:74;;17737:93;17826:3;17737:93;:::i;:::-;17855:2;17850:3;17846:12;17839:19;;17644:220;;;:::o;17870:366::-;18012:3;18033:67;18097:2;18092:3;18033:67;:::i;:::-;18026:74;;18109:93;18198:3;18109:93;:::i;:::-;18227:2;18222:3;18218:12;18211:19;;18016:220;;;:::o;18242:366::-;18384:3;18405:67;18469:2;18464:3;18405:67;:::i;:::-;18398:74;;18481:93;18570:3;18481:93;:::i;:::-;18599:2;18594:3;18590:12;18583:19;;18388:220;;;:::o;18614:366::-;18756:3;18777:67;18841:2;18836:3;18777:67;:::i;:::-;18770:74;;18853:93;18942:3;18853:93;:::i;:::-;18971:2;18966:3;18962:12;18955:19;;18760:220;;;:::o;18986:366::-;19128:3;19149:67;19213:2;19208:3;19149:67;:::i;:::-;19142:74;;19225:93;19314:3;19225:93;:::i;:::-;19343:2;19338:3;19334:12;19327:19;;19132:220;;;:::o;19358:366::-;19500:3;19521:67;19585:2;19580:3;19521:67;:::i;:::-;19514:74;;19597:93;19686:3;19597:93;:::i;:::-;19715:2;19710:3;19706:12;19699:19;;19504:220;;;:::o;19730:366::-;19872:3;19893:67;19957:2;19952:3;19893:67;:::i;:::-;19886:74;;19969:93;20058:3;19969:93;:::i;:::-;20087:2;20082:3;20078:12;20071:19;;19876:220;;;:::o;20102:366::-;20244:3;20265:67;20329:2;20324:3;20265:67;:::i;:::-;20258:74;;20341:93;20430:3;20341:93;:::i;:::-;20459:2;20454:3;20450:12;20443:19;;20248:220;;;:::o;20474:366::-;20616:3;20637:67;20701:2;20696:3;20637:67;:::i;:::-;20630:74;;20713:93;20802:3;20713:93;:::i;:::-;20831:2;20826:3;20822:12;20815:19;;20620:220;;;:::o;20846:366::-;20988:3;21009:67;21073:2;21068:3;21009:67;:::i;:::-;21002:74;;21085:93;21174:3;21085:93;:::i;:::-;21203:2;21198:3;21194:12;21187:19;;20992:220;;;:::o;21218:366::-;21360:3;21381:67;21445:2;21440:3;21381:67;:::i;:::-;21374:74;;21457:93;21546:3;21457:93;:::i;:::-;21575:2;21570:3;21566:12;21559:19;;21364:220;;;:::o;21590:366::-;21732:3;21753:67;21817:2;21812:3;21753:67;:::i;:::-;21746:74;;21829:93;21918:3;21829:93;:::i;:::-;21947:2;21942:3;21938:12;21931:19;;21736:220;;;:::o;21962:366::-;22104:3;22125:67;22189:2;22184:3;22125:67;:::i;:::-;22118:74;;22201:93;22290:3;22201:93;:::i;:::-;22319:2;22314:3;22310:12;22303:19;;22108:220;;;:::o;22334:366::-;22476:3;22497:67;22561:2;22556:3;22497:67;:::i;:::-;22490:74;;22573:93;22662:3;22573:93;:::i;:::-;22691:2;22686:3;22682:12;22675:19;;22480:220;;;:::o;22706:366::-;22848:3;22869:67;22933:2;22928:3;22869:67;:::i;:::-;22862:74;;22945:93;23034:3;22945:93;:::i;:::-;23063:2;23058:3;23054:12;23047:19;;22852:220;;;:::o;23078:366::-;23220:3;23241:67;23305:2;23300:3;23241:67;:::i;:::-;23234:74;;23317:93;23406:3;23317:93;:::i;:::-;23435:2;23430:3;23426:12;23419:19;;23224:220;;;:::o;23450:366::-;23592:3;23613:67;23677:2;23672:3;23613:67;:::i;:::-;23606:74;;23689:93;23778:3;23689:93;:::i;:::-;23807:2;23802:3;23798:12;23791:19;;23596:220;;;:::o;23822:366::-;23964:3;23985:67;24049:2;24044:3;23985:67;:::i;:::-;23978:74;;24061:93;24150:3;24061:93;:::i;:::-;24179:2;24174:3;24170:12;24163:19;;23968:220;;;:::o;24194:108::-;24271:24;24289:5;24271:24;:::i;:::-;24266:3;24259:37;24249:53;;:::o;24308:118::-;24395:24;24413:5;24395:24;:::i;:::-;24390:3;24383:37;24373:53;;:::o;24432:222::-;24525:4;24563:2;24552:9;24548:18;24540:26;;24576:71;24644:1;24633:9;24629:17;24620:6;24576:71;:::i;:::-;24530:124;;;;:::o;24660:348::-;24789:4;24827:2;24816:9;24812:18;24804:26;;24840:79;24916:1;24905:9;24901:17;24892:6;24840:79;:::i;:::-;24929:72;24997:2;24986:9;24982:18;24973:6;24929:72;:::i;:::-;24794:214;;;;;:::o;25014:1053::-;25337:4;25375:3;25364:9;25360:19;25352:27;;25389:71;25457:1;25446:9;25442:17;25433:6;25389:71;:::i;:::-;25470:72;25538:2;25527:9;25523:18;25514:6;25470:72;:::i;:::-;25589:9;25583:4;25579:20;25574:2;25563:9;25559:18;25552:48;25617:108;25720:4;25711:6;25617:108;:::i;:::-;25609:116;;25772:9;25766:4;25762:20;25757:2;25746:9;25742:18;25735:48;25800:108;25903:4;25894:6;25800:108;:::i;:::-;25792:116;;25956:9;25950:4;25946:20;25940:3;25929:9;25925:19;25918:49;25984:76;26055:4;26046:6;25984:76;:::i;:::-;25976:84;;25342:725;;;;;;;;:::o;26073:442::-;26222:4;26260:2;26249:9;26245:18;26237:26;;26273:71;26341:1;26330:9;26326:17;26317:6;26273:71;:::i;:::-;26354:72;26422:2;26411:9;26407:18;26398:6;26354:72;:::i;:::-;26436;26504:2;26493:9;26489:18;26480:6;26436:72;:::i;:::-;26227:288;;;;;;:::o;26521:751::-;26744:4;26782:3;26771:9;26767:19;26759:27;;26796:71;26864:1;26853:9;26849:17;26840:6;26796:71;:::i;:::-;26877:72;26945:2;26934:9;26930:18;26921:6;26877:72;:::i;:::-;26959;27027:2;27016:9;27012:18;27003:6;26959:72;:::i;:::-;27041;27109:2;27098:9;27094:18;27085:6;27041:72;:::i;:::-;27161:9;27155:4;27151:20;27145:3;27134:9;27130:19;27123:49;27189:76;27260:4;27251:6;27189:76;:::i;:::-;27181:84;;26749:523;;;;;;;;:::o;27278:373::-;27421:4;27459:2;27448:9;27444:18;27436:26;;27508:9;27502:4;27498:20;27494:1;27483:9;27479:17;27472:47;27536:108;27639:4;27630:6;27536:108;:::i;:::-;27528:116;;27426:225;;;;:::o;27657:634::-;27878:4;27916:2;27905:9;27901:18;27893:26;;27965:9;27959:4;27955:20;27951:1;27940:9;27936:17;27929:47;27993:108;28096:4;28087:6;27993:108;:::i;:::-;27985:116;;28148:9;28142:4;28138:20;28133:2;28122:9;28118:18;28111:48;28176:108;28279:4;28270:6;28176:108;:::i;:::-;28168:116;;27883:408;;;;;:::o;28297:210::-;28384:4;28422:2;28411:9;28407:18;28399:26;;28435:65;28497:1;28486:9;28482:17;28473:6;28435:65;:::i;:::-;28389:118;;;;:::o;28513:313::-;28626:4;28664:2;28653:9;28649:18;28641:26;;28713:9;28707:4;28703:20;28699:1;28688:9;28684:17;28677:47;28741:78;28814:4;28805:6;28741:78;:::i;:::-;28733:86;;28631:195;;;;:::o;28832:419::-;28998:4;29036:2;29025:9;29021:18;29013:26;;29085:9;29079:4;29075:20;29071:1;29060:9;29056:17;29049:47;29113:131;29239:4;29113:131;:::i;:::-;29105:139;;29003:248;;;:::o;29257:419::-;29423:4;29461:2;29450:9;29446:18;29438:26;;29510:9;29504:4;29500:20;29496:1;29485:9;29481:17;29474:47;29538:131;29664:4;29538:131;:::i;:::-;29530:139;;29428:248;;;:::o;29682:419::-;29848:4;29886:2;29875:9;29871:18;29863:26;;29935:9;29929:4;29925:20;29921:1;29910:9;29906:17;29899:47;29963:131;30089:4;29963:131;:::i;:::-;29955:139;;29853:248;;;:::o;30107:419::-;30273:4;30311:2;30300:9;30296:18;30288:26;;30360:9;30354:4;30350:20;30346:1;30335:9;30331:17;30324:47;30388:131;30514:4;30388:131;:::i;:::-;30380:139;;30278:248;;;:::o;30532:419::-;30698:4;30736:2;30725:9;30721:18;30713:26;;30785:9;30779:4;30775:20;30771:1;30760:9;30756:17;30749:47;30813:131;30939:4;30813:131;:::i;:::-;30805:139;;30703:248;;;:::o;30957:419::-;31123:4;31161:2;31150:9;31146:18;31138:26;;31210:9;31204:4;31200:20;31196:1;31185:9;31181:17;31174:47;31238:131;31364:4;31238:131;:::i;:::-;31230:139;;31128:248;;;:::o;31382:419::-;31548:4;31586:2;31575:9;31571:18;31563:26;;31635:9;31629:4;31625:20;31621:1;31610:9;31606:17;31599:47;31663:131;31789:4;31663:131;:::i;:::-;31655:139;;31553:248;;;:::o;31807:419::-;31973:4;32011:2;32000:9;31996:18;31988:26;;32060:9;32054:4;32050:20;32046:1;32035:9;32031:17;32024:47;32088:131;32214:4;32088:131;:::i;:::-;32080:139;;31978:248;;;:::o;32232:419::-;32398:4;32436:2;32425:9;32421:18;32413:26;;32485:9;32479:4;32475:20;32471:1;32460:9;32456:17;32449:47;32513:131;32639:4;32513:131;:::i;:::-;32505:139;;32403:248;;;:::o;32657:419::-;32823:4;32861:2;32850:9;32846:18;32838:26;;32910:9;32904:4;32900:20;32896:1;32885:9;32881:17;32874:47;32938:131;33064:4;32938:131;:::i;:::-;32930:139;;32828:248;;;:::o;33082:419::-;33248:4;33286:2;33275:9;33271:18;33263:26;;33335:9;33329:4;33325:20;33321:1;33310:9;33306:17;33299:47;33363:131;33489:4;33363:131;:::i;:::-;33355:139;;33253:248;;;:::o;33507:419::-;33673:4;33711:2;33700:9;33696:18;33688:26;;33760:9;33754:4;33750:20;33746:1;33735:9;33731:17;33724:47;33788:131;33914:4;33788:131;:::i;:::-;33780:139;;33678:248;;;:::o;33932:419::-;34098:4;34136:2;34125:9;34121:18;34113:26;;34185:9;34179:4;34175:20;34171:1;34160:9;34156:17;34149:47;34213:131;34339:4;34213:131;:::i;:::-;34205:139;;34103:248;;;:::o;34357:419::-;34523:4;34561:2;34550:9;34546:18;34538:26;;34610:9;34604:4;34600:20;34596:1;34585:9;34581:17;34574:47;34638:131;34764:4;34638:131;:::i;:::-;34630:139;;34528:248;;;:::o;34782:419::-;34948:4;34986:2;34975:9;34971:18;34963:26;;35035:9;35029:4;35025:20;35021:1;35010:9;35006:17;34999:47;35063:131;35189:4;35063:131;:::i;:::-;35055:139;;34953:248;;;:::o;35207:419::-;35373:4;35411:2;35400:9;35396:18;35388:26;;35460:9;35454:4;35450:20;35446:1;35435:9;35431:17;35424:47;35488:131;35614:4;35488:131;:::i;:::-;35480:139;;35378:248;;;:::o;35632:419::-;35798:4;35836:2;35825:9;35821:18;35813:26;;35885:9;35879:4;35875:20;35871:1;35860:9;35856:17;35849:47;35913:131;36039:4;35913:131;:::i;:::-;35905:139;;35803:248;;;:::o;36057:419::-;36223:4;36261:2;36250:9;36246:18;36238:26;;36310:9;36304:4;36300:20;36296:1;36285:9;36281:17;36274:47;36338:131;36464:4;36338:131;:::i;:::-;36330:139;;36228:248;;;:::o;36482:419::-;36648:4;36686:2;36675:9;36671:18;36663:26;;36735:9;36729:4;36725:20;36721:1;36710:9;36706:17;36699:47;36763:131;36889:4;36763:131;:::i;:::-;36755:139;;36653:248;;;:::o;36907:222::-;37000:4;37038:2;37027:9;37023:18;37015:26;;37051:71;37119:1;37108:9;37104:17;37095:6;37051:71;:::i;:::-;37005:124;;;;:::o;37135:332::-;37256:4;37294:2;37283:9;37279:18;37271:26;;37307:71;37375:1;37364:9;37360:17;37351:6;37307:71;:::i;:::-;37388:72;37456:2;37445:9;37441:18;37432:6;37388:72;:::i;:::-;37261:206;;;;;:::o;37473:129::-;37507:6;37534:20;;:::i;:::-;37524:30;;37563:33;37591:4;37583:6;37563:33;:::i;:::-;37514:88;;;:::o;37608:75::-;37641:6;37674:2;37668:9;37658:19;;37648:35;:::o;37689:311::-;37766:4;37856:18;37848:6;37845:30;37842:2;;;37878:18;;:::i;:::-;37842:2;37928:4;37920:6;37916:17;37908:25;;37988:4;37982;37978:15;37970:23;;37771:229;;;:::o;38006:311::-;38083:4;38173:18;38165:6;38162:30;38159:2;;;38195:18;;:::i;:::-;38159:2;38245:4;38237:6;38233:17;38225:25;;38305:4;38299;38295:15;38287:23;;38088:229;;;:::o;38323:307::-;38384:4;38474:18;38466:6;38463:30;38460:2;;;38496:18;;:::i;:::-;38460:2;38534:29;38556:6;38534:29;:::i;:::-;38526:37;;38618:4;38612;38608:15;38600:23;;38389:241;;;:::o;38636:308::-;38698:4;38788:18;38780:6;38777:30;38774:2;;;38810:18;;:::i;:::-;38774:2;38848:29;38870:6;38848:29;:::i;:::-;38840:37;;38932:4;38926;38922:15;38914:23;;38703:241;;;:::o;38950:132::-;39017:4;39040:3;39032:11;;39070:4;39065:3;39061:14;39053:22;;39022:60;;;:::o;39088:114::-;39155:6;39189:5;39183:12;39173:22;;39162:40;;;:::o;39208:98::-;39259:6;39293:5;39287:12;39277:22;;39266:40;;;:::o;39312:99::-;39364:6;39398:5;39392:12;39382:22;;39371:40;;;:::o;39417:113::-;39487:4;39519;39514:3;39510:14;39502:22;;39492:38;;;:::o;39536:184::-;39635:11;39669:6;39664:3;39657:19;39709:4;39704:3;39700:14;39685:29;;39647:73;;;;:::o;39726:168::-;39809:11;39843:6;39838:3;39831:19;39883:4;39878:3;39874:14;39859:29;;39821:73;;;;:::o;39900:169::-;39984:11;40018:6;40013:3;40006:19;40058:4;40053:3;40049:14;40034:29;;39996:73;;;;:::o;40075:305::-;40115:3;40134:20;40152:1;40134:20;:::i;:::-;40129:25;;40168:20;40186:1;40168:20;:::i;:::-;40163:25;;40322:1;40254:66;40250:74;40247:1;40244:81;40241:2;;;40328:18;;:::i;:::-;40241:2;40372:1;40369;40365:9;40358:16;;40119:261;;;;:::o;40386:191::-;40426:4;40446:20;40464:1;40446:20;:::i;:::-;40441:25;;40480:20;40498:1;40480:20;:::i;:::-;40475:25;;40519:1;40516;40513:8;40510:2;;;40524:18;;:::i;:::-;40510:2;40569:1;40566;40562:9;40554:17;;40431:146;;;;:::o;40583:96::-;40620:7;40649:24;40667:5;40649:24;:::i;:::-;40638:35;;40628:51;;;:::o;40685:104::-;40730:7;40759:24;40777:5;40759:24;:::i;:::-;40748:35;;40738:51;;;:::o;40795:90::-;40829:7;40872:5;40865:13;40858:21;40847:32;;40837:48;;;:::o;40891:149::-;40927:7;40967:66;40960:5;40956:78;40945:89;;40935:105;;;:::o;41046:126::-;41083:7;41123:42;41116:5;41112:54;41101:65;;41091:81;;;:::o;41178:77::-;41215:7;41244:5;41233:16;;41223:32;;;:::o;41261:134::-;41319:9;41352:37;41383:5;41352:37;:::i;:::-;41339:50;;41329:66;;;:::o;41401:126::-;41451:9;41484:37;41515:5;41484:37;:::i;:::-;41471:50;;41461:66;;;:::o;41533:113::-;41583:9;41616:24;41634:5;41616:24;:::i;:::-;41603:37;;41593:53;;;:::o;41652:154::-;41736:6;41731:3;41726;41713:30;41798:1;41789:6;41784:3;41780:16;41773:27;41703:103;;;:::o;41812:307::-;41880:1;41890:113;41904:6;41901:1;41898:13;41890:113;;;41989:1;41984:3;41980:11;41974:18;41970:1;41965:3;41961:11;41954:39;41926:2;41923:1;41919:10;41914:15;;41890:113;;;42021:6;42018:1;42015:13;42012:2;;;42101:1;42092:6;42087:3;42083:16;42076:27;42012:2;41861:258;;;;:::o;42125:320::-;42169:6;42206:1;42200:4;42196:12;42186:22;;42253:1;42247:4;42243:12;42274:18;42264:2;;42330:4;42322:6;42318:17;42308:27;;42264:2;42392;42384:6;42381:14;42361:18;42358:38;42355:2;;;42411:18;;:::i;:::-;42355:2;42176:269;;;;:::o;42451:281::-;42534:27;42556:4;42534:27;:::i;:::-;42526:6;42522:40;42664:6;42652:10;42649:22;42628:18;42616:10;42613:34;42610:62;42607:2;;;42675:18;;:::i;:::-;42607:2;42715:10;42711:2;42704:22;42494:238;;;:::o;42738:233::-;42777:3;42800:24;42818:5;42800:24;:::i;:::-;42791:33;;42846:66;42839:5;42836:77;42833:2;;;42916:18;;:::i;:::-;42833:2;42963:1;42956:5;42952:13;42945:20;;42781:190;;;:::o;42977:180::-;43025:77;43022:1;43015:88;43122:4;43119:1;43112:15;43146:4;43143:1;43136:15;43163:180;43211:77;43208:1;43201:88;43308:4;43305:1;43298:15;43332:4;43329:1;43322:15;43349:180;43397:77;43394:1;43387:88;43494:4;43491:1;43484:15;43518:4;43515:1;43508:15;43535:183;43570:3;43608:1;43590:16;43587:23;43584:2;;;43646:1;43643;43640;43625:23;43668:34;43699:1;43693:8;43668:34;:::i;:::-;43661:41;;43584:2;43574:144;:::o;43724:102::-;43765:6;43816:2;43812:7;43807:2;43800:5;43796:14;43792:28;43782:38;;43772:54;;;:::o;43832:106::-;43876:8;43925:5;43920:3;43916:15;43895:36;;43885:53;;;:::o;43944:239::-;44084:34;44080:1;44072:6;44068:14;44061:58;44153:22;44148:2;44140:6;44136:15;44129:47;44050:133;:::o;44189:227::-;44329:34;44325:1;44317:6;44313:14;44306:58;44398:10;44393:2;44385:6;44381:15;44374:35;44295:121;:::o;44422:170::-;44562:22;44558:1;44550:6;44546:14;44539:46;44528:64;:::o;44598:230::-;44738:34;44734:1;44726:6;44722:14;44715:58;44807:13;44802:2;44794:6;44790:15;44783:38;44704:124;:::o;44834:225::-;44974:34;44970:1;44962:6;44958:14;44951:58;45043:8;45038:2;45030:6;45026:15;45019:33;44940:119;:::o;45065:223::-;45205:34;45201:1;45193:6;45189:14;45182:58;45274:6;45269:2;45261:6;45257:15;45250:31;45171:117;:::o;45294:228::-;45434:34;45430:1;45422:6;45418:14;45411:58;45503:11;45498:2;45490:6;45486:15;45479:36;45400:122;:::o;45528:166::-;45668:18;45664:1;45656:6;45652:14;45645:42;45634:60;:::o;45700:224::-;45840:34;45836:1;45828:6;45824:14;45817:58;45909:7;45904:2;45896:6;45892:15;45885:32;45806:118;:::o;45930:237::-;46070:34;46066:1;46058:6;46054:14;46047:58;46139:20;46134:2;46126:6;46122:15;46115:45;46036:131;:::o;46173:222::-;46313:34;46309:1;46301:6;46297:14;46290:58;46382:5;46377:2;46369:6;46365:15;46358:30;46279:116;:::o;46401:229::-;46541:34;46537:1;46529:6;46525:14;46518:58;46610:12;46605:2;46597:6;46593:15;46586:37;46507:123;:::o;46636:182::-;46776:34;46772:1;46764:6;46760:14;46753:58;46742:76;:::o;46824:220::-;46964:34;46960:1;46952:6;46948:14;46941:58;47033:3;47028:2;47020:6;47016:15;47009:28;46930:114;:::o;47050:221::-;47190:34;47186:1;47178:6;47174:14;47167:58;47259:4;47254:2;47246:6;47242:15;47235:29;47156:115;:::o;47277:228::-;47417:34;47413:1;47405:6;47401:14;47394:58;47486:11;47481:2;47473:6;47469:15;47462:36;47383:122;:::o;47511:228::-;47651:34;47647:1;47639:6;47635:14;47628:58;47720:11;47715:2;47707:6;47703:15;47696:36;47617:122;:::o;47745:227::-;47885:34;47881:1;47873:6;47869:14;47862:58;47954:10;47949:2;47941:6;47937:15;47930:35;47851:121;:::o;47978:220::-;48118:34;48114:1;48106:6;48102:14;48095:58;48187:3;48182:2;48174:6;48170:15;48163:28;48084:114;:::o;48204:711::-;48243:3;48281:4;48263:16;48260:26;48257:2;;;48289:5;;48257:2;48318:20;;:::i;:::-;48393:1;48375:16;48371:24;48368:1;48362:4;48347:49;48426:4;48420:11;48525:16;48518:4;48510:6;48506:17;48503:39;48470:18;48462:6;48459:30;48443:113;48440:2;;;48571:5;;;;48440:2;48617:6;48611:4;48607:17;48653:3;48647:10;48680:18;48672:6;48669:30;48666:2;;;48702:5;;;;;;48666:2;48750:6;48743:4;48738:3;48734:14;48730:27;48809:1;48791:16;48787:24;48781:4;48777:35;48772:3;48769:44;48766:2;;;48816:5;;;;;;;48766:2;48833:57;48881:6;48875:4;48871:17;48863:6;48859:30;48853:4;48833:57;:::i;:::-;48906:3;48899:10;;48247:668;;;;;;;:::o;48921:122::-;48994:24;49012:5;48994:24;:::i;:::-;48987:5;48984:35;48974:2;;49033:1;49030;49023:12;48974:2;48964:79;:::o;49049:138::-;49130:32;49156:5;49130:32;:::i;:::-;49123:5;49120:43;49110:2;;49177:1;49174;49167:12;49110:2;49100:87;:::o;49193:116::-;49263:21;49278:5;49263:21;:::i;:::-;49256:5;49253:32;49243:2;;49299:1;49296;49289:12;49243:2;49233:76;:::o;49315:120::-;49387:23;49404:5;49387:23;:::i;:::-;49380:5;49377:34;49367:2;;49425:1;49422;49415:12;49367:2;49357:78;:::o;49441:122::-;49514:24;49532:5;49514:24;:::i;:::-;49507:5;49504:35;49494:2;;49553:1;49550;49543:12;49494:2;49484:79;:::o

Swarm Source

ipfs://3903b1bda350492c2fa958ea0dede081ee46ef6bf15a603f72881d9540743c2b
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading