{
  "_format": "hh-sol-artifact-1",
  "contractName": "AdventureERC721CWithMutableMinterRoyalties",
  "sourceName": "contracts/examples/adventure-erc721c/AdventureERC721CWithMutableMinterRoyalties.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint96",
          "name": "defaultRoyaltyFeeNumerator_",
          "type": "uint96"
        },
        {
          "internalType": "uint256",
          "name": "maxSimultaneousQuests_",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__AdventureApprovalToCaller",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__AlreadyOnQuest",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__AnActiveQuestIsPreventingTransfers",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__CallerNotApprovedForAdventure",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__CallerNotTokenOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__MaxSimultaneousQuestsCannotBeZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__MaxSimultaneousQuestsExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__NotOnQuest",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__QuestIdOutOfRange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__TooManyActiveQuests",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__AdventureIsStillWhitelisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__AlreadyWhitelisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__ArrayIndexOverflowsUint128",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__CallerNotAWhitelistedAdventure",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__InvalidAdventureContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__NotWhitelisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__InvalidTransferValidatorContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__SetTransferValidatorFirst",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MutableMinterRoyalties__MinterCannotBeZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MutableMinterRoyalties__MinterHasAlreadyBeenAssignedToTokenId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MutableMinterRoyalties__OnlyMinterCanChangeRoyaltyFee",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MutableMinterRoyalties__RoyaltyFeeWillExceedSalePrice",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ShouldNotMintToBurnAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "AdventureApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "whitelisted",
          "type": "bool"
        }
      ],
      "name": "AdventureWhitelistUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "active",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "booted",
          "type": "bool"
        }
      ],
      "name": "QuestUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "RoyaltySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldValidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newValidator",
          "type": "address"
        }
      ],
      "name": "TransferValidatorUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_OPERATOR_WHITELIST_ID",
      "outputs": [
        {
          "internalType": "uint120",
          "name": "",
          "type": "uint120"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_SECURITY_LEVEL",
      "outputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_VALIDATOR",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FEE_DENOMINATOR",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "activeQuestList",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "activeQuestLookup",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isActive",
          "type": "bool"
        },
        {
          "internalType": "uint32",
          "name": "questId",
          "type": "uint32"
        },
        {
          "internalType": "uint64",
          "name": "startTimestamp",
          "type": "uint64"
        },
        {
          "internalType": "uint32",
          "name": "arrayIndex",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "adventureBurn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "adventureSafeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "adventureTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "areAdventuresApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "bootFromAllQuests",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultRoyaltyFeeNumerator",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        }
      ],
      "name": "enterQuest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        }
      ],
      "name": "exitQuest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "getActiveQuests",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "isActive",
              "type": "bool"
            },
            {
              "internalType": "uint32",
              "name": "questId",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "startTimestamp",
              "type": "uint64"
            },
            {
              "internalType": "uint32",
              "name": "arrayIndex",
              "type": "uint32"
            }
          ],
          "internalType": "struct Quest[]",
          "name": "activeQuests",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPermittedContractReceivers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "getQuestCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSecurityPolicy",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum TransferSecurityLevels",
              "name": "transferSecurityLevel",
              "type": "uint8"
            },
            {
              "internalType": "uint120",
              "name": "operatorWhitelistId",
              "type": "uint120"
            },
            {
              "internalType": "uint120",
              "name": "permittedContractReceiversId",
              "type": "uint120"
            }
          ],
          "internalType": "struct CollectionSecurityPolicy",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        }
      ],
      "name": "getTimeOnQuest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTransferValidator",
      "outputs": [
        {
          "internalType": "contract ICreatorTokenTransferValidator",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWhitelistedOperators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isAdventureWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "isContractReceiverPermitted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isOperatorWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        }
      ],
      "name": "isParticipatingInQuest",
      "outputs": [
        {
          "internalType": "bool",
          "name": "participatingInQuest",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "startTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "isTransferAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxSimultaneousQuests",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "royaltyAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setAdventuresApprovedForAll",
      "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": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint96",
          "name": "royaltyFeeNumerator",
          "type": "uint96"
        }
      ],
      "name": "setRoyaltyFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "validator",
          "type": "address"
        },
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomValidatorAndSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setToDefaultSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "transferValidator_",
          "type": "address"
        }
      ],
      "name": "setTransferValidator",
      "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": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "unwhitelistAdventure",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "userExitAllQuests",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "questId",
          "type": "uint256"
        }
      ],
      "name": "userExitQuest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adventure",
          "type": "address"
        }
      ],
      "name": "whitelistAdventure",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "whitelistedAdventureList",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "whitelistedAdventures",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isWhitelisted",
          "type": "bool"
        },
        {
          "internalType": "uint128",
          "name": "arrayIndex",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b5060405162004f6538038062004f6583398101604081905262000034916200038b565b838383836040518060200160405280600081525060405180602001604052806000815250620000726200006c620000e560201b60201c565b620000e9565b81516200008790600990602085019062000218565b5080516200009d90600a90602084019062000218565b505050620000b282826200013960201b60201c565b50620000c090508162000169565b608052620000ce816200017e565b6001600160601b031660a052506200045c92505050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516200014e90600f90602085019062000218565b5080516200016490601090602084019062000218565b505050565b6200017481620001d3565b6003556001600455565b6127106001600160601b0382161115620001ab576040516316fc4d9760e01b815260040160405180910390fd5b601180546001600160601b03909216600160a01b026001600160a01b03909216919091179055565b80620001f25760405163ed21f5e560e01b815260040160405180910390fd5b6064811115620002155760405163dbb0ece360e01b815260040160405180910390fd5b50565b82805462000226906200041f565b90600052602060002090601f0160209004810192826200024a576000855562000295565b82601f106200026557805160ff191683800117855562000295565b8280016001018555821562000295579182015b828111156200029557825182559160200191906001019062000278565b50620002a3929150620002a7565b5090565b5b80821115620002a35760008155600101620002a8565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002e657600080fd5b81516001600160401b0380821115620003035762000303620002be565b604051601f8301601f19908116603f011681019082821181831017156200032e576200032e620002be565b816040528381526020925086838588010111156200034b57600080fd5b600091505b838210156200036f578582018301518183018401529082019062000350565b83821115620003815760008385830101525b9695505050505050565b60008060008060808587031215620003a257600080fd5b84516001600160601b0381168114620003ba57600080fd5b6020860151604087015191955093506001600160401b0380821115620003df57600080fd5b620003ed88838901620002d4565b935060608701519150808211156200040457600080fd5b506200041387828801620002d4565b91505092959194509250565b600181811c908216806200043457607f821691505b602082108114156200045657634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051614ac76200049e6000396000818161067f0152818161122f015281816139490152613c590152600081816107e2015261321f0152614ac76000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80636c3b8699116101e9578063a9fc664e1161010f578063d007af5c116100ad578063e985e9c51161007c578063e985e9c5146109b0578063f1e923c5146109ec578063f2fde38b146109ff578063fd762d9214610a1257600080fd5b8063d007af5c14610979578063d73792a914610981578063e2989f4c1461098a578063e370ab461461099d57600080fd5b8063b88d4fde116100e9578063b88d4fde1461092b578063be537f431461093e578063c05e2f4414610953578063c87b56dd1461096657600080fd5b8063a9fc664e146108a1578063aa6cab5a146108b4578063aca139f71461091857600080fd5b8063869f9110116101875780639bc17ea4116101565780639bc17ea4146108555780639d645a4414610868578063a14481941461087b578063a22cb4651461088e57600080fd5b8063869f9110146107e05780638da5cb5b14610806578063916237181461081757806395d89b411461084d57600080fd5b8063715018a6116101c3578063715018a6146107765780637e10b35b1461077e5780637f1a5ce114610791578063816a1501146107cd57600080fd5b80636c3b86991461071d578063703fa9291461072557806370a082311461075557600080fd5b80632e8da829116102ce5780634e02c0781161026c57806353401df91161023b57806353401df9146106bc5780635d4c1d46146106cf57806361347162146106f75780636352211e1461070a57600080fd5b80634e02c0781461062f5780634ef622531461064257806351dadc2814610655578063521f5e6a1461067d57600080fd5b806340c10f19116102a857806340c10f19146105e157806342842e0e146105f457806342966c6814610607578063495c8bf91461061a57600080fd5b80632e8da8291461058f5780632ebb386a146105a2578063301be740146105b557600080fd5b80630f3d911c1161033b5780631b25b077116103155780631b25b077146105225780631c33b3281461053557806323b872dd1461054a5780632a55205a1461055d57600080fd5b80630f3d911c14610458578063113405571461047857806311ad40811461050f57600080fd5b8063070cba1711610377578063070cba171461040c578063081812fc14610421578063095ea7b314610434578063098144d41461044757600080fd5b8063014635461461039e57806301ffc9a7146103d457806306fdde03146103f7575b600080fd5b6103b771721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6103e76103e23660046141a7565b610a25565b60405190151581526020016103cb565b6103ff610a36565b6040516103cb919061421c565b61041f61041a366004614244565b610ac8565b005b6103b761042f366004614261565b610d2b565b61041f61044236600461427a565b610d52565b6011546001600160a01b03166103b7565b61046b6104663660046142a6565b610e89565b6040516103cb91906142d6565b6104d861048636600461434f565b600860209081526000938452604080852082529284528284209052825290205460ff81169063ffffffff610100820481169167ffffffffffffffff6501000000000082041691600160681b9091041684565b60408051941515855263ffffffff938416602086015267ffffffffffffffff909216918401919091521660608201526080016103cb565b61041f61051d36600461439a565b6110a3565b6103e76105303660046143bc565b6110c3565b61053d600181565b6040516103cb919061441e565b61041f61055836600461442c565b61115c565b61057061056b36600461439a565b6111e3565b604080516001600160a01b0390931683526020830191909152016103cb565b6103e761059d366004614244565b61129b565b61041f6105b03660046142a6565b6113cd565b6103e76105c3366004614244565b6001600160a01b031660009081526002602052604090205460ff1690565b61041f6105ef36600461427a565b6113eb565b61041f61060236600461442c565b6113f5565b61041f610615366004614261565b611410565b61062261141c565b6040516103cb919061446d565b61041f61063d3660046144ba565b611553565b61041f6106503660046144e1565b611570565b6106686106633660046144ba565b611670565b60405163ffffffff90911681526020016103cb565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516bffffffffffffffffffffffff90911681526020016103cb565b61041f6106ca36600461439a565b6116c6565b6106d7600181565b6040516effffffffffffffffffffffffffffff90911681526020016103cb565b61041f610705366004614541565b6116e2565b6103b7610718366004614261565b611887565b61041f6118ec565b6107386107333660046144ba565b6119e4565b6040805193151584526020840192909252908201526060016103cb565b610768610763366004614244565b611a84565b6040519081526020016103cb565b61041f611b1e565b61041f61078c366004614244565b611b32565b6103e761079f366004614581565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6107686107db3660046144ba565b611d6b565b7f0000000000000000000000000000000000000000000000000000000000000000610768565b6000546001600160a01b03166103b7565b6107686108253660046142a6565b60009182526007602090815260408084206001600160a01b0393909316845291905290205490565b6103ff611da0565b61041f610863366004614261565b611daf565b6103e7610876366004614244565b611dd6565b61041f61088936600461427a565b611eb5565b61041f61089c3660046145bd565b611ebf565b61041f6108af366004614244565b611eca565b6108f06108c2366004614244565b60026020526000908152604090205460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b6040805192151583526fffffffffffffffffffffffffffffffff9091166020830152016103cb565b61041f61092636600461442c565b612017565b61041f610939366004614632565b612055565b6109466120dd565b6040516103cb91906146f6565b61041f6109613660046145bd565b6121a7565b6103ff610974366004614261565b612250565b6106226122c3565b61069f61271081565b6103b7610998366004614261565b612393565b61041f6109ab36600461442c565b6123bd565b6103e76109be366004614581565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205460ff1690565b61041f6109fa3660046142a6565b6123de565b61041f610a0d366004614244565b6123fb565b61041f610a2036600461473a565b612488565b6000610a30826125ac565b92915050565b6060600f8054610a4590614796565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190614796565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b610ad06125ea565b6001600160a01b03811660009081526002602052604090205460ff16610b22576040517f385f0cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812054600180546101009092046fffffffffffffffffffffffffffffffff169291610b6391906147e7565b905080826fffffffffffffffffffffffffffffffff1614610c915760018181548110610b9157610b916147fe565b600091825260209091200154600180546001600160a01b03909216916fffffffffffffffffffffffffffffffff8516908110610bcf57610bcf6147fe565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600260006001856fffffffffffffffffffffffffffffffff1681548110610c2757610c276147fe565b60009182526020808320909101546001600160a01b03168352820192909252604001902080546fffffffffffffffffffffffffffffffff92909216610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff9092169190911790555b6001805480610ca257610ca2614814565b60008281526020808220600019908401810180546001600160a01b03191690559092019092556001600160a01b038516808352600282526040808420805470ffffffffffffffffffffffffffffffffff1916905551928352917fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a2505050565b6000610d36826125f2565b506000908152600d60205260409020546001600160a01b031690565b6000610d5d82611887565b9050806001600160a01b0316836001600160a01b03161415610dec5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b0382161480610e085750610e0881336109be565b610e7a5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610de3565b610e848383612656565b505050565b60008281526007602090815260408083206001600160a01b03851684529091529020546060908067ffffffffffffffff811115610ec857610ec86145eb565b604051908082528060200260200182016040528015610f1a57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610ee65790505b5060008581526007602090815260408083206001600160a01b0388168452825280832080548251818502810185019093528083529496509293909291830182828015610fb157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f745790505b5050505050905060005b8281101561109a5760008681526008602090815260408083206001600160a01b038916845290915281208351909190849084908110610ffc57610ffc6147fe565b60209081029190910181015163ffffffff90811683528282019390935260409182016000208251608081018452905460ff811615158252610100810485169282019290925267ffffffffffffffff6501000000000083041692810192909252600160681b90049091166060820152845185908390811061107e5761107e6147fe565b6020026020010181905250806110939061482a565b9050610fbb565b50505092915050565b6110ab6126c4565b6110b482612703565b6110bf82338361274b565b5050565b6011546000906001600160a01b0316156111515760115460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561112c57600080fd5b505afa92505050801561113d575060015b61114957506000611155565b506001611155565b5060015b9392505050565b6111663382612b76565b6111d85760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610de3565b610e84838383612bf5565b60008281526012602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291611262577f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1660208201525b8051602082015161271090611285906bffffffffffffffffffffffff1687614845565b61128f9190614864565b92509250509250929050565b6011546000906001600160a01b0316156113c557601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b1580156112fa57600080fd5b505afa15801561130e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113329190614886565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b15801561138d57600080fd5b505afa1580156113a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3091906148f8565b506000919050565b6113d681612e03565b6113df82612e56565b6110bf82826000612ea0565b6110bf828261318b565b610e8483838360405180602001604052806000815250612055565b6114198161319f565b50565b6011546060906001600160a01b03161561154057601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b15801561147b57600080fd5b505afa15801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b39190614886565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b1580156114ff57600080fd5b505afa158015611513573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261153b9190810190614915565b905090565b5060408051600081526020810190915290565b61155c82612e03565b61156583612e56565b610e8483838361274b565b6127106bffffffffffffffffffffffff821611156115ba576040517f16fc4d9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260126020526040902080546001600160a01b0316331461160b576040517f130e6cf200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546001600160a01b0316600160a01b6bffffffffffffffffffffffff8416908102919091178255604051908152339084907f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af25420253906020015b60405180910390a3505050565b6007602052826000526040600020602052816000526040600020818154811061169857600080fd5b906000526020600020906008918282040191900660040292509250509054906101000a900463ffffffff1681565b6116ce6126c4565b6116d782612703565b6110bf8233836131b1565b6116ea6125ea565b60006116fe6011546001600160a01b031690565b90506001600160a01b038116611740576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c09061176e90309088906004016149c7565b600060405180830381600087803b15801561178857600080fd5b505af115801561179c573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b1580156117f857600080fd5b505af115801561180c573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561186957600080fd5b505af115801561187d573d6000803e3d6000fd5b5050505050505050565b6000818152600b60205260408120546001600160a01b031680610a305760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610de3565b6118f46125ea565b61190f71721c310194ccfc01e523fc93c9cccfa2a0ac611eca565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c0906119479030906001906004016149c7565b600060405180830381600087803b15801561196157600080fd5b505af1158015611975573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b1580156119ca57600080fd5b505af11580156119de573d6000803e3d6000fd5b50505050565b6000808063ffffffff841115611a26576040517f0b2530f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505060009283526008602090815260408085206001600160a01b0394909416855292815282842063ffffffff9283168552905291205460ff81169265010000000000820467ffffffffffffffff1692600160681b90920490911690565b60006001600160a01b038216611b025760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610de3565b506001600160a01b03166000908152600c602052604090205490565b611b266134ee565b611b306000613548565b565b611b3a6125ea565b6001600160a01b03811660009081526002602052604090205460ff1615611b8d576040517fd8110a5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516301ffc9a760e01b81527f977e0c1c0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a79060240160206040518083038186803b158015611bec57600080fd5b505afa158015611c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2491906148f8565b611c5a576040517fb50e580c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546fffffffffffffffffffffffffffffffff811115611ca7576040517f6daf72d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660008181526002602090815260408083208054600170ffffffffffffffffffffffffffffffffff199091166101006fffffffffffffffffffffffffffffffff89160217811790915580548082018255938190527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180546001600160a01b03191685179055519182527fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a25050565b6000806000611d7b8686866119e4565b509150915081611d8c576000611d96565b611d9681426147e7565b9695505050505050565b606060108054610a4590614796565b611db76126c4565b611dc081612703565b6002600455611dce81611410565b506001600455565b6011546000906001600160a01b0316156113c557601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b158015611e3557600080fd5b505afa158015611e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6d9190614886565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401611375565b6110bf8282613598565b6110bf3383836135b2565b611ed26125ea565b60006001600160a01b0382163b15611f60576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b158015611f2457600080fd5b505afa925050508015611f54575060408051601f3d908101601f19168201909252611f51918101906148f8565b60015b611f5d57611f60565b90505b6001600160a01b03821615801590611f76575080155b15611fad576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601154604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a150601180546001600160a01b0319166001600160a01b0392909216919091179055565b61201f6126c4565b61202881612703565b600260048190555061204b838383604051806020016040528060008152506120d1565b5050600160045550565b61205f3383612b76565b6120d15760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610de3565b6119de84848484613679565b60408051606081018252600080825260208201819052918101919091526011546001600160a01b03161561218657601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561214e57600080fd5b505afa158015612162573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153b9190614886565b50604080516060810182526000808252602082018190529181019190915290565b336001600160a01b0383168114156121eb576040517fc934974800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03818116600081815260066020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f83347dcc77580bb841ae3bac834b5b8ac5ccd2326276d265e638987eb6b2c0569101611663565b606061225b826125f2565b600061227260408051602081019091526000815290565b905060008151116122925760405180602001604052806000815250611155565b8061229c84613702565b6040516020016122ad9291906149e4565b6040516020818303038152906040529392505050565b6011546060906001600160a01b03161561154057601154604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561232257600080fd5b505afa158015612336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235a9190614886565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024016114e7565b600181815481106123a357600080fd5b6000918252602090912001546001600160a01b0316905081565b6123c56126c4565b6123ce81612703565b600260045561204b8383836111d8565b6123e66125ea565b6123ef81612e03565b6110bf82826001612ea0565b6124036134ee565b6001600160a01b03811661247f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610de3565b61141981613548565b6124906125ea565b61249984611eca565b604051630368065360e61b81526001600160a01b0385169063da0194c0906124c790309087906004016149c7565b600060405180830381600087803b1580156124e157600080fd5b505af11580156124f5573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561255157600080fd5b505af1158015612565573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d744314915060440161184f565b60006001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001480610a305750610a30826137ac565b611b306134ee565b6000818152600b60205260409020546001600160a01b03166114195760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610de3565b6000818152600d6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061268b82611887565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6126cd336105c3565b611b30576040517ff4b8028800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271561270f826137ea565b3361079f565b611419576040517fdb07237500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061275b8686866119e4565b92509250925082612798576040517f85fceded00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008681526007602090815260408083206001600160a01b03891684529091528120548591906127ca906001906147e7565b905080831461294f5760008881526007602090815260408083206001600160a01b038b1684529091529020805482908110612807576128076147fe565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16600760008a81526020019081526020016000206000896001600160a01b03166001600160a01b031681526020019081526020016000208481548110612874576128746147fe565b600091825260208083206008808404909101805463ffffffff96871660046007968716026101000a90810297021916959095179094558b835292835260408083206001600160a01b038c168085529085528184208d855292855281842090845290935291812080548693929190859081106128f1576128f16147fe565b6000918252602080832060088304015460079092166004026101000a90910463ffffffff90811684529083019390935260409091019020805470ffffffff000000000000000000000000001916600160681b93909216929092021790555b60008881526007602090815260408083206001600160a01b038b168452909152902080548061298057612980614814565b600082815260208082206008600019909401848104909101805463ffffffff600460078516026101000a81021990911690915594558b825291825260408082206001600160a01b038c1683528352808220938616825292909152908120805470ffffffffffffffffffffffffffffffffff191690556129fe896137ea565b9050876001600160a01b0316816001600160a01b03168a7f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee8a600080604051612a5c9392919092835290151560208301521515604082015260600190565b60405180910390a4876001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612a9d57600080fd5b505afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad591906148f8565b15612afb5760008981526005602052604081208054909190612af690614a13565b909155505b604051636d4229c960e01b81526001600160a01b038281166004830152602482018b90526044820189905260648201879052891690636d4229c990608401600060405180830381600087803b158015612b5357600080fd5b505af1158015612b67573d6000803e3d6000fd5b50505050505050505050505050565b600080612b8283611887565b9050806001600160a01b0316846001600160a01b03161480612bc957506001600160a01b038082166000908152600e602090815260408083209388168352929052205460ff165b80612bed5750836001600160a01b0316612be284610d2b565b6001600160a01b0316145b949350505050565b826001600160a01b0316612c0882611887565b6001600160a01b031614612c6c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610de3565b6001600160a01b038216612ce75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610de3565b612cf483838360016137f5565b826001600160a01b0316612d0782611887565b6001600160a01b031614612d6b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610de3565b6000818152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652600c8552838620805460001901905590871680865283862080546001019055868652600b90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4610e84838383600161387a565b6001600160a01b03811660009081526002602052604090205460ff1615611419576040517fb6708d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33612e60826137ea565b6001600160a01b031614611419576040517fb1160e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612eab846137ea565b60008581526007602090815260408083206001600160a01b038816845290915281205491925050836001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612f0b57600080fd5b505afa158015612f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4391906148f8565b15612f6c5760008581526005602052604081208054839290612f669084906147e7565b90915550505b60005b818110156131585760008681526007602090815260408083206001600160a01b03891684529091528120805483908110612fab57612fab6147fe565b600091825260208083206008808404909101548b855290825260408085206001600160a01b038c8116808852918552828720600790961660040261010090810a90940463ffffffff9081168089529686528388208451608081018652905460ff81161515825295860482168188015265010000000000860467ffffffffffffffff16818601819052600160681b9096049091166060808301919091528451888152968701989098528c151593860193909352949650909491939092908916918c917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee910160405180910390a460008981526008602090815260408083206001600160a01b038c811680865291845282852063ffffffff8916808752945293829020805470ffffffffffffffffffffffffffffffffff191690559051636d4229c960e01b81529289166004840152602483018c905260448301919091526064820183905290636d4229c990608401600060405180830381600087803b15801561313257600080fd5b505af1158015613146573d6000803e3d6000fd5b50505050836001019350505050612f6f565b5060008581526007602090815260408083206001600160a01b0388168452909152812061318491614158565b5050505050565b61319582826138a1565b6110bf82826139d4565b6131a881613b77565b61141981613c24565b60006131be8484846119e4565b5050905080156131fa576040517fbf2bc3b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526007602090815260408083206001600160a01b03871684529091529020547f00000000000000000000000000000000000000000000000000000000000000008110613276576040517f026a381300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526007602081815260408084206001600160a01b038916808652908352818520805460018082018355918752848720600880830490910180549290971660040261010090810a63ffffffff818102199094168d8516918202179098558d895290865284882093885292855283872086885290945291852080547fffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff0016650100000000004267ffffffffffffffff1602179092177fffffffffffffffffffffffffffffff00000000ffffffffffffffff00000000ff16930270ffffffff00000000000000000000000000191692909217600160681b918516919091021790558390613382876137ea565b604080518781526001602082015260008183015290519192506001600160a01b0388811692908416918a917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee9181900360600190a4856001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b15801561341057600080fd5b505afa158015613424573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344891906148f8565b15613463576000878152600560205260409020805460010190555b6040517f688a37410000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018990526044820187905287169063688a374190606401600060405180830381600087803b1580156134cd57600080fd5b505af11580156134e1573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b03163314611b305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610de3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6110bf828260405180602001604052806000815250613c9b565b816001600160a01b0316836001600160a01b031614156136145760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610de3565b6001600160a01b038381166000818152600e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611663565b613684848484612bf5565b61369084848484613d24565b6119de5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610de3565b6060600061370f83613e87565b600101905060008167ffffffffffffffff81111561372f5761372f6145eb565b6040519080825280601f01601f191660200182016040528015613759576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461379f576137a4565b613763565b509392505050565b60006001600160e01b031982167f86455d28000000000000000000000000000000000000000000000000000000001480610a305750610a3082613f69565b6000610a3082611887565b6000805b828110156138725761380b8185614a2a565b60008181526005602052604090205490925015613854576040517fe49dac6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600454141561386a5761386a868684613fa7565b6001016137f9565b505050505050565b60005b818110156131845761389985856138948487614a2a565b614003565b60010161387d565b6001600160a01b0382166138e1576040517fddc3fc8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152601260205260409020546001600160a01b031615613930576040517f3b2a1e5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182526001600160a01b038481168083527f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff818116602080870182815260008a81526012835289902097519051909316600160a01b02929095169190911790945593519283529184917f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af254202539101611663565b6001600160a01b038216613a2a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610de3565b6000818152600b60205260409020546001600160a01b031615613a8f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610de3565b613a9d6000838360016137f5565b6000818152600b60205260409020546001600160a01b031615613b025760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610de3565b6001600160a01b0382166000818152600c6020908152604080832080546001019055848352600b90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46110bf60008383600161387a565b6000613b8282611887565b9050613b928160008460016137f5565b613b9b82611887565b6000838152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552600c84528285208054600019019055878552600b909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46110bf81600084600161387a565b6000818152601260205260408120819055817f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af254202537f00000000000000000000000000000000000000000000000000000000000000006040516bffffffffffffffffffffffff909116815260200160405180910390a350565b613ca5838361318b565b613cb26000848484613d24565b610e845760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610de3565b60006001600160a01b0384163b15613e7c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613d68903390899088908890600401614a42565b602060405180830381600087803b158015613d8257600080fd5b505af1925050508015613db2575060408051601f3d908101601f19168201909252613daf91810190614a74565b60015b613e62573d808015613de0576040519150601f19603f3d011682016040523d82523d6000602084013e613de5565b606091505b508051613e5a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610de3565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612bed565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613ed0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613efc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613f1a57662386f26fc10000830492506010015b6305f5e1008310613f32576305f5e100830492506008015b6127108310613f4657612710830492506004015b60648310613f58576064830492506002015b600a8310610a305760010192915050565b60006001600160e01b031982167ff9f7ab41000000000000000000000000000000000000000000000000000000001480610a305750610a3082614051565b6001600160a01b038381161590831615818015613fc15750805b15613fdf57604051635cbd944160e01b815260040160405180910390fd5b8115613feb575b613184565b8015613ff657613fe6565b61318433868686346140d3565b6001600160a01b03838116159083161581801561401d5750805b1561403b57604051635cbd944160e01b815260040160405180910390fd5b811561404657613fe6565b8015613fe657613fe6565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806140b457506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a3057506301ffc9a760e01b6001600160e01b0319831614610a30565b6011546001600160a01b0316156131845760115460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561413957600080fd5b505afa15801561414d573d6000803e3d6000fd5b505050505050505050565b50805460008255600701600890049060005260206000209081019061141991905b8082111561418d5760008155600101614179565b5090565b6001600160e01b03198116811461141957600080fd5b6000602082840312156141b957600080fd5b813561115581614191565b60005b838110156141df5781810151838201526020016141c7565b838111156119de5750506000910152565b600081518084526142088160208601602086016141c4565b601f01601f19169290920160200192915050565b60208152600061115560208301846141f0565b6001600160a01b038116811461141957600080fd5b60006020828403121561425657600080fd5b81356111558161422f565b60006020828403121561427357600080fd5b5035919050565b6000806040838503121561428d57600080fd5b82356142988161422f565b946020939093013593505050565b600080604083850312156142b957600080fd5b8235915060208301356142cb8161422f565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b828110156143425781518051151585528681015163ffffffff908116888701528682015167ffffffffffffffff16878701526060918201511690850152608090930192908501906001016142f3565b5091979650505050505050565b60008060006060848603121561436457600080fd5b8335925060208401356143768161422f565b9150604084013563ffffffff8116811461438f57600080fd5b809150509250925092565b600080604083850312156143ad57600080fd5b50508035926020909101359150565b6000806000606084860312156143d157600080fd5b83356143dc8161422f565b925060208401356143ec8161422f565b9150604084013561438f8161422f565b6007811061441a57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a3082846143fc565b60008060006060848603121561444157600080fd5b833561444c8161422f565b9250602084013561445c8161422f565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156144ae5783516001600160a01b031683529284019291840191600101614489565b50909695505050505050565b6000806000606084860312156144cf57600080fd5b83359250602084013561445c8161422f565b600080604083850312156144f457600080fd5b8235915060208301356bffffffffffffffffffffffff811681146142cb57600080fd5b6007811061141957600080fd5b6effffffffffffffffffffffffffffff8116811461141957600080fd5b60008060006060848603121561455657600080fd5b833561456181614517565b9250602084013561457181614524565b9150604084013561438f81614524565b6000806040838503121561459457600080fd5b823561459f8161422f565b915060208301356142cb8161422f565b801515811461141957600080fd5b600080604083850312156145d057600080fd5b82356145db8161422f565b915060208301356142cb816145af565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561462a5761462a6145eb565b604052919050565b6000806000806080858703121561464857600080fd5b84356146538161422f565b93506020858101356146648161422f565b935060408601359250606086013567ffffffffffffffff8082111561468857600080fd5b818801915088601f83011261469c57600080fd5b8135818111156146ae576146ae6145eb565b6146c0601f8201601f19168501614601565b915080825289848285010111156146d657600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006060820190506147098284516143fc565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b6000806000806080858703121561475057600080fd5b843561475b8161422f565b9350602085013561476b81614517565b9250604085013561477b81614524565b9150606085013561478b81614524565b939692955090935050565b600181811c908216806147aa57607f821691505b602082108114156147cb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156147f9576147f96147d1565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141561483e5761483e6147d1565b5060010190565b600081600019048311821515161561485f5761485f6147d1565b500290565b60008261488157634e487b7160e01b600052601260045260246000fd5b500490565b60006060828403121561489857600080fd5b6040516060810181811067ffffffffffffffff821117156148bb576148bb6145eb565b60405282516148c981614517565b815260208301516148d981614524565b602082015260408301516148ec81614524565b60408201529392505050565b60006020828403121561490a57600080fd5b8151611155816145af565b6000602080838503121561492857600080fd5b825167ffffffffffffffff8082111561494057600080fd5b818501915085601f83011261495457600080fd5b815181811115614966576149666145eb565b8060051b9150614977848301614601565b818152918301840191848101908884111561499157600080fd5b938501935b838510156149bb57845192506149ab8361422f565b8282529385019390850190614996565b98975050505050505050565b6001600160a01b03831681526040810161115560208301846143fc565b600083516149f68184602088016141c4565b835190830190614a0a8183602088016141c4565b01949350505050565b600081614a2257614a226147d1565b506000190190565b60008219821115614a3d57614a3d6147d1565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611d9660808301846141f0565b600060208284031215614a8657600080fd5b81516111558161419156fea26469706673582212201509cac228d7b30fec32564b6f8428e04aed2330caf6c79691b1af2217d13e3864736f6c63430008090033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103995760003560e01c80636c3b8699116101e9578063a9fc664e1161010f578063d007af5c116100ad578063e985e9c51161007c578063e985e9c5146109b0578063f1e923c5146109ec578063f2fde38b146109ff578063fd762d9214610a1257600080fd5b8063d007af5c14610979578063d73792a914610981578063e2989f4c1461098a578063e370ab461461099d57600080fd5b8063b88d4fde116100e9578063b88d4fde1461092b578063be537f431461093e578063c05e2f4414610953578063c87b56dd1461096657600080fd5b8063a9fc664e146108a1578063aa6cab5a146108b4578063aca139f71461091857600080fd5b8063869f9110116101875780639bc17ea4116101565780639bc17ea4146108555780639d645a4414610868578063a14481941461087b578063a22cb4651461088e57600080fd5b8063869f9110146107e05780638da5cb5b14610806578063916237181461081757806395d89b411461084d57600080fd5b8063715018a6116101c3578063715018a6146107765780637e10b35b1461077e5780637f1a5ce114610791578063816a1501146107cd57600080fd5b80636c3b86991461071d578063703fa9291461072557806370a082311461075557600080fd5b80632e8da829116102ce5780634e02c0781161026c57806353401df91161023b57806353401df9146106bc5780635d4c1d46146106cf57806361347162146106f75780636352211e1461070a57600080fd5b80634e02c0781461062f5780634ef622531461064257806351dadc2814610655578063521f5e6a1461067d57600080fd5b806340c10f19116102a857806340c10f19146105e157806342842e0e146105f457806342966c6814610607578063495c8bf91461061a57600080fd5b80632e8da8291461058f5780632ebb386a146105a2578063301be740146105b557600080fd5b80630f3d911c1161033b5780631b25b077116103155780631b25b077146105225780631c33b3281461053557806323b872dd1461054a5780632a55205a1461055d57600080fd5b80630f3d911c14610458578063113405571461047857806311ad40811461050f57600080fd5b8063070cba1711610377578063070cba171461040c578063081812fc14610421578063095ea7b314610434578063098144d41461044757600080fd5b8063014635461461039e57806301ffc9a7146103d457806306fdde03146103f7575b600080fd5b6103b771721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6103e76103e23660046141a7565b610a25565b60405190151581526020016103cb565b6103ff610a36565b6040516103cb919061421c565b61041f61041a366004614244565b610ac8565b005b6103b761042f366004614261565b610d2b565b61041f61044236600461427a565b610d52565b6011546001600160a01b03166103b7565b61046b6104663660046142a6565b610e89565b6040516103cb91906142d6565b6104d861048636600461434f565b600860209081526000938452604080852082529284528284209052825290205460ff81169063ffffffff610100820481169167ffffffffffffffff6501000000000082041691600160681b9091041684565b60408051941515855263ffffffff938416602086015267ffffffffffffffff909216918401919091521660608201526080016103cb565b61041f61051d36600461439a565b6110a3565b6103e76105303660046143bc565b6110c3565b61053d600181565b6040516103cb919061441e565b61041f61055836600461442c565b61115c565b61057061056b36600461439a565b6111e3565b604080516001600160a01b0390931683526020830191909152016103cb565b6103e761059d366004614244565b61129b565b61041f6105b03660046142a6565b6113cd565b6103e76105c3366004614244565b6001600160a01b031660009081526002602052604090205460ff1690565b61041f6105ef36600461427a565b6113eb565b61041f61060236600461442c565b6113f5565b61041f610615366004614261565b611410565b61062261141c565b6040516103cb919061446d565b61041f61063d3660046144ba565b611553565b61041f6106503660046144e1565b611570565b6106686106633660046144ba565b611670565b60405163ffffffff90911681526020016103cb565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516bffffffffffffffffffffffff90911681526020016103cb565b61041f6106ca36600461439a565b6116c6565b6106d7600181565b6040516effffffffffffffffffffffffffffff90911681526020016103cb565b61041f610705366004614541565b6116e2565b6103b7610718366004614261565b611887565b61041f6118ec565b6107386107333660046144ba565b6119e4565b6040805193151584526020840192909252908201526060016103cb565b610768610763366004614244565b611a84565b6040519081526020016103cb565b61041f611b1e565b61041f61078c366004614244565b611b32565b6103e761079f366004614581565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6107686107db3660046144ba565b611d6b565b7f0000000000000000000000000000000000000000000000000000000000000000610768565b6000546001600160a01b03166103b7565b6107686108253660046142a6565b60009182526007602090815260408084206001600160a01b0393909316845291905290205490565b6103ff611da0565b61041f610863366004614261565b611daf565b6103e7610876366004614244565b611dd6565b61041f61088936600461427a565b611eb5565b61041f61089c3660046145bd565b611ebf565b61041f6108af366004614244565b611eca565b6108f06108c2366004614244565b60026020526000908152604090205460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b6040805192151583526fffffffffffffffffffffffffffffffff9091166020830152016103cb565b61041f61092636600461442c565b612017565b61041f610939366004614632565b612055565b6109466120dd565b6040516103cb91906146f6565b61041f6109613660046145bd565b6121a7565b6103ff610974366004614261565b612250565b6106226122c3565b61069f61271081565b6103b7610998366004614261565b612393565b61041f6109ab36600461442c565b6123bd565b6103e76109be366004614581565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205460ff1690565b61041f6109fa3660046142a6565b6123de565b61041f610a0d366004614244565b6123fb565b61041f610a2036600461473a565b612488565b6000610a30826125ac565b92915050565b6060600f8054610a4590614796565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190614796565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b610ad06125ea565b6001600160a01b03811660009081526002602052604090205460ff16610b22576040517f385f0cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812054600180546101009092046fffffffffffffffffffffffffffffffff169291610b6391906147e7565b905080826fffffffffffffffffffffffffffffffff1614610c915760018181548110610b9157610b916147fe565b600091825260209091200154600180546001600160a01b03909216916fffffffffffffffffffffffffffffffff8516908110610bcf57610bcf6147fe565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600260006001856fffffffffffffffffffffffffffffffff1681548110610c2757610c276147fe565b60009182526020808320909101546001600160a01b03168352820192909252604001902080546fffffffffffffffffffffffffffffffff92909216610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff9092169190911790555b6001805480610ca257610ca2614814565b60008281526020808220600019908401810180546001600160a01b03191690559092019092556001600160a01b038516808352600282526040808420805470ffffffffffffffffffffffffffffffffff1916905551928352917fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a2505050565b6000610d36826125f2565b506000908152600d60205260409020546001600160a01b031690565b6000610d5d82611887565b9050806001600160a01b0316836001600160a01b03161415610dec5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b0382161480610e085750610e0881336109be565b610e7a5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610de3565b610e848383612656565b505050565b60008281526007602090815260408083206001600160a01b03851684529091529020546060908067ffffffffffffffff811115610ec857610ec86145eb565b604051908082528060200260200182016040528015610f1a57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610ee65790505b5060008581526007602090815260408083206001600160a01b0388168452825280832080548251818502810185019093528083529496509293909291830182828015610fb157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f745790505b5050505050905060005b8281101561109a5760008681526008602090815260408083206001600160a01b038916845290915281208351909190849084908110610ffc57610ffc6147fe565b60209081029190910181015163ffffffff90811683528282019390935260409182016000208251608081018452905460ff811615158252610100810485169282019290925267ffffffffffffffff6501000000000083041692810192909252600160681b90049091166060820152845185908390811061107e5761107e6147fe565b6020026020010181905250806110939061482a565b9050610fbb565b50505092915050565b6110ab6126c4565b6110b482612703565b6110bf82338361274b565b5050565b6011546000906001600160a01b0316156111515760115460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561112c57600080fd5b505afa92505050801561113d575060015b61114957506000611155565b506001611155565b5060015b9392505050565b6111663382612b76565b6111d85760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610de3565b610e84838383612bf5565b60008281526012602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291611262577f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1660208201525b8051602082015161271090611285906bffffffffffffffffffffffff1687614845565b61128f9190614864565b92509250509250929050565b6011546000906001600160a01b0316156113c557601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b1580156112fa57600080fd5b505afa15801561130e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113329190614886565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b15801561138d57600080fd5b505afa1580156113a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3091906148f8565b506000919050565b6113d681612e03565b6113df82612e56565b6110bf82826000612ea0565b6110bf828261318b565b610e8483838360405180602001604052806000815250612055565b6114198161319f565b50565b6011546060906001600160a01b03161561154057601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b15801561147b57600080fd5b505afa15801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b39190614886565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b1580156114ff57600080fd5b505afa158015611513573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261153b9190810190614915565b905090565b5060408051600081526020810190915290565b61155c82612e03565b61156583612e56565b610e8483838361274b565b6127106bffffffffffffffffffffffff821611156115ba576040517f16fc4d9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260126020526040902080546001600160a01b0316331461160b576040517f130e6cf200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546001600160a01b0316600160a01b6bffffffffffffffffffffffff8416908102919091178255604051908152339084907f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af25420253906020015b60405180910390a3505050565b6007602052826000526040600020602052816000526040600020818154811061169857600080fd5b906000526020600020906008918282040191900660040292509250509054906101000a900463ffffffff1681565b6116ce6126c4565b6116d782612703565b6110bf8233836131b1565b6116ea6125ea565b60006116fe6011546001600160a01b031690565b90506001600160a01b038116611740576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c09061176e90309088906004016149c7565b600060405180830381600087803b15801561178857600080fd5b505af115801561179c573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b1580156117f857600080fd5b505af115801561180c573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561186957600080fd5b505af115801561187d573d6000803e3d6000fd5b5050505050505050565b6000818152600b60205260408120546001600160a01b031680610a305760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610de3565b6118f46125ea565b61190f71721c310194ccfc01e523fc93c9cccfa2a0ac611eca565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c0906119479030906001906004016149c7565b600060405180830381600087803b15801561196157600080fd5b505af1158015611975573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b1580156119ca57600080fd5b505af11580156119de573d6000803e3d6000fd5b50505050565b6000808063ffffffff841115611a26576040517f0b2530f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505060009283526008602090815260408085206001600160a01b0394909416855292815282842063ffffffff9283168552905291205460ff81169265010000000000820467ffffffffffffffff1692600160681b90920490911690565b60006001600160a01b038216611b025760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610de3565b506001600160a01b03166000908152600c602052604090205490565b611b266134ee565b611b306000613548565b565b611b3a6125ea565b6001600160a01b03811660009081526002602052604090205460ff1615611b8d576040517fd8110a5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516301ffc9a760e01b81527f977e0c1c0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a79060240160206040518083038186803b158015611bec57600080fd5b505afa158015611c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2491906148f8565b611c5a576040517fb50e580c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546fffffffffffffffffffffffffffffffff811115611ca7576040517f6daf72d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660008181526002602090815260408083208054600170ffffffffffffffffffffffffffffffffff199091166101006fffffffffffffffffffffffffffffffff89160217811790915580548082018255938190527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180546001600160a01b03191685179055519182527fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a25050565b6000806000611d7b8686866119e4565b509150915081611d8c576000611d96565b611d9681426147e7565b9695505050505050565b606060108054610a4590614796565b611db76126c4565b611dc081612703565b6002600455611dce81611410565b506001600455565b6011546000906001600160a01b0316156113c557601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b158015611e3557600080fd5b505afa158015611e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6d9190614886565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401611375565b6110bf8282613598565b6110bf3383836135b2565b611ed26125ea565b60006001600160a01b0382163b15611f60576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b158015611f2457600080fd5b505afa925050508015611f54575060408051601f3d908101601f19168201909252611f51918101906148f8565b60015b611f5d57611f60565b90505b6001600160a01b03821615801590611f76575080155b15611fad576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601154604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a150601180546001600160a01b0319166001600160a01b0392909216919091179055565b61201f6126c4565b61202881612703565b600260048190555061204b838383604051806020016040528060008152506120d1565b5050600160045550565b61205f3383612b76565b6120d15760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610de3565b6119de84848484613679565b60408051606081018252600080825260208201819052918101919091526011546001600160a01b03161561218657601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561214e57600080fd5b505afa158015612162573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153b9190614886565b50604080516060810182526000808252602082018190529181019190915290565b336001600160a01b0383168114156121eb576040517fc934974800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03818116600081815260066020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f83347dcc77580bb841ae3bac834b5b8ac5ccd2326276d265e638987eb6b2c0569101611663565b606061225b826125f2565b600061227260408051602081019091526000815290565b905060008151116122925760405180602001604052806000815250611155565b8061229c84613702565b6040516020016122ad9291906149e4565b6040516020818303038152906040529392505050565b6011546060906001600160a01b03161561154057601154604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561232257600080fd5b505afa158015612336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235a9190614886565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024016114e7565b600181815481106123a357600080fd5b6000918252602090912001546001600160a01b0316905081565b6123c56126c4565b6123ce81612703565b600260045561204b8383836111d8565b6123e66125ea565b6123ef81612e03565b6110bf82826001612ea0565b6124036134ee565b6001600160a01b03811661247f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610de3565b61141981613548565b6124906125ea565b61249984611eca565b604051630368065360e61b81526001600160a01b0385169063da0194c0906124c790309087906004016149c7565b600060405180830381600087803b1580156124e157600080fd5b505af11580156124f5573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561255157600080fd5b505af1158015612565573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d744314915060440161184f565b60006001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001480610a305750610a30826137ac565b611b306134ee565b6000818152600b60205260409020546001600160a01b03166114195760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610de3565b6000818152600d6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061268b82611887565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6126cd336105c3565b611b30576040517ff4b8028800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271561270f826137ea565b3361079f565b611419576040517fdb07237500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061275b8686866119e4565b92509250925082612798576040517f85fceded00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008681526007602090815260408083206001600160a01b03891684529091528120548591906127ca906001906147e7565b905080831461294f5760008881526007602090815260408083206001600160a01b038b1684529091529020805482908110612807576128076147fe565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16600760008a81526020019081526020016000206000896001600160a01b03166001600160a01b031681526020019081526020016000208481548110612874576128746147fe565b600091825260208083206008808404909101805463ffffffff96871660046007968716026101000a90810297021916959095179094558b835292835260408083206001600160a01b038c168085529085528184208d855292855281842090845290935291812080548693929190859081106128f1576128f16147fe565b6000918252602080832060088304015460079092166004026101000a90910463ffffffff90811684529083019390935260409091019020805470ffffffff000000000000000000000000001916600160681b93909216929092021790555b60008881526007602090815260408083206001600160a01b038b168452909152902080548061298057612980614814565b600082815260208082206008600019909401848104909101805463ffffffff600460078516026101000a81021990911690915594558b825291825260408082206001600160a01b038c1683528352808220938616825292909152908120805470ffffffffffffffffffffffffffffffffff191690556129fe896137ea565b9050876001600160a01b0316816001600160a01b03168a7f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee8a600080604051612a5c9392919092835290151560208301521515604082015260600190565b60405180910390a4876001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612a9d57600080fd5b505afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad591906148f8565b15612afb5760008981526005602052604081208054909190612af690614a13565b909155505b604051636d4229c960e01b81526001600160a01b038281166004830152602482018b90526044820189905260648201879052891690636d4229c990608401600060405180830381600087803b158015612b5357600080fd5b505af1158015612b67573d6000803e3d6000fd5b50505050505050505050505050565b600080612b8283611887565b9050806001600160a01b0316846001600160a01b03161480612bc957506001600160a01b038082166000908152600e602090815260408083209388168352929052205460ff165b80612bed5750836001600160a01b0316612be284610d2b565b6001600160a01b0316145b949350505050565b826001600160a01b0316612c0882611887565b6001600160a01b031614612c6c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610de3565b6001600160a01b038216612ce75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610de3565b612cf483838360016137f5565b826001600160a01b0316612d0782611887565b6001600160a01b031614612d6b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610de3565b6000818152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652600c8552838620805460001901905590871680865283862080546001019055868652600b90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4610e84838383600161387a565b6001600160a01b03811660009081526002602052604090205460ff1615611419576040517fb6708d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33612e60826137ea565b6001600160a01b031614611419576040517fb1160e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612eab846137ea565b60008581526007602090815260408083206001600160a01b038816845290915281205491925050836001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612f0b57600080fd5b505afa158015612f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4391906148f8565b15612f6c5760008581526005602052604081208054839290612f669084906147e7565b90915550505b60005b818110156131585760008681526007602090815260408083206001600160a01b03891684529091528120805483908110612fab57612fab6147fe565b600091825260208083206008808404909101548b855290825260408085206001600160a01b038c8116808852918552828720600790961660040261010090810a90940463ffffffff9081168089529686528388208451608081018652905460ff81161515825295860482168188015265010000000000860467ffffffffffffffff16818601819052600160681b9096049091166060808301919091528451888152968701989098528c151593860193909352949650909491939092908916918c917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee910160405180910390a460008981526008602090815260408083206001600160a01b038c811680865291845282852063ffffffff8916808752945293829020805470ffffffffffffffffffffffffffffffffff191690559051636d4229c960e01b81529289166004840152602483018c905260448301919091526064820183905290636d4229c990608401600060405180830381600087803b15801561313257600080fd5b505af1158015613146573d6000803e3d6000fd5b50505050836001019350505050612f6f565b5060008581526007602090815260408083206001600160a01b0388168452909152812061318491614158565b5050505050565b61319582826138a1565b6110bf82826139d4565b6131a881613b77565b61141981613c24565b60006131be8484846119e4565b5050905080156131fa576040517fbf2bc3b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526007602090815260408083206001600160a01b03871684529091529020547f00000000000000000000000000000000000000000000000000000000000000008110613276576040517f026a381300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526007602081815260408084206001600160a01b038916808652908352818520805460018082018355918752848720600880830490910180549290971660040261010090810a63ffffffff818102199094168d8516918202179098558d895290865284882093885292855283872086885290945291852080547fffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff0016650100000000004267ffffffffffffffff1602179092177fffffffffffffffffffffffffffffff00000000ffffffffffffffff00000000ff16930270ffffffff00000000000000000000000000191692909217600160681b918516919091021790558390613382876137ea565b604080518781526001602082015260008183015290519192506001600160a01b0388811692908416918a917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee9181900360600190a4856001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b15801561341057600080fd5b505afa158015613424573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344891906148f8565b15613463576000878152600560205260409020805460010190555b6040517f688a37410000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018990526044820187905287169063688a374190606401600060405180830381600087803b1580156134cd57600080fd5b505af11580156134e1573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b03163314611b305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610de3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6110bf828260405180602001604052806000815250613c9b565b816001600160a01b0316836001600160a01b031614156136145760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610de3565b6001600160a01b038381166000818152600e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611663565b613684848484612bf5565b61369084848484613d24565b6119de5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610de3565b6060600061370f83613e87565b600101905060008167ffffffffffffffff81111561372f5761372f6145eb565b6040519080825280601f01601f191660200182016040528015613759576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461379f576137a4565b613763565b509392505050565b60006001600160e01b031982167f86455d28000000000000000000000000000000000000000000000000000000001480610a305750610a3082613f69565b6000610a3082611887565b6000805b828110156138725761380b8185614a2a565b60008181526005602052604090205490925015613854576040517fe49dac6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600454141561386a5761386a868684613fa7565b6001016137f9565b505050505050565b60005b818110156131845761389985856138948487614a2a565b614003565b60010161387d565b6001600160a01b0382166138e1576040517fddc3fc8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152601260205260409020546001600160a01b031615613930576040517f3b2a1e5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182526001600160a01b038481168083527f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff818116602080870182815260008a81526012835289902097519051909316600160a01b02929095169190911790945593519283529184917f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af254202539101611663565b6001600160a01b038216613a2a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610de3565b6000818152600b60205260409020546001600160a01b031615613a8f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610de3565b613a9d6000838360016137f5565b6000818152600b60205260409020546001600160a01b031615613b025760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610de3565b6001600160a01b0382166000818152600c6020908152604080832080546001019055848352600b90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46110bf60008383600161387a565b6000613b8282611887565b9050613b928160008460016137f5565b613b9b82611887565b6000838152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552600c84528285208054600019019055878552600b909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46110bf81600084600161387a565b6000818152601260205260408120819055817f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af254202537f00000000000000000000000000000000000000000000000000000000000000006040516bffffffffffffffffffffffff909116815260200160405180910390a350565b613ca5838361318b565b613cb26000848484613d24565b610e845760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610de3565b60006001600160a01b0384163b15613e7c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613d68903390899088908890600401614a42565b602060405180830381600087803b158015613d8257600080fd5b505af1925050508015613db2575060408051601f3d908101601f19168201909252613daf91810190614a74565b60015b613e62573d808015613de0576040519150601f19603f3d011682016040523d82523d6000602084013e613de5565b606091505b508051613e5a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610de3565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612bed565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613ed0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613efc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613f1a57662386f26fc10000830492506010015b6305f5e1008310613f32576305f5e100830492506008015b6127108310613f4657612710830492506004015b60648310613f58576064830492506002015b600a8310610a305760010192915050565b60006001600160e01b031982167ff9f7ab41000000000000000000000000000000000000000000000000000000001480610a305750610a3082614051565b6001600160a01b038381161590831615818015613fc15750805b15613fdf57604051635cbd944160e01b815260040160405180910390fd5b8115613feb575b613184565b8015613ff657613fe6565b61318433868686346140d3565b6001600160a01b03838116159083161581801561401d5750805b1561403b57604051635cbd944160e01b815260040160405180910390fd5b811561404657613fe6565b8015613fe657613fe6565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806140b457506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a3057506301ffc9a760e01b6001600160e01b0319831614610a30565b6011546001600160a01b0316156131845760115460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561413957600080fd5b505afa15801561414d573d6000803e3d6000fd5b505050505050505050565b50805460008255600701600890049060005260206000209081019061141991905b8082111561418d5760008155600101614179565b5090565b6001600160e01b03198116811461141957600080fd5b6000602082840312156141b957600080fd5b813561115581614191565b60005b838110156141df5781810151838201526020016141c7565b838111156119de5750506000910152565b600081518084526142088160208601602086016141c4565b601f01601f19169290920160200192915050565b60208152600061115560208301846141f0565b6001600160a01b038116811461141957600080fd5b60006020828403121561425657600080fd5b81356111558161422f565b60006020828403121561427357600080fd5b5035919050565b6000806040838503121561428d57600080fd5b82356142988161422f565b946020939093013593505050565b600080604083850312156142b957600080fd5b8235915060208301356142cb8161422f565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b828110156143425781518051151585528681015163ffffffff908116888701528682015167ffffffffffffffff16878701526060918201511690850152608090930192908501906001016142f3565b5091979650505050505050565b60008060006060848603121561436457600080fd5b8335925060208401356143768161422f565b9150604084013563ffffffff8116811461438f57600080fd5b809150509250925092565b600080604083850312156143ad57600080fd5b50508035926020909101359150565b6000806000606084860312156143d157600080fd5b83356143dc8161422f565b925060208401356143ec8161422f565b9150604084013561438f8161422f565b6007811061441a57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a3082846143fc565b60008060006060848603121561444157600080fd5b833561444c8161422f565b9250602084013561445c8161422f565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156144ae5783516001600160a01b031683529284019291840191600101614489565b50909695505050505050565b6000806000606084860312156144cf57600080fd5b83359250602084013561445c8161422f565b600080604083850312156144f457600080fd5b8235915060208301356bffffffffffffffffffffffff811681146142cb57600080fd5b6007811061141957600080fd5b6effffffffffffffffffffffffffffff8116811461141957600080fd5b60008060006060848603121561455657600080fd5b833561456181614517565b9250602084013561457181614524565b9150604084013561438f81614524565b6000806040838503121561459457600080fd5b823561459f8161422f565b915060208301356142cb8161422f565b801515811461141957600080fd5b600080604083850312156145d057600080fd5b82356145db8161422f565b915060208301356142cb816145af565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561462a5761462a6145eb565b604052919050565b6000806000806080858703121561464857600080fd5b84356146538161422f565b93506020858101356146648161422f565b935060408601359250606086013567ffffffffffffffff8082111561468857600080fd5b818801915088601f83011261469c57600080fd5b8135818111156146ae576146ae6145eb565b6146c0601f8201601f19168501614601565b915080825289848285010111156146d657600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006060820190506147098284516143fc565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b6000806000806080858703121561475057600080fd5b843561475b8161422f565b9350602085013561476b81614517565b9250604085013561477b81614524565b9150606085013561478b81614524565b939692955090935050565b600181811c908216806147aa57607f821691505b602082108114156147cb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156147f9576147f96147d1565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141561483e5761483e6147d1565b5060010190565b600081600019048311821515161561485f5761485f6147d1565b500290565b60008261488157634e487b7160e01b600052601260045260246000fd5b500490565b60006060828403121561489857600080fd5b6040516060810181811067ffffffffffffffff821117156148bb576148bb6145eb565b60405282516148c981614517565b815260208301516148d981614524565b602082015260408301516148ec81614524565b60408201529392505050565b60006020828403121561490a57600080fd5b8151611155816145af565b6000602080838503121561492857600080fd5b825167ffffffffffffffff8082111561494057600080fd5b818501915085601f83011261495457600080fd5b815181811115614966576149666145eb565b8060051b9150614977848301614601565b818152918301840191848101908884111561499157600080fd5b938501935b838510156149bb57845192506149ab8361422f565b8282529385019390850190614996565b98975050505050505050565b6001600160a01b03831681526040810161115560208301846143fc565b600083516149f68184602088016141c4565b835190830190614a0a8183602088016141c4565b01949350505050565b600081614a2257614a226147d1565b506000190190565b60008219821115614a3d57614a3d6147d1565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611d9660808301846141f0565b600060208284031215614a8657600080fd5b81516111558161419156fea26469706673582212201509cac228d7b30fec32564b6f8428e04aed2330caf6c79691b1af2217d13e3864736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
