/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */

import {
  Signer,
  utils,
  BigNumberish,
  Contract,
  ContractFactory,
  Overrides,
} from "ethers";
import { Provider, TransactionRequest } from "@ethersproject/providers";
import type { TokenFactory, TokenFactoryInterface } from "../TokenFactory";

const _abi = [
  {
    inputs: [
      {
        internalType: "address",
        name: "protocolFeeRecipient",
        type: "address",
      },
      {
        internalType: "uint8",
        name: "protocolFee",
        type: "uint8",
      },
      {
        internalType: "address",
        name: "operationalFeeRecipient",
        type: "address",
      },
      {
        internalType: "uint8",
        name: "operationalFee",
        type: "uint8",
      },
      {
        internalType: "string",
        name: "_baseURI721",
        type: "string",
      },
      {
        internalType: "string",
        name: "_baseURI1155",
        type: "string",
      },
    ],
    stateMutability: "nonpayable",
    type: "constructor",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "proxy",
        type: "address",
      },
      {
        indexed: true,
        internalType: "address",
        name: "owner",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint256[]",
        name: "tokenIds",
        type: "uint256[]",
      },
      {
        indexed: false,
        internalType: "uint256[]",
        name: "amounts",
        type: "uint256[]",
      },
      {
        indexed: false,
        internalType: "address",
        name: "royaltyFeeRecipient",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint8",
        name: "royaltyFee",
        type: "uint8",
      },
    ],
    name: "DeployNFT1155AndMintBatch",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "proxy",
        type: "address",
      },
      {
        indexed: true,
        internalType: "address",
        name: "owner",
        type: "address",
      },
      {
        indexed: false,
        internalType: "string",
        name: "name",
        type: "string",
      },
      {
        indexed: false,
        internalType: "string",
        name: "symbol",
        type: "string",
      },
      {
        indexed: false,
        internalType: "uint256[]",
        name: "tokenIds",
        type: "uint256[]",
      },
      {
        indexed: false,
        internalType: "address",
        name: "royaltyFeeRecipient",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint8",
        name: "royaltyFee",
        type: "uint8",
      },
    ],
    name: "DeployNFT721AndMintBatch",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "proxy",
        type: "address",
      },
      {
        indexed: true,
        internalType: "address",
        name: "owner",
        type: "address",
      },
      {
        indexed: false,
        internalType: "string",
        name: "name",
        type: "string",
      },
      {
        indexed: false,
        internalType: "string",
        name: "symbol",
        type: "string",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "toTokenId",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "address",
        name: "royaltyFeeRecipient",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint8",
        name: "royaltyFee",
        type: "uint8",
      },
    ],
    name: "DeployNFT721AndPark",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "proxy",
        type: "address",
      },
      {
        indexed: true,
        internalType: "address",
        name: "owner",
        type: "address",
      },
      {
        indexed: false,
        internalType: "string",
        name: "name",
        type: "string",
      },
      {
        indexed: false,
        internalType: "string",
        name: "symbol",
        type: "string",
      },
      {
        indexed: true,
        internalType: "address",
        name: "dividendToken",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "initialSupply",
        type: "uint256",
      },
    ],
    name: "DeploySocialToken",
    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: "string",
        name: "uri",
        type: "string",
      },
    ],
    name: "SetBaseURI1155",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "string",
        name: "uri",
        type: "string",
      },
    ],
    name: "SetBaseURI721",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "deployer",
        type: "address",
      },
      {
        indexed: false,
        internalType: "bool",
        name: "whitelisted",
        type: "bool",
      },
    ],
    name: "SetDeployerWhitelisted",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "uint8",
        name: "fee",
        type: "uint8",
      },
    ],
    name: "SetOperationalFee",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "recipient",
        type: "address",
      },
    ],
    name: "SetOperationalFeeRecipient",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "recipient",
        type: "address",
      },
    ],
    name: "SetProtocolFeeRecipient",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "strategy",
        type: "address",
      },
      {
        indexed: false,
        internalType: "bool",
        name: "whitelisted",
        type: "bool",
      },
    ],
    name: "SetStrategyWhitelisted",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "exchange",
        type: "address",
      },
    ],
    name: "UpgradeERC1155Exchange",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "exchange",
        type: "address",
      },
    ],
    name: "UpgradeERC721Exchange",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "newTarget",
        type: "address",
      },
    ],
    name: "UpgradeNFT1155",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "newTarget",
        type: "address",
      },
    ],
    name: "UpgradeNFT721",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "newTarget",
        type: "address",
      },
    ],
    name: "UpgradeSocialToken",
    type: "event",
  },
  {
    inputs: [],
    name: "DOMAIN_SEPARATOR",
    outputs: [
      {
        internalType: "bytes32",
        name: "",
        type: "bytes32",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "MAX_OPERATIONAL_FEE",
    outputs: [
      {
        internalType: "uint8",
        name: "",
        type: "uint8",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "MAX_ROYALTY_FEE",
    outputs: [
      {
        internalType: "uint8",
        name: "",
        type: "uint8",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "MINT_BATCH_1155_TYPEHASH",
    outputs: [
      {
        internalType: "bytes32",
        name: "",
        type: "bytes32",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "MINT_BATCH_721_TYPEHASH",
    outputs: [
      {
        internalType: "bytes32",
        name: "",
        type: "bytes32",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "MINT_SOCIAL_TOKEN_TYPEHASH",
    outputs: [
      {
        internalType: "bytes32",
        name: "",
        type: "bytes32",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "PARK_TOKEN_IDS_721_TYPEHASH",
    outputs: [
      {
        internalType: "bytes32",
        name: "",
        type: "bytes32",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "baseURI1155",
    outputs: [
      {
        internalType: "string",
        name: "",
        type: "string",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "baseURI721",
    outputs: [
      {
        internalType: "string",
        name: "",
        type: "string",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "owner",
        type: "address",
      },
      {
        internalType: "uint256[]",
        name: "tokenIds",
        type: "uint256[]",
      },
      {
        internalType: "uint256[]",
        name: "amounts",
        type: "uint256[]",
      },
      {
        internalType: "address",
        name: "royaltyFeeRecipient",
        type: "address",
      },
      {
        internalType: "uint8",
        name: "royaltyFee",
        type: "uint8",
      },
    ],
    name: "deployNFT1155AndMintBatch",
    outputs: [
      {
        internalType: "address",
        name: "nft",
        type: "address",
      },
    ],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "owner",
        type: "address",
      },
      {
        internalType: "string",
        name: "name",
        type: "string",
      },
      {
        internalType: "string",
        name: "symbol",
        type: "string",
      },
      {
        internalType: "uint256[]",
        name: "tokenIds",
        type: "uint256[]",
      },
      {
        internalType: "address",
        name: "royaltyFeeRecipient",
        type: "address",
      },
      {
        internalType: "uint8",
        name: "royaltyFee",
        type: "uint8",
      },
    ],
    name: "deployNFT721AndMintBatch",
    outputs: [
      {
        internalType: "address",
        name: "nft",
        type: "address",
      },
    ],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "owner",
        type: "address",
      },
      {
        internalType: "string",
        name: "name",
        type: "string",
      },
      {
        internalType: "string",
        name: "symbol",
        type: "string",
      },
      {
        internalType: "uint256",
        name: "toTokenId",
        type: "uint256",
      },
      {
        internalType: "address",
        name: "royaltyFeeRecipient",
        type: "address",
      },
      {
        internalType: "uint8",
        name: "royaltyFee",
        type: "uint8",
      },
    ],
    name: "deployNFT721AndPark",
    outputs: [
      {
        internalType: "address",
        name: "nft",
        type: "address",
      },
    ],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "owner",
        type: "address",
      },
      {
        internalType: "string",
        name: "name",
        type: "string",
      },
      {
        internalType: "string",
        name: "symbol",
        type: "string",
      },
      {
        internalType: "address",
        name: "dividendToken",
        type: "address",
      },
      {
        internalType: "uint256",
        name: "initialSupply",
        type: "uint256",
      },
    ],
    name: "deploySocialToken",
    outputs: [
      {
        internalType: "address",
        name: "proxy",
        type: "address",
      },
    ],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "erc1155Exchange",
    outputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "erc721Exchange",
    outputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    name: "isDeployerWhitelisted",
    outputs: [
      {
        internalType: "bool",
        name: "",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "query",
        type: "address",
      },
    ],
    name: "isNFT1155",
    outputs: [
      {
        internalType: "bool",
        name: "result",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "query",
        type: "address",
      },
    ],
    name: "isNFT721",
    outputs: [
      {
        internalType: "bool",
        name: "result",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "query",
        type: "address",
      },
    ],
    name: "isSocialToken",
    outputs: [
      {
        internalType: "bool",
        name: "result",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    name: "isStrategyWhitelisted",
    outputs: [
      {
        internalType: "bool",
        name: "",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "nft",
        type: "address",
      },
      {
        internalType: "address",
        name: "to",
        type: "address",
      },
      {
        internalType: "uint256[]",
        name: "tokenIds",
        type: "uint256[]",
      },
      {
        internalType: "uint256[]",
        name: "amounts",
        type: "uint256[]",
      },
      {
        internalType: "bytes",
        name: "data",
        type: "bytes",
      },
      {
        internalType: "uint8",
        name: "v",
        type: "uint8",
      },
      {
        internalType: "bytes32",
        name: "r",
        type: "bytes32",
      },
      {
        internalType: "bytes32",
        name: "s",
        type: "bytes32",
      },
    ],
    name: "mintBatch1155",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "nft",
        type: "address",
      },
      {
        internalType: "address",
        name: "to",
        type: "address",
      },
      {
        internalType: "uint256[]",
        name: "tokenIds",
        type: "uint256[]",
      },
      {
        internalType: "bytes",
        name: "data",
        type: "bytes",
      },
      {
        internalType: "uint8",
        name: "v",
        type: "uint8",
      },
      {
        internalType: "bytes32",
        name: "r",
        type: "bytes32",
      },
      {
        internalType: "bytes32",
        name: "s",
        type: "bytes32",
      },
    ],
    name: "mintBatch721",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "token",
        type: "address",
      },
      {
        internalType: "address",
        name: "to",
        type: "address",
      },
      {
        internalType: "uint256",
        name: "amount",
        type: "uint256",
      },
      {
        internalType: "uint8",
        name: "v",
        type: "uint8",
      },
      {
        internalType: "bytes32",
        name: "r",
        type: "bytes32",
      },
      {
        internalType: "bytes32",
        name: "s",
        type: "bytes32",
      },
    ],
    name: "mintSocialToken",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    name: "nonces",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "operationalFeeInfo",
    outputs: [
      {
        internalType: "address",
        name: "recipient",
        type: "address",
      },
      {
        internalType: "uint8",
        name: "permil",
        type: "uint8",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "owner",
    outputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "nft",
        type: "address",
      },
      {
        internalType: "uint256",
        name: "toTokenId",
        type: "uint256",
      },
      {
        internalType: "uint8",
        name: "v",
        type: "uint8",
      },
      {
        internalType: "bytes32",
        name: "r",
        type: "bytes32",
      },
      {
        internalType: "bytes32",
        name: "s",
        type: "bytes32",
      },
    ],
    name: "parkTokenIds721",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "protocolFeeInfo",
    outputs: [
      {
        internalType: "address",
        name: "recipient",
        type: "address",
      },
      {
        internalType: "uint8",
        name: "permil",
        type: "uint8",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "renounceOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "string",
        name: "uri",
        type: "string",
      },
    ],
    name: "setBaseURI1155",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "string",
        name: "uri",
        type: "string",
      },
    ],
    name: "setBaseURI721",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "deployer",
        type: "address",
      },
      {
        internalType: "bool",
        name: "whitelisted",
        type: "bool",
      },
    ],
    name: "setDeployerWhitelisted",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint8",
        name: "operationalFee",
        type: "uint8",
      },
    ],
    name: "setOperationalFee",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "operationalFeeRecipient",
        type: "address",
      },
    ],
    name: "setOperationalFeeRecipient",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "protocolFeeRecipient",
        type: "address",
      },
    ],
    name: "setProtocolFeeRecipient",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "strategy",
        type: "address",
      },
      {
        internalType: "bool",
        name: "whitelisted",
        type: "bool",
      },
    ],
    name: "setStrategyWhitelisted",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "newOwner",
        type: "address",
      },
    ],
    name: "transferOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "exchange",
        type: "address",
      },
    ],
    name: "upgradeERC1155Exchange",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "exchange",
        type: "address",
      },
    ],
    name: "upgradeERC721Exchange",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "newTarget",
        type: "address",
      },
    ],
    name: "upgradeNFT1155",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "newTarget",
        type: "address",
      },
    ],
    name: "upgradeNFT721",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "newTarget",
        type: "address",
      },
    ],
    name: "upgradeSocialToken",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
];

const _bytecode =
  "0x60c06040523480156200001157600080fd5b5060405162003c6738038062003c67833981016040819052620000349162000587565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600480546001600160a01b038881166001600160a81b031992831617600160a01b60ff8a81168202929092179094556005805492891692909316919091179086169092029190911790558151620000d490600790602085019062000404565b508051620000ea90600890602084019062000404565b504660a0527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f62000127306200019e602090811b62001eb317901c565b80516020918201206040805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f1981840301815291905280516020909101206080525062000716945050505050565b606081620001c857506040805180820190915260048152630307830360e41b602082015262000200565b8160005b8115620001ef5780620001df81620006cc565b915050600882901c9150620001cc565b620001fb848262000205565b925050505b919050565b606060006200021683600262000653565b6200022390600262000638565b6001600160401b038111156200024957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801562000274576020820181803683370190505b509050600360fc1b816000815181106200029e57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620002dc57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006200030284600262000653565b6200030f90600162000638565b90505b6001811115620003a9576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106200035357634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106200037857634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93620003a18162000675565b905062000312565b508315620003fd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640160405180910390fd5b9392505050565b82805462000412906200068f565b90600052602060002090601f01602090048101928262000436576000855562000481565b82601f106200045157805160ff191683800117855562000481565b8280016001018555821562000481579182015b828111156200048157825182559160200191906001019062000464565b506200048f92915062000493565b5090565b5b808211156200048f576000815560010162000494565b80516001600160a01b03811681146200020057600080fd5b600082601f830112620004d3578081fd5b81516001600160401b0380821115620004f057620004f062000700565b604051601f8301601f19908116603f011681019082821181831017156200051b576200051b62000700565b8160405283815260209250868385880101111562000537578485fd5b8491505b838210156200055a57858201830151818301840152908201906200053b565b838211156200056b57848385830101525b9695505050505050565b805160ff811681146200020057600080fd5b60008060008060008060c08789031215620005a0578182fd5b620005ab87620004aa565b9550620005bb6020880162000575565b9450620005cb60408801620004aa565b9350620005db6060880162000575565b60808801519093506001600160401b0380821115620005f8578384fd5b620006068a838b01620004c2565b935060a08901519150808211156200061c578283fd5b506200062b89828a01620004c2565b9150509295509295509295565b600082198211156200064e576200064e620006ea565b500190565b6000816000190483118215151615620006705762000670620006ea565b500290565b600081620006875762000687620006ea565b506000190190565b600181811c90821680620006a457607f821691505b60208210811415620006c657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620006e357620006e3620006ea565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160a05161352b6200073c6000396000610dbc01526000610de4015261352b6000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c8063706e1ce511610146578063aec0b543116100c3578063d1640c9e11610087578063d1640c9e146105c5578063d4ed40be146105e8578063d5f7e756146105fb578063e521cb921461060e578063e7ceca8114610621578063f2fde38b146106345761025e565b8063aec0b54314610540578063c2b11e181461057a578063c6edbca414610597578063c756db161461059f578063cb03111c146105b25761025e565b80638da5cb5b1161010a5780638da5cb5b146104ab5780638f4ac6b2146104bc57806398f66f79146104cf578063999ba27c146104f6578063a984253f146105195761025e565b8063706e1ce51461044a578063715018a61461045d57806374949588146104655780637ecebe00146104785780638518482e146104985761025e565b806334375c90116101df57806345943ee1116101a357806345943ee1146103d35780634dd5ad0b146103f65780634e3a599b146103fe57806353ebf022146104115780635ef00369146104245780636d934447146104375761025e565b806334375c901461037d5780633644e515146103905780633683a63d146103985780633869faeb146103ad57806343ae710b146103c05761025e565b80632030959811610226578063203095981461030a57806324b72fd914610331578063262b9f6314610344578063272f37bc146103575780633419b1681461036a5761025e565b806304895e021461026357806309e9e859146102785780630b3aef6f146102a85780630e309d87146102dd57806317e1f82e146102f0575b600080fd5b6102766102713660046127d7565b610647565b005b61028b610286366004612a03565b610725565b6040516001600160a01b0390911681526020015b60405180910390f35b6102cf7f884adba7f4e17962aed36c871036adea39c6d9f81fb25407a78db239e9731e8681565b60405190815260200161029f565b6102766102eb366004612a99565b6108de565b6102f860fa81565b60405160ff909116815260200161029f565b6102cf7f3fddacac0a7d8b05f741f01ff6becadd9986be8631a2af41a675f365dd74090d81565b61027661033f366004612a99565b61096c565b610276610352366004612d2a565b610a18565b61028b610365366004612ad5565b610a85565b610276610378366004612cb3565b610c35565b60095461028b906001600160a01b031681565b6102cf610db6565b6103a0610e9f565b60405161029f9190613242565b61028b6103bb366004612b99565b610f2d565b600a5461028b906001600160a01b031681565b6103e66103e13660046127d7565b6110c9565b604051901515815260200161029f565b6102f8603281565b6103e661040c3660046127d7565b611162565b61027661041f3660046127d7565b6111b7565b6103e66104323660046127d7565b61125e565b61028b610445366004612c26565b6112b2565b6102766104583660046127d7565b611467565b61027661150f565b610276610473366004612d5c565b611583565b6102cf6104863660046127d7565b60066020526000908152604090205481565b6102766104a6366004612d2a565b611644565b6000546001600160a01b031661028b565b6102766104ca36600461280f565b6116b1565b6102cf7f8f4bf92e5271f5ec2f59dc3fc74368af0064fb84b40a3de9150dd26c08cda10481565b6103e66105043660046127d7565b600c6020526000908152604090205460ff1681565b6102cf7fb47ce0f6456fcc2f16b7d6e7b0255eb73822b401248e672a4543c2b3d718304381565b6004546001600160a01b03811690600160a01b900460ff165b604080516001600160a01b03909316835260ff90911660208301520161029f565b6005546001600160a01b03811690600160a01b900460ff16610559565b6103a0611848565b6102766105ad3660046129a1565b611855565b6102766105c03660046127d7565b6119e3565b6103e66105d33660046127d7565b600b6020526000908152604090205460ff1681565b6102766105f63660046128ed565b611a5b565b6102766106093660046127d7565b611bdb565b61027661061c3660046127d7565b611c83565b61027661062f3660046127d7565b611d51565b6102766106423660046127d7565b611dc9565b6000546001600160a01b0316331461067a5760405162461bcd60e51b8152600401610671906132b5565b60405180910390fd5b6001600160a01b0381166106d05760405162461bcd60e51b815260206004820152601860248201527f53484f59553a20494e56414c49445f524543495049454e5400000000000000006044820152606401610671565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fb1f2c36f7c5aaa531984c1dcdd8f112bd8eb5ecc3604672fcc9b9995f3d0e486906020015b60405180910390a150565b6000808052600b6020526000805160206134d68339815191525460ff168061075c5750336000908152600b602052604090205460ff165b6107785760405162461bcd60e51b81526004016106719061328b565b6001600160a01b03861661079e5760405162461bcd60e51b8152600401610671906132ea565b83518551146107ef5760405162461bcd60e51b815260206004820152601860248201527f53484f59553a204c454e475448535f4e4f545f455155414c00000000000000006044820152606401610671565b600280546108829190610804906001906133dd565b8154811061082257634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516001600160a01b03909116906108539089908990899089908990602401612ef5565b60408051601f198184030181529190526020810180516001600160e01b031663bff5e79d60e01b179052611f10565b9050856001600160a01b0316816001600160a01b03167fe8e548b895f4fdeb62d7c9df220d96b267c9b1333933d6d222abe97c9eb4e178878787876040516108cd949392919061305a565b60405180910390a395945050505050565b6000546001600160a01b031633146109085760405162461bcd60e51b8152600401610671906132b5565b6001600160a01b0382166000818152600b6020908152604091829020805460ff19168515159081179091558251938452908301527fb0500d86f36ef20bca6265e59730812d99c6ef06086d8a6ca2bdf7ccdeb95c7391015b60405180910390a15050565b6000546001600160a01b031633146109965760405162461bcd60e51b8152600401610671906132b5565b6001600160a01b0382166109bc5760405162461bcd60e51b8152600401610671906132ea565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527fb2db35447f3d451cf54a63218b7bbc322d945d31ad0e9c334e668a634f311c5f9101610960565b6000546001600160a01b03163314610a425760405162461bcd60e51b8152600401610671906132b5565b8051610a559060079060208401906125ae565b507ffe32390fe202bcebda4a891d2f7987611953f71dabb03177aba107c29dd061c28160405161071a9190613242565b6000808052600b6020526000805160206134d68339815191525460ff1680610abc5750336000908152600b602052604090205460ff165b610ad85760405162461bcd60e51b81526004016106719061328b565b86610af55760405162461bcd60e51b815260040161067190613349565b84610b125760405162461bcd60e51b81526004016106719061331a565b6001600160a01b038916610b385760405162461bcd60e51b8152600401610671906132ea565b60018054610bd09190610b4c9082906133dd565b81548110610b6a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516001600160a01b0390911690610ba1908c908c908c908c908c908c908c908c90602401612f47565b60408051601f198184030181529190526020810180516001600160e01b0316634f65e6d160e11b179052611f10565b9050886001600160a01b0316816001600160a01b03167ffa2a29eed800c9b77b7b93bac9b8f33afdf859cdcdc8dabed1fee5879c5b85fa8a8a8a8a8a8a8a604051610c21979695949392919061318c565b60405180910390a398975050505050505050565b6000856001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c7057600080fd5b505afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca891906127f3565b6001600160a01b0381166000908152600660205260408120805492935090917f3fddacac0a7d8b05f741f01ff6becadd9986be8631a2af41a675f365dd74090d918991899185610cf783613476565b909155506040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a001604051602081830303815290604052805190602001209050610d538183878787610d4e610db6565b612013565b60405163325d78dd60e21b8152600481018790526001600160a01b0388169063c975e37490602401600060405180830381600087803b158015610d9557600080fd5b505af1158015610da9573d6000803e3d6000fd5b5050505050505050505050565b600080467f00000000000000000000000000000000000000000000000000000000000000001415610e0857507f0000000000000000000000000000000000000000000000000000000000000000610e9a565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610e3230611eb3565b80516020918201206040805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c0016040516020818303038152906040528051906020012090505b905090565b60078054610eac9061343b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed89061343b565b8015610f255780601f10610efa57610100808354040283529160200191610f25565b820191906000526020600020905b815481529060010190602001808311610f0857829003601f168201915b505050505081565b6000808052600b6020526000805160206134d68339815191525460ff1680610f645750336000908152600b602052604090205460ff165b610f805760405162461bcd60e51b81526004016106719061328b565b86610f9d5760405162461bcd60e51b815260040161067190613349565b84610fba5760405162461bcd60e51b81526004016106719061331a565b6001600160a01b038916610fe05760405162461bcd60e51b8152600401610671906132ea565b600180546110789190610ff49082906133dd565b8154811061101257634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516001600160a01b0390911690611049908c908c908c908c908c908c908c908c90602401612fb2565b60408051601f198184030181529190526020810180516001600160e01b031663ac9a252160e01b179052611f10565b9050886001600160a01b0316816001600160a01b03167f56a094468f3010722aa253bc3d45e75efe2a0550b929f9f0f4d4591dbca5131d8a8a8a8a8a8a8a604051610c2197969594939291906131ef565b60006001600160a01b0382166110e15750600061115d565b6002545b600181106111575761113660026110fd6001846133dd565b8154811061111b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316846121d2565b1561114557600191505061115d565b8061114f81613424565b9150506110e5565b50600090505b919050565b60006001600160a01b03821661117a5750600061115d565b6003545b600181106111575761119660036110fd6001846133dd565b156111a557600191505061115d565b806111af81613424565b91505061117e565b6000546001600160a01b031633146111e15760405162461bcd60e51b8152600401610671906132b5565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0383169081179091556040519081527f90dccdf0d0809c3f945a409a3ce4652bf2c9b283e5aad88b3e36361433132cbb9060200161071a565b60006001600160a01b0382166112765750600061115d565b6001545b600181106111575761129160016110fd81846133dd565b156112a057600191505061115d565b806112aa81613424565b91505061127a565b6000808052600b6020526000805160206134d68339815191525460ff16806112e95750336000908152600b602052604090205460ff165b6113055760405162461bcd60e51b81526004016106719061328b565b60008551116113265760405162461bcd60e51b815260040161067190613349565b60008451116113475760405162461bcd60e51b81526004016106719061331a565b6001600160a01b03861661136d5760405162461bcd60e51b8152600401610671906132ea565b60008686868686604051602401611388959493929190613010565b60408051601f198184030181529190526020810180516001600160e01b0316633ad985f360e11b17905260038054919250611402916113c9906001906133dd565b815481106113e757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031682611f10565b9150836001600160a01b0316876001600160a01b0316836001600160a01b03167f77f9d3ebcfb8384da9e83f3940965c11d9aa857870489f196679555bba1888d289898860405161145593929190613255565b60405180910390a45095945050505050565b6000546001600160a01b031633146114915760405162461bcd60e51b8152600401610671906132b5565b600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0383169081179091556040519081527fe8698a9880993ca12864a4d6e8bff70e3e073d4104aa0f9a8fdb2b74576922ab9060200161071a565b6000546001600160a01b031633146115395760405162461bcd60e51b8152600401610671906132b5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115ad5760405162461bcd60e51b8152600401610671906132b5565b603260ff821611156115f65760405162461bcd60e51b815260206004820152601260248201527153484f59553a20494e56414c49445f46454560701b6044820152606401610671565b6005805460ff60a01b1916600160a01b60ff8416908102919091179091556040519081527ff10ae7069d1b064e9a66cbb6166a221bf43947979981ff3c61096807a9dc0c6e9060200161071a565b6000546001600160a01b0316331461166e5760405162461bcd60e51b8152600401610671906132b5565b80516116819060089060208401906125ae565b507f80718abbdddf59294c7165841ac4dfc18de474342ccc5a20bc1064120a08852a8160405161071a9190613242565b60008b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172491906127f3565b905060007fb47ce0f6456fcc2f16b7d6e7b0255eb73822b401248e672a4543c2b3d718304360001b8d8d8d8d8d8d8d8d600660008c6001600160a01b03166001600160a01b03168152602001908152602001600020600081548092919061178a90613476565b919050556040516020016117a79a999897969594939291906130a4565b6040516020818303038152906040528051906020012090506117cf8183878787610d4e610db6565b604051630fbfeffd60e11b81526001600160a01b038e1690631f7fdffa90611807908f908f908f908f908f908f908f90600401612e56565b600060405180830381600087803b15801561182157600080fd5b505af1158015611835573d6000803e3d6000fd5b5050505050505050505050505050505050565b60088054610eac9061343b565b6000866001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561189057600080fd5b505afa1580156118a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c891906127f3565b6001600160a01b0381166000908152600660205260408120805492935090917f8f4bf92e5271f5ec2f59dc3fc74368af0064fb84b40a3de9150dd26c08cda104918a918a918a91908661191a83613476565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0016040516020818303038152906040528051906020012090506119778183878787610d4e610db6565b6040516340c10f1960e01b81526001600160a01b038881166004830152602482018890528916906340c10f1990604401600060405180830381600087803b1580156119c157600080fd5b505af11580156119d5573d6000803e3d6000fd5b505050505050505050505050565b6000546001600160a01b03163314611a0d5760405162461bcd60e51b8152600401610671906132b5565b600980546001600160a01b0319166001600160a01b0383169081179091556040519081527f7906d96d0db1eb8f6805ac6930c6abd633b14b59c0b239412e1fd979ca1254669060200161071a565b6000896001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9657600080fd5b505afa158015611aaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ace91906127f3565b6001600160a01b0381166000908152600660205260408120805492935090917f884adba7f4e17962aed36c871036adea39c6d9f81fb25407a78db239e9731e86918d918d918d918d918d918d9189611b2583613476565b91905055604051602001611b40989796959493929190613117565b604051602081830303815290604052805190602001209050611b688183878787610d4e610db6565b604051631143124160e11b81526001600160a01b038c1690632286248290611b9c908d908d908d908d908d90600401612eb1565b600060405180830381600087803b158015611bb657600080fd5b505af1158015611bca573d6000803e3d6000fd5b505050505050505050505050505050565b6000546001600160a01b03163314611c055760405162461bcd60e51b8152600401610671906132b5565b600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0383169081179091556040519081527f1c9e0a997b60cd0855450b5761db24330074e914ceab5b053193b28d6a3e45639060200161071a565b6000546001600160a01b03163314611cad5760405162461bcd60e51b8152600401610671906132b5565b6001600160a01b038116611d035760405162461bcd60e51b815260206004820152601c60248201527f53484f59553a20494e56414c49445f4645455f524543495049454e54000000006044820152606401610671565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f0adecf76fa869b35236c53f76ec37546457966d5848d8be34a4508acdd51f7c39060200161071a565b6000546001600160a01b03163314611d7b5760405162461bcd60e51b8152600401610671906132b5565b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527fca237d3f5dd115a560a2d7ddcc75a87200fca9a3b55e7f78330108c92b87a99a9060200161071a565b6000546001600160a01b03163314611df35760405162461bcd60e51b8152600401610671906132b5565b6001600160a01b038116611e585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610671565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b606081611edb57506040805180820190915260048152630307830360e41b602082015261115d565b8160005b8115611efe5780611eef81613476565b915050600882901c9150611edf565b611f088482612233565b949350505050565b6000808360601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f092505060008351111561200c576000826001600160a01b031684604051611f819190612e3a565b6000604051808303816000865af19150503d8060008114611fbe576040519150601f19603f3d011682016040523d82523d6000602084013e611fc3565b606091505b505090508061200a5760405162461bcd60e51b815260206004820152601360248201527253484f59553a2043414c4c5f4641494c55524560681b6044820152606401610671565b505b5092915050565b60405161190160f01b60208201526022810182905260428101879052600090606201604051602081830303815290604052805190602001209050612057863b151590565b1561216757604080516020810186905280820185905260f887901b6001600160f81b0319166060820152815160418183030181526061820192839052630b135d3f60e11b9092526001600160a01b03881691631626ba7e916120bd918591606501613173565b60206040518083038186803b1580156120d557600080fd5b505afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190612d02565b6001600160e01b031916631626ba7e60e01b146121625760405162461bcd60e51b815260206004820152601360248201527214d213d6554e8815539055551213d492569151606a1b6044820152606401610671565b6121c9565b856001600160a01b031661217d8287878761241b565b6001600160a01b0316146121c95760405162461bcd60e51b815260206004820152601360248201527214d213d6554e8815539055551213d492569151606a1b6044820152606401610671565b50505050505050565b6000808360601b905060405169363d3d373d3d3d363d7360b01b815281600a8201526e5af43d82803e903d91602b57fd5bf360881b601e82015260408101602d600082873c600d810151600d83015114815183511416935050505092915050565b606060006122428360026133be565b61224d9060026133a6565b6001600160401b0381111561227257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561229c576020820181803683370190505b509050600360fc1b816000815181106122c557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061230257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006123268460026133be565b6123319060016133a6565b90505b60018111156123c5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061237357634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061239757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936123be81613424565b9050612334565b5083156124145760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610671565b9392505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561248d5760405162461bcd60e51b815260206004820181905260248201527f53484f59553a20494e56414c49445f5349474e41545552455f535f56414c55456044820152606401610671565b8360ff16601b14806124a257508360ff16601c145b6124ee5760405162461bcd60e51b815260206004820181905260248201527f53484f59553a20494e56414c49445f5349474e41545552455f565f56414c55456044820152606401610671565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015612542573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166125a55760405162461bcd60e51b815260206004820152601860248201527f53484f59553a20494e56414c49445f5349474e415455524500000000000000006044820152606401610671565b95945050505050565b8280546125ba9061343b565b90600052602060002090601f0160209004810192826125dc5760008555612622565b82601f106125f557805160ff1916838001178555612622565b82800160010185558215612622579182015b82811115612622578251825591602001919060010190612607565b5061262e929150612632565b5090565b5b8082111561262e5760008155600101612633565b803561115d816134bd565b60008083601f840112612663578182fd5b5081356001600160401b03811115612679578182fd5b6020830191508360208260051b850101111561269457600080fd5b9250929050565b600082601f8301126126ab578081fd5b813560206001600160401b038211156126c6576126c66134a7565b8160051b6126d5828201613376565b8381528281019086840183880185018910156126ef578687fd5b8693505b858410156127115780358352600193909301929184019184016126f3565b50979650505050505050565b60008083601f84011261272e578182fd5b5081356001600160401b03811115612744578182fd5b60208301915083602082850101111561269457600080fd5b600082601f83011261276c578081fd5b81356001600160401b03811115612785576127856134a7565b612798601f8201601f1916602001613376565b8181528460208386010111156127ac578283fd5b816020850160208301379081016020019190915292915050565b803560ff8116811461115d57600080fd5b6000602082840312156127e8578081fd5b8135612414816134bd565b600060208284031215612804578081fd5b8151612414816134bd565b60008060008060008060008060008060006101008c8e031215612830578687fd5b6128398c612647565b9a5061284760208d01612647565b99506001600160401b038060408e01351115612861578788fd5b6128718e60408f01358f01612652565b909a50985060608d0135811015612886578788fd5b6128968e60608f01358f01612652565b909850965060808d01358110156128ab578586fd5b506128bc8d60808e01358e0161271d565b90955093506128cd60a08d016127c6565b925060c08c0135915060e08c013590509295989b509295989b9093969950565b600080600080600080600080600060e08a8c03121561290a578485fd5b8935612915816134bd565b985060208a0135612925816134bd565b975060408a01356001600160401b0380821115612940578687fd5b61294c8d838e01612652565b909950975060608c0135915080821115612964578687fd5b506129718c828d0161271d565b9096509450612984905060808b016127c6565b925060a08a0135915060c08a013590509295985092959850929598565b60008060008060008060c087890312156129b9578182fd5b86356129c4816134bd565b955060208701356129d4816134bd565b9450604087013593506129e9606088016127c6565b92506080870135915060a087013590509295509295509295565b600080600080600060a08688031215612a1a578081fd5b8535612a25816134bd565b945060208601356001600160401b0380821115612a40578283fd5b612a4c89838a0161269b565b95506040880135915080821115612a61578283fd5b50612a6e8882890161269b565b9350506060860135612a7f816134bd565b9150612a8d608087016127c6565b90509295509295909350565b60008060408385031215612aab578182fd5b8235612ab6816134bd565b915060208301358015158114612aca578182fd5b809150509250929050565b60008060008060008060008060c0898b031215612af0578182fd5b8835612afb816134bd565b975060208901356001600160401b0380821115612b16578384fd5b612b228c838d0161271d565b909950975060408b0135915080821115612b3a578384fd5b612b468c838d0161271d565b909750955060608b0135915080821115612b5e578384fd5b50612b6b8b828c0161269b565b9350506080890135612b7c816134bd565b9150612b8a60a08a016127c6565b90509295985092959890939650565b60008060008060008060008060c0898b031215612bb4578182fd5b8835612bbf816134bd565b975060208901356001600160401b0380821115612bda578384fd5b612be68c838d0161271d565b909950975060408b0135915080821115612bfe578384fd5b50612c0b8b828c0161271d565b909650945050606089013592506080890135612b7c816134bd565b600080600080600060a08688031215612c3d578283fd5b8535612c48816134bd565b945060208601356001600160401b0380821115612c63578485fd5b612c6f89838a0161275c565b95506040880135915080821115612c84578485fd5b50612c918882890161275c565b9350506060860135612ca2816134bd565b949793965091946080013592915050565b600080600080600060a08688031215612cca578283fd5b8535612cd5816134bd565b945060208601359350612cea604087016127c6565b94979396509394606081013594506080013592915050565b600060208284031215612d13578081fd5b81516001600160e01b031981168114612414578182fd5b600060208284031215612d3b578081fd5b81356001600160401b03811115612d50578182fd5b611f088482850161275c565b600060208284031215612d6d578081fd5b612414826127c6565b81835260006001600160fb1b03831115612d8e578081fd5b8260051b80836020870137939093016020019283525090919050565b6000815180845260208085019450808401835b83811015612dd957815187529582019590820190600101612dbd565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612e268160208601602086016133f4565b601f01601f19169290920160200192915050565b60008251612e4c8184602087016133f4565b9190910192915050565b6001600160a01b0388168152608060208201819052600090612e7b908301888a612d76565b8281036040840152612e8e818789612d76565b90508281036060840152612ea3818587612de4565b9a9950505050505050505050565b6001600160a01b0386168152606060208201819052600090612ed69083018688612d76565b8281036040840152612ee9818587612de4565b98975050505050505050565b600060018060a01b03808816835260a06020840152612f1760a0840188612daa565b8381036040850152612f298188612daa565b959091166060840152505060ff919091166080909101529392505050565b600060018060a01b03808b16835260c06020840152612f6a60c084018a8c612de4565b8381036040850152612f7d81898b612de4565b90508381036060850152612f918188612daa565b959091166080840152505060ff9190911660a0909101529695505050505050565b600060018060a01b03808b16835260c06020840152612fd560c084018a8c612de4565b8381036040850152612fe881898b612de4565b92505085606084015280851660808401525060ff831660a08301529998505050505050505050565b600060018060a01b03808816835260a0602084015261303260a0840188612e0e565b83810360408501526130448188612e0e565b9590911660608401525050608001529392505050565b60006080825261306d6080830187612daa565b828103602084015261307f8187612daa565b6001600160a01b03959095166040840152505060ff9190911660609091015292915050565b8a81526001600160a01b038a811660208301528916604082015260e0606082018190526000906130d7908301898b612d76565b82810360808401526130ea81888a612d76565b905082810360a08401526130ff818688612de4565b9150508260c08301529b9a5050505050505050505050565b8881526001600160a01b0388811660208301528716604082015260c06060820181905260009061314a9083018789612d76565b828103608084015261315d818688612de4565b9150508260a08301529998505050505050505050565b600083825260406020830152611f086040830184612e0e565b600060a082526131a060a08301898b612de4565b82810360208401526131b381888a612de4565b905082810360408401526131c78187612daa565b6001600160a01b03959095166060840152505060ff9190911660809091015295945050505050565b600060a0825261320360a08301898b612de4565b828103602084015261321681888a612de4565b604084019690965250506001600160a01b0392909216606083015260ff16608090910152949350505050565b6000602082526124146020830184612e0e565b6000606082526132686060830186612e0e565b828103602084015261327a8186612e0e565b915050826040830152949350505050565b60208082526010908201526f29a427acaa9d102327a92124a22222a760811b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526016908201527553484f59553a20494e56414c49445f4144445245535360501b604082015260600190565b60208082526015908201527414d213d6554e881253959053125117d4d6535093d3605a1b604082015260600190565b60208082526013908201527253484f59553a20494e56414c49445f4e414d4560681b604082015260600190565b604051601f8201601f191681016001600160401b038111828210171561339e5761339e6134a7565b604052919050565b600082198211156133b9576133b9613491565b500190565b60008160001904831182151516156133d8576133d8613491565b500290565b6000828210156133ef576133ef613491565b500390565b60005b8381101561340f5781810151838201526020016133f7565b8381111561341e576000848401525b50505050565b60008161343357613433613491565b506000190190565b600181811c9082168061344f57607f821691505b6020821081141561347057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561348a5761348a613491565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146134d257600080fd5b5056fedf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f76a2646970667358221220dc77a16decd4c299dd67bdae624bdf53f1709ed4e6e13201c0700d5b3e32f75964736f6c63430008030033";

export class TokenFactory__factory extends ContractFactory {
  constructor(signer?: Signer) {
    super(_abi, _bytecode, signer);
  }

  deploy(
    protocolFeeRecipient: string,
    protocolFee: BigNumberish,
    operationalFeeRecipient: string,
    operationalFee: BigNumberish,
    _baseURI721: string,
    _baseURI1155: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<TokenFactory> {
    return super.deploy(
      protocolFeeRecipient,
      protocolFee,
      operationalFeeRecipient,
      operationalFee,
      _baseURI721,
      _baseURI1155,
      overrides || {}
    ) as Promise<TokenFactory>;
  }
  getDeployTransaction(
    protocolFeeRecipient: string,
    protocolFee: BigNumberish,
    operationalFeeRecipient: string,
    operationalFee: BigNumberish,
    _baseURI721: string,
    _baseURI1155: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): TransactionRequest {
    return super.getDeployTransaction(
      protocolFeeRecipient,
      protocolFee,
      operationalFeeRecipient,
      operationalFee,
      _baseURI721,
      _baseURI1155,
      overrides || {}
    );
  }
  attach(address: string): TokenFactory {
    return super.attach(address) as TokenFactory;
  }
  connect(signer: Signer): TokenFactory__factory {
    return super.connect(signer) as TokenFactory__factory;
  }
  static readonly bytecode = _bytecode;
  static readonly abi = _abi;
  static createInterface(): TokenFactoryInterface {
    return new utils.Interface(_abi) as TokenFactoryInterface;
  }
  static connect(
    address: string,
    signerOrProvider: Signer | Provider
  ): TokenFactory {
    return new Contract(address, _abi, signerOrProvider) as TokenFactory;
  }
}