[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "authority", "type": "address" } ], "name": "AccessManagedInvalidAuthority", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "uint32", "name": "delay", "type": "uint32" } ], "name": "AccessManagedRequiredDelay", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" } ], "name": "AccessManagedUnauthorized", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "lengthA", "type": "uint256" }, { "internalType": "uint256", "name": "lengthB", "type": "uint256" } ], "name": "ArrayLengthMismatch", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "returnData", "type": "bytes" } ], "name": "CallFailed", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC1155InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC1155InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idsLength", "type": "uint256" }, { "internalType": "uint256", "name": "valuesLength", "type": "uint256" } ], "name": "ERC1155InvalidArrayLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC1155InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC1155InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC1155InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC1155MissingApprovalForAll", "type": "error" }, { "inputs": [], "name": "ERC20TransferSlippage", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [], "name": "ETHTransferFailed", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "IncorrectAmountSent", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidRecipient", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [], "name": "InvalidSignature", "type": "error" }, { "inputs": [], "name": "InvalidTokenPrice", "type": "error" }, { "inputs": [], "name": "NoUriForNonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "handler", "type": "address" } ], "name": "NotARedeemHandler", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [], "name": "TokenAlreadyCreated", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "storedTokenAddress", "type": "address" }, { "internalType": "address", "name": "expectedTokenAddress", "type": "address" } ], "name": "TokenMismatch", "type": "error" }, { "inputs": [], "name": "TokenNotMintable", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "authority", "type": "address" } ], "name": "AuthorityUpdated", "type": "event" }, { "anonymous": false, "inputs": [], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "price", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" } ], "name": "TokenCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "quantities", "type": "uint256[]" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "TransferBatchWithData", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "TransferSingleWithData", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "contractURI", "type": "string" }, { "indexed": false, "internalType": "string", "name": "baseURI", "type": "string" } ], "name": "URIsUpdated", "type": "event" }, { "inputs": [], "name": "ETH_ADDRESS", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_ERC20_PRICE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_ETH_PRICE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NAME", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "authority", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOfAccount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "address", "name": "redeemHandler", "type": "address" } ], "internalType": "struct TokenConfig", "name": "tokenConfig", "type": "tuple" } ], "name": "createToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getTokenConfig", "outputs": [ { "components": [ { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "address", "name": "redeemHandler", "type": "address" } ], "internalType": "struct TokenConfig", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "quantities", "type": "uint256[]" }, { "internalType": "bytes", "name": "safeTransferData", "type": "bytes" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "internalType": "struct IZoraSparks1155Managed.PermitBatch", "name": "permit", "type": "tuple" } ], "name": "hashPermitBatch", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "bytes", "name": "safeTransferData", "type": "bytes" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "internalType": "struct IZoraSparks1155Managed.PermitSingle", "name": "permit", "type": "tuple" } ], "name": "hashPermitSingle", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isConsumingScheduledOp", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "quantities", "type": "uint256[]" }, { "internalType": "bytes", "name": "safeTransferData", "type": "bytes" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "internalType": "struct IZoraSparks1155Managed.PermitBatch", "name": "permit", "type": "tuple" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "isValidSignatureTransferBatch", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "bytes", "name": "safeTransferData", "type": "bytes" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "internalType": "struct IZoraSparks1155Managed.PermitSingle", "name": "permit", "type": "tuple" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "isValidSignatureTransferSingle", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "mintTokenWithERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "mintTokenWithEth", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "name": "nonceUsed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newContractURI", "type": "string" }, { "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "notifyURIsUpdated", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newUri", "type": "string" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "notifyUpdatedTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "bytes", "name": "safeTransferData", "type": "bytes" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "internalType": "struct IZoraSparks1155Managed.PermitSingle", "name": "permit", "type": "tuple" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "permitSafeTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "quantities", "type": "uint256[]" }, { "internalType": "bytes", "name": "safeTransferData", "type": "bytes" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "internalType": "struct IZoraSparks1155Managed.PermitBatch", "name": "permit", "type": "tuple" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "permitSafeTransferBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "redeem", "outputs": [ { "components": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "valueRedeemed", "type": "uint256" } ], "internalType": "struct Redemption", "name": "", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "quantities", "type": "uint256[]" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "redeemBatch", "outputs": [ { "components": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "valueRedeemed", "type": "uint256" } ], "internalType": "struct Redemption[]", "name": "redemptions", "type": "tuple[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAuthority", "type": "address" } ], "name": "setAuthority", "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": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenExists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
610160604090808252346200022c57620000198162000231565b6006815260209081810165537061726b7360d01b815283516200003c8162000231565b6001808252603160f81b8286019081528651966001600160401b0396929091908884018881118a8210176200021657835260008099526002548181811c911680156200020b575b85821014620001f757601f8111620001cb575b5050876002553360018060a01b031960035416176003557f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad838351338152a1620000e0866200024d565b94610120958652620000f2856200042a565b96610140978852519020938460e05251902096610100978089524660a0528251938401947f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f86528385015260608401524660808401523060a084015260a0835260c083019683881090881117620001b757508590525190206080523060c0526148859384620005e38539608051846141f7015260a051846142b2015260c051846141c8015260e051846142460152518361426c0152518261194c015251816119780152f35b634e487b7160e01b81526041600452602490fd5b60028a52601f858b20910160051c8101905b818110620001ec575062000096565b8a81558201620001dd565b634e487b7160e01b8a52602260045260248afd5b90607f169062000083565b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b038211176200021657604052565b805160209081811015620002ea5750601f8251116200028957808251920151908083106200027a57501790565b82600019910360031b1b161790565b90604051809263305a27a960e01b82528060048301528251908160248401526000935b828510620002d0575050604492506000838284010152601f80199101168101030190fd5b8481018201518686016044015293810193859350620002ac565b906001600160401b0382116200021657600654926001938481811c911680156200041f575b838210146200040957601f8111620003cf575b5081601f841160011462000363575092829391839260009462000357575b50501b916000199060031b1c19161760065560ff90565b01519250388062000340565b919083601f198116600660005284600020946000905b88838310620003b457505050106200039a575b505050811b0160065560ff90565b015160001960f88460031b161c191690553880806200038c565b85870151885590960195948501948793509081019062000379565b600660005284601f84600020920160051c820191601f860160051c015b828110620003fc57505062000322565b60008155018590620003ec565b634e487b7160e01b600052602260045260246000fd5b90607f16906200030f565b805160209081811015620004b85750601f8251116200045757808251920151908083106200027a57501790565b90604051809263305a27a960e01b82528060048301528251908160248401526000935b8285106200049e575050604492506000838284010152601f80199101168101030190fd5b84810182015186860160440152938101938593506200047a565b906001600160401b0382116200021657600754926001938481811c91168015620005d7575b838210146200040957601f81116200059d575b5081601f841160011462000531575092829391839260009462000525575b50501b916000199060031b1c19161760075560ff90565b0151925038806200050e565b919083601f198116600760005284600020946000905b8883831062000582575050501062000568575b505050811b0160075560ff90565b015160001960f88460031b161c191690553880806200055a565b85870151885590960195948501948793509081019062000547565b600760005284601f84600020920160051c820191601f860160051c015b828110620005ca575050620004f0565b60008155018590620005ba565b90607f1690620004dd56fe6080604052600436101561001257600080fd5b60003560e01c8062923f9e14610275578062fdd58e1461027057806301ffc9a71461026b578063049104e51461026657806306fdde03146102615780630e89341c1461025c5780631647795e1461025757806317f64d1414610252578063226699861461024d5780632eb2c2d6146102485780634e1273f4146102435780635360abd01461023e57806360447d7f146102395780637450fb4314610234578063771474ca1461022f5780637a9e5e4b1461022a578063833ebb461461022557806384b0196e146102205780638a0038881461021b5780638fb360371461021657806391bc9c131461021157806395d89b411461020c578063a22cb46514610207578063a3f4df7e14610202578063a624d232146101fd578063a734f06e146101f8578063b24a6cbe146101f3578063bf7e214f146101ee578063c237d392146101e9578063cde1d787146101e4578063d4ddce8a146101df578063d83558b7146101da578063da6d1494146101d5578063e8a3d485146101d0578063e985e9c5146101cb578063ebc0ebb7146101c6578063f242432a146101c15763ffa1ad74146101bc57600080fd5b6123a5565b6122b7565b61227c565b6121da565b61211c565b6120fb565b61205f565b612015565b611fd8565b611f6f565b611f1d565b611f05565b611ecb565b611eab565b611de6565b611cbc565b611c36565b611b7e565b611ae7565b611a11565b611915565b6117b9565b61164e565b611496565b61145c565b611160565b61107b565b610fa1565b610df5565b610c10565b610a2c565b6107e5565b6106d5565b610659565b610485565b610393565b6102ec565b346102c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95760206102bf6004356000526004602052604060002054151590565b6040519015158152f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116036102c957565b346102c95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c957602061036060043561032c816102ce565b6024356000526000835260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036102c957565b346102c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95760207fffffffff000000000000000000000000000000000000000000000000000000006004356103f181610369565b167fd9b67a26000000000000000000000000000000000000000000000000000000008114908115610459575b811561042f575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438610424565b7f0e89341c000000000000000000000000000000000000000000000000000000008114915061041d565b565b346102c95760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c9576024356004356044356104c6816102ce565b6104ce613c1a565b5073ffffffffffffffffffffffffffffffffffffffff8116156105aa57331561057957828261053c61052661057596610541969160405192600184526020840152604083019160018352606084015260808301604052565b906000604051610535816108c5565b5233612fbd565b613cf7565b60405191829182815173ffffffffffffffffffffffffffffffffffffffff1681526020918201519181019190915260400190565b0390f35b60246040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152fd5b60046040517f9c8d2cd2000000000000000000000000000000000000000000000000000000008152fd5b60009103126102c957565b60005b8381106105f25750506000910152565b81810151838201526020016105e2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361063e815180928187528780880191016105df565b0116010190565b906020610656928181520190610602565b90565b346102c95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c957610575604051610697816108e1565b600b81527f5a6f726120537061726b730000000000000000000000000000000000000000006020820152604051918291602083526020830190610602565b346102c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95760043561071e816000526004602052604060002054151590565b156107bb576003546040517f0e89341c00000000000000000000000000000000000000000000000000000000815260048101929092526000908290602490829073ffffffffffffffffffffffffffffffffffffffff165afa80156107b65761057591600091610795575b5060405191829182610645565b6107b0913d8091833e6107a88183610952565b810190613b01565b38610788565b6129b1565b60046040517fbea350b8000000000000000000000000000000000000000000000000000000008152fd5b346102c95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95773ffffffffffffffffffffffffffffffffffffffff600435610835816102ce565b1660005260086020526040600020602435600052602052602060ff604060002054166040519015158152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176108ac57604052565b610861565b67ffffffffffffffff81116108ac57604052565b6020810190811067ffffffffffffffff8211176108ac57604052565b6040810190811067ffffffffffffffff8211176108ac57604052565b60a0810190811067ffffffffffffffff8211176108ac57604052565b610120810190811067ffffffffffffffff8211176108ac57604052565b60c0810190811067ffffffffffffffff8211176108ac57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108ac57604052565b60405190610483826108e1565b67ffffffffffffffff81116108ac57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926109e6826109a0565b916109f46040519384610952565b8294818452818301116102c9578281602093846000960137010152565b9080601f830112156102c957816020610656933591016109da565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95760046044356024358235610a69836102ce565b60643567ffffffffffffffff81116102c957610a889036908601610a11565b92610a9336336129bd565b816000528460205260406000208054908115610b45576001015473ffffffffffffffffffffffffffffffffffffffff1680610b0e575083610ad391612d9e565b3403610ae557610ae39450612db1565b005b846040517f19a6bd0f000000000000000000000000000000000000000000000000000000008152fd5b86604491604051917ff902523f00000000000000000000000000000000000000000000000000000000835282015260006024820152fd5b866040517fceea21b6000000000000000000000000000000000000000000000000000000008152fd5b908160e09103126102c95790565b9181601f840112156102c95782359167ffffffffffffffff83116102c957602083818601950101116102c957565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126102c95767ffffffffffffffff6004358181116102c95783610bf591600401610b6e565b926024359182116102c957610c0c91600401610b7c565b9091565b346102c957610c1e36610baa565b9060a08301354211610d3f57610c3383614000565b60c0840135610c4191614782565b610c4a8361430c565b91610c5484614000565b91610c5e9361470e565b610c6781614000565b906020810191610c7683614000565b906040830192610c86848261400a565b9290936060830194610c98868561400a565b90956080860196610ca9888861405e565b9490923690610cb792610d8c565b923690610cc392610d8c565b923690610ccf926109da565b92610cd99461467b565b610ce281614000565b94610cec90614000565b93610cf7908261400a565b919093610d04908261400a565b93610d0f919261405e565b9490923690610d1d92610d8c565b923690610d2992610d8c565b923690610d35926109da565b92610ae394613f73565b6040517f62791302000000000000000000000000000000000000000000000000000000008152426004820152602490fd5b0390fd5b67ffffffffffffffff81116108ac5760051b60200190565b9291610d9782610d74565b91610da56040519384610952565b829481845260208094019160051b81019283116102c957905b828210610dcb5750505050565b81358152908301908301610dbe565b9080601f830112156102c95781602061065693359101610d8c565b346102c95760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c957600435610e30816102ce565b602435610e3c816102ce565b67ffffffffffffffff6044358181116102c957610e5d903690600401610dda565b6064358281116102c957610e75903690600401610dda565b916084359081116102c957610e8e903690600401610a11565b92610e9c848484848961467b565b73ffffffffffffffffffffffffffffffffffffffff8516338114159081610f19575b50610ecc57610ae394613f73565b6040517fe237d92200000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff86166024820152604490fd5b9050600052600160205260ff610f533360406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54161538610ebe565b90815180825260208080930193019160005b828110610f7c575050505090565b835185529381019392810192600101610f6e565b906020610656928181520190610f5c565b346102c95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95760043567ffffffffffffffff8082116102c957366023830112156102c9578160040135610ffc81610d74565b9261100a6040519485610952565b81845260209160248386019160051b830101913683116102c957602401905b82821061106257856024358681116102c95761057591611050611056923690600401610dda565b9061259e565b60405191829182610f90565b8380918335611070816102ce565b815201910190611029565b346102c95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95767ffffffffffffffff6004358181116102c9576110cb903690600401610b7c565b6024359283116102c9576111366111077f024d3b5c4ecd400a45d7853bab08b84af9ac886c97b1e896e7afb6e877eb122f943690600401610b7c565b61111136336129bd565b61112860405195869560408752604087019161290f565b91848303602086015261290f565b0390a17fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad962600080a1005b346102c95760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95760043560607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126102c9576111c636336129bd565b6040908151906111d582610890565b60243582526044356111e6816102ce565b60208301908152606435936111fa856102ce565b808401948552611214836000526004602052604060002090565b546114335773ffffffffffffffffffffffffffffffffffffffff908161124e845173ffffffffffffffffffffffffffffffffffffffff1690565b1661142b57633b9aca005b855110611402578161127f875173ffffffffffffffffffffffffffffffffffffffff1690565b168015159081611364575b506112f657610ae3856112f18686866112b98551925173ffffffffffffffffffffffffffffffffffffffff1690565b1690827f0f91f79b60765ed60c8537a0c2f417bfc1ab0a46df716a76bc7ba5130529898f600080a46000526004602052604060002090565b612ce9565b610d7090611318875173ffffffffffffffffffffffffffffffffffffffff1690565b90517f9f4343d400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201529081906024820190565b82517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f8c6d87140000000000000000000000000000000000000000000000000000000060048201529150602090829060249082905afa9081156107b6576000916113d4575b50153861128a565b6113f5915060203d81116113fb575b6113ed8183610952565b810190612ba6565b386113cc565b503d6113e3565b600490517ff0838592000000000000000000000000000000000000000000000000000000008152fd5b612710611259565b600490517f64933663000000000000000000000000000000000000000000000000000000008152fd5b346102c95760206102bf61149061147236610baa565b929061147d836140af565b923593611489856102ce565b36916109da565b91614464565b346102c95760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c9576004356024356114d4816102ce565b604435606435926114e4846102ce565b60843567ffffffffffffffff81116102c957611504903690600401610a11565b9261150f36336129bd565b73ffffffffffffffffffffffffffffffffffffffff611537846115328486613b60565b612d9e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000808252306004830152909360209316908385602481855afa9485156107b65760009561162d575b50839061159184303386613963565b60405190815230600482015291829060249082905afa9283156107b6576000936115fa575b50506115c29192613956565b036115d057610ae393612db1565b60046040517fdc5b522d000000000000000000000000000000000000000000000000000000008152fd5b6115c29350908161161f92903d10611626575b6116178183610952565b810190613947565b91386115b6565b503d61160d565b8491955061164790823d8411611626576116178183610952565b9490611582565b346102c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c957600435611689816102ce565b73ffffffffffffffffffffffffffffffffffffffff90816003541633036116ec57803b156116ba57610ae390612421565b602491604051917fc2f31e5e000000000000000000000000000000000000000000000000000000008352166004820152fd5b60246040517f068ca9d8000000000000000000000000000000000000000000000000000000008152336004820152fd5b9181601f840112156102c95782359167ffffffffffffffff83116102c9576020808501948460051b0101116102c957565b60208082019080835283518092528060408094019401926000905b83821061177757505050505090565b90919293948382826117ac6001948a516020809173ffffffffffffffffffffffffffffffffffffffff81511684520151910152565b0196019493920190611768565b346102c95760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95767ffffffffffffffff6004358181116102c95761180990369060040161171c565b916024359081116102c95761182290369060040161171c565b9060443591611830836102ce565b73ffffffffffffffffffffffffffffffffffffffff8316156105aa578085036118db57611873611861368787610d8c565b61186c368486610d8c565b9033613cc1565b61187c85613c44565b9460005b8181106118955760405180610575898261174d565b806118bb866118a86118d694868b613cb1565b356118b484888a613cb1565b3590613cf7565b6118c5828a612585565b526118d08189612585565b50612524565b611880565b6040517ffa5dbe08000000000000000000000000000000000000000000000000000000008152600481018690526024810191909152604490fd5b346102c95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c9576119e26119707f0000000000000000000000000000000000000000000000000000000000000000612666565b61057561199c7f00000000000000000000000000000000000000000000000000000000000000006127a0565b6119f06119a761248e565b916040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e0870190610602565b908582036040870152610602565b90466060850152306080850152600060a085015283820360c0850152610f5c565b346102c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95761057560406000818051611a5381610890565b828152826020820152015260043560005260046020528060002090805191611a7a83610890565b80548352600273ffffffffffffffffffffffffffffffffffffffff9182600182015416602086015201541681830152519182918291909160406060820193805183528173ffffffffffffffffffffffffffffffffffffffff91826020820151166020860152015116910152565b346102c95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95760035460009060a01c60ff1615611b76575060207f8fb36037000000000000000000000000000000000000000000000000000000005b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b602090611b4c565b346102c957611b8c36610baa565b60a083929301354211610d3f57610ae392611bd191611bb8611bad85614000565b60c086013590614782565b611bc1846140af565b91611bcb85614000565b9261470e565b611bda81614000565b6020820191611be883614000565b90611c30611489604083013593611c1860608501359687876080880194611c12611489878b61405e565b936146cb565b611c2a611c2485614000565b97614000565b9361405e565b93613fa4565b346102c95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c957610575604051611c74816108e1565b600581527f535041524b0000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610602565b801515036102c957565b346102c95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c957600435611cf7816102ce565b602435611d0381611cb2565b73ffffffffffffffffffffffffffffffffffffffff8216918215611db557611d589033600052600160205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b901515907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60246040517fced3e10000000000000000000000000000000000000000000000000000000000815260006004820152fd5b346102c95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c957610575604051611e24816108e1565b600681527f537061726b7300000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610602565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102c9576004359067ffffffffffffffff82116102c95761065691600401610b6e565b346102c9576020611ec3611ebe36611e62565b61430c565b604051908152f35b346102c95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c957602060405160008152f35b346102c9576020611ec3611f1836611e62565b6140af565b346102c95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c957602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346102c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95773ffffffffffffffffffffffffffffffffffffffff600435611fbf816102ce565b1660005260056020526020604060002054604051908152f35b346102c95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c9576020604051633b9aca008152f35b346102c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95760043560005260046020526020604060002054604051908152f35b346102c95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95760043567ffffffffffffffff81116102c9577f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6120d26120f6923690600401610b7c565b92906120de36336129bd565b6040519182916020835260243595602084019161290f565b0390a2005b346102c95760206102bf61149061211136610baa565b929061147d8361430c565b346102c9576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126121d75760048173ffffffffffffffffffffffffffffffffffffffff60035416604051928380927fe8a3d4850000000000000000000000000000000000000000000000000000000082525afa9081156107b6578261057593926121bc575b5050604051918291602083526020830190610602565b6121d092503d8091833e6107a88183610952565b38806121a6565b80fd5b346102c95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c957602060ff61227060043561221c816102ce565b73ffffffffffffffffffffffffffffffffffffffff6024359161223e836102ce565b166000526001845260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54166040519015158152f35b346102c95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c95760206040516127108152f35b346102c95760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c9576004356122f2816102ce565b6024356122fe816102ce565b60643560443560843567ffffffffffffffff81116102c957612324903690600401610a11565b9261233284848484896146cb565b73ffffffffffffffffffffffffffffffffffffffff8516338114159081612362575b50610ecc57610ae394613fa4565b9050600052600160205260ff61239c3360406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54161538612354565b346102c95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102c9576105756040516123e3816108e1565b600181527f31000000000000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610602565b602073ffffffffffffffffffffffffffffffffffffffff7f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9216807fffffffffffffffffffffffff00000000000000000000000000000000000000006003541617600355604051908152a1565b60405161249a816108c5565b60008152906000368137565b906124b082610d74565b6124bd6040519182610952565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06124eb8294610d74565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125515760010190565b6124f5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156125995760209160051b010190565b612556565b9190918051835180820361262b5750506125b881516124a6565b90600090815b8151811015612623578061260d61261e9260051b85602080808489010151938c010151825252604086209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b546126188287612585565b52612524565b6125be565b509193505050565b6040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152604490fd5b60ff8114612677576106569061286e565b50604051600060065490600182811c92818116918215612796575b60209182861084146127695785875286949360208601939291811561272b57506001146126c9575b50505061065692500382610952565b9250936126f860066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90565b946000935b828510612715575050506106569350013880806126ba565b86548585015295860195879550938101936126fd565b915050610656959293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168252151560051b013880806126ba565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693612692565b60ff81146127b1576106569061286e565b50604051600060075490600182811c92818116918215612864575b60209182861084146127695785875286949360208601939291811561272b57506001146128025750505061065692500382610952565b92509361283160076000527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890565b946000935b82851061284e575050506106569350013880806126ba565b8654858501529586019587955093810193612836565b93607f16936127cc565b60ff811690601f82116128925760405191612888836108e1565b8252602082015290565b60046040517fb3512b0c000000000000000000000000000000000000000000000000000000008152fd5b6004116102c957600090600490565b7fffffffff00000000000000000000000000000000000000000000000000000000903581811693926004811061290057505050565b60040360031b82901b16169150565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b90601f60609373ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093168452604060208501528060408501528060008686013760008582860101520116010190565b6040513d6000823e3d90fd5b6129fa6129df60035473ffffffffffffffffffffffffffffffffffffffff1690565b6129f16129eb856128bc565b906128cb565b90833091612be7565b9015612a0557505050565b63ffffffff1615612b2d57612a54740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff6003541617600355565b612a92612a79612a7960035473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b91823b156102c957612ad792600092836040518096819582947f94c7d7ee0000000000000000000000000000000000000000000000000000000084526004840161294e565b03925af180156107b657612b14575b506104837fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff60035416600355565b80612b21612b27926108b1565b806105d4565b38612ae6565b6040517f068ca9d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602490fd5b3d15612ba1573d90612b87826109a0565b91612b956040519384610952565b82523d6000602084013e565b606090565b908160209103126102c9575161065681611cb2565b91908260409103126102c95760208251612bd481611cb2565b92015163ffffffff811681036102c95790565b60008091959495819482977fffffffff0000000000000000000000000000000000000000000000000000000060405191602097888401947fb700961300000000000000000000000000000000000000000000000000000000865273ffffffffffffffffffffffffffffffffffffffff809216602486015216604484015216606482015260648152612c77816108fd565b51915afa90612c84612b76565b91612c90575b50509190565b815194919290919060408610612cbc57505080612cb293948301019101612bbb565b91905b3880612c8a565b9291909481811015612cd1575b505050612cb5565b612ce19350820181019101612ba6565b388080612cc9565b60026104839280518355604073ffffffffffffffffffffffffffffffffffffffff91612d5983602083015116600187019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b01511691019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b8181029291811591840414171561255157565b9092919273ffffffffffffffffffffffffffffffffffffffff8216938415612f8c57612dfa60405192600184526020840152604083019160018352606084015260808301604052565b92815184519081810361262b57505060005b8251811015612e7e5780612e799160051b612e72612e6a87612e45602080868b010151958c010151946000526000602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254613956565b9055612524565b612e0c565b5092919360019081835114600014612f505760208381015185820151604080519283529282015260009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629190a45b806000815b612f01575b5050815103612ef757906020806104839593015191015191336135b5565b61048393336138a9565b8351811015612f4b57806020612f459260051b87010151612e72612e6a8a73ffffffffffffffffffffffffffffffffffffffff166000526005602052604060002090565b81612ed4565b612ed9565b60006040517f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb339180612f8489898361475d565b0390a4612ecf565b60246040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152fd5b929190805182519081810361262b57505060005b81518110156130bc578060051b6020808285010151918501015173ffffffffffffffffffffffffffffffffffffffff8716613017575b505061301290612524565b612fd1565b61302f87612e45846000526000602052604060002090565b5481811061305f5787612e456130129594936130579303936000526000602052604060002090565b559038613007565b6040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8916600482015260248101919091526044810182905260648101839052608490fd5b50909192600191828151146000146131b45760208181015185820151604080519283529282015260009173ffffffffffffffffffffffffffffffffffffffff85169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291a45b6000835b613134575b5050505050565b81518110156131af5780602061316c9260051b8701015173ffffffffffffffffffffffffffffffffffffffff85166131725750612524565b83613128565b6131a761319f8673ffffffffffffffffffffffffffffffffffffffff166000526005602052604060002090565b918254614750565b9055386118d0565b61312d565b600060405173ffffffffffffffffffffffffffffffffffffffff8416907f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb3391806132008a888361475d565b0390a4613124565b94919091815184519081810361262b57505060005b8251811015613341578060051b90602080838601015192870101518573ffffffffffffffffffffffffffffffffffffffff93848b16613294575b61326a94821661326f575b505050612524565b61321d565b61328a91612e45612e6a926000526000602052604060002090565b9055388581613262565b91929390506132b18a612e45846000526000602052604060002090565b548381106132e4579187918461326a969594036132dc8d612e45856000526000602052604060002090565b559450613257565b6040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c16600482015260248101919091526044810184905260648101839052608490fd5b509491939290936001808651146000146134c75760208681015184820151604080519283529282015273ffffffffffffffffffffffffffffffffffffffff848116929087169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291a45b806000815b613413575b505073ffffffffffffffffffffffffffffffffffffffff82166133dd575b505050505050565b855103613402576020806133f79601519201519233613739565b3880808080806133d5565b61340e949192336138f7565b6133f7565b87518110156134c2578060206134539260051b8701015173ffffffffffffffffffffffffffffffffffffffff808916613486575b86166134595750612524565b816133b2565b6131a7612e6a8773ffffffffffffffffffffffffffffffffffffffff166000526005602052604060002090565b6134b08973ffffffffffffffffffffffffffffffffffffffff166000526005602052604060002090565b6134bb838254614750565b9055613447565b6133b7565b60405173ffffffffffffffffffffffffffffffffffffffff90818416918616907f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb339180613516898d8361475d565b0390a46133ad565b908160209103126102c9575161065681610369565b909260a09273ffffffffffffffffffffffffffffffffffffffff610656969516835260006020840152604083015260608201528160808201520190610602565b919261065695949160a09473ffffffffffffffffffffffffffffffffffffffff8092168552166020840152604083015260608201528160808201520190610602565b9293919093843b6135c7575050505050565b60209161360360405194859384937ff23a6e61000000000000000000000000000000000000000000000000000000009889865260048601613533565b0381600073ffffffffffffffffffffffffffffffffffffffff88165af160009181613709575b5061368e5782613637612b76565b8051919082613687576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602490fd5b9050602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000016036136c05750388080808061312d565b6040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602490fd5b61372b91925060203d8111613732575b6137238183610952565b81019061351e565b9038613629565b503d613719565b939290949194853b61374d57505050505050565b61378960209360405195869485947ff23a6e6100000000000000000000000000000000000000000000000000000000998a875260048701613573565b0381600073ffffffffffffffffffffffffffffffffffffffff88165af1600091816137f0575b506137bd5782613637612b76565b7fffffffff0000000000000000000000000000000000000000000000000000000016036136c057503880808080806133d5565b61380991925060203d8111613732576137238183610952565b90386137af565b9261384d610656959373ffffffffffffffffffffffffffffffffffffffff61385b941686526000602087015260a0604087015260a0860190610f5c565b908482036060860152610f5c565b916080818403910152610602565b9390610656959361384d9161385b9473ffffffffffffffffffffffffffffffffffffffff809216885216602087015260a0604087015260a0860190610f5c565b9293919093843b6138bb575050505050565b60209161360360405194859384937fbc197c81000000000000000000000000000000000000000000000000000000009889865260048601613810565b939290949194853b61390b57505050505050565b61378960209360405195869485947fbc197c8100000000000000000000000000000000000000000000000000000000998a875260048701613869565b908160209103126102c9575190565b9190820180921161255157565b909261048393604051937f23b872dd00000000000000000000000000000000000000000000000000000000602086015273ffffffffffffffffffffffffffffffffffffffff80921660248601521660448401526064830152606482526139c8826108fd565b60008073ffffffffffffffffffffffffffffffffffffffff6139ff93169360208151910182865af16139f8612b76565b9083613a61565b8051908115159182613a46575b5050613a155750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b613a599250602080918301019101612ba6565b153880613a0c565b90613aa05750805115613a7657805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b81511580613af8575b613ab1575090565b60249073ffffffffffffffffffffffffffffffffffffffff604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b15613aa9565b6020818303126102c95780519067ffffffffffffffff82116102c9570181601f820112156102c9578051613b34816109a0565b92613b426040519485610952565b818452602082840101116102c95761065691602080850191016105df565b60005260046020526040600020908154918215613bf0576001015473ffffffffffffffffffffffffffffffffffffffff9081169082168103613ba157505090565b6040517ff902523f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291166024820152604490fd5b60046040517fceea21b6000000000000000000000000000000000000000000000000000000008152fd5b604051906040820182811067ffffffffffffffff8211176108ac5760405260006020838281520152565b90613c4e82610d74565b613c5b6040519182610952565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613c898294610d74565b019060005b828110613c9a57505050565b602090613ca5613c1a565b82828501015201613c8e565b91908110156125995760051b0190565b919073ffffffffffffffffffffffffffffffffffffffff83161561057957610483926000604051613cf1816108c5565b52612fbd565b9091613d01613c1a565b5060009082825260046020526040822093613d1d818654612d9e565b93849273ffffffffffffffffffffffffffffffffffffffff948560028160018b01541699015416908815600014613d885750613d599550613e37565b613d80613d64610993565b73ffffffffffffffffffffffffffffffffffffffff9093168352565b602082015290565b939291958115600014613da9575050505050613da49184613f11565b613d59565b9091929394613db990838a613f11565b813b15613e335760a49291859160405197889687957f300ffd270000000000000000000000000000000000000000000000000000000087528b6004880152336024880152604487015260648601521660848401525af180156107b657613e20575b50613d59565b80612b21613e2d926108b1565b38613e1a565b8480fd5b92909273ffffffffffffffffffffffffffffffffffffffff809116928315600014613ea657505050506000808093819362198ef8f1613e74612b76565b5015613e7c57565b60046040517fb12d13eb000000000000000000000000000000000000000000000000000000008152fd5b9091929394843b156102c95760009460849360405197889687957fbc627a33000000000000000000000000000000000000000000000000000000008752336004880152602487015260448601521660648401525af180156107b657613f085750565b610483906108b1565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152610483916139c8606483610952565b9392919073ffffffffffffffffffffffffffffffffffffffff80821615612f8c578516156105795761048394613208565b909193929373ffffffffffffffffffffffffffffffffffffffff80841615612f8c578216156105795761048394613ff860405192600184526020840152604083019160018352606084015260808301604052565b929091613208565b35610656816102ce565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102c9570180359067ffffffffffffffff82116102c957602001918160051b360383136102c957565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102c9570180359067ffffffffffffffff82116102c9576020019181360383136102c957565b6106569080356140be816102ce565b6020820135916140cd836102ce565b6140dd611489608083018361405e565b602081519101206040519260208401947f839ee9f83b48871adda9a84171853f0314a12102180b2aade9181ef96c8ee2a6865273ffffffffffffffffffffffffffffffffffffffff809216604086015216606084015260408201356080840152606082013560a084015260c083015260c081013560e083015260a061010091013581830152815261416d81610919565b51902060429061417b6141b1565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806142af575b15614219577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a081526142a981610936565b51902090565b507f000000000000000000000000000000000000000000000000000000000000000046146141f0565b91907f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116102c95760051b809282370190565b6106569061431981614000565b61416d61434e61432b60208501614000565b9361445861433c604083018361400a565b604051946020860192869284916142d8565b03936143807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868101835282610952565b519020916143b76143ab614397606084018461400a565b9290604051928391602083019586916142d8565b03878101835282610952565b519020956143cb611489608084018461405e565b60208151910120604051978895602087019a60c060a0870135960135948c93909260e09592989796936101008601997f6caf7a38d931374f03d7076049a48b16b9a7c467e4d113dd65f456aad84105ac875273ffffffffffffffffffffffffffffffffffffffff80921660208801521660408601526060850152608084015260a083015260c08201520152565b03908101835282610952565b61446e83836145ae565b50600481959295101561457f5715938461455c575b508315614491575b50505090565b600092935090829160405161450f816144e360208201947f1626ba7e00000000000000000000000000000000000000000000000000000000998a87526024840152604060448401526064830190610602565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610952565b51915afa9061451c612b76565b8261454e575b82614532575b505038808061448b565b9091506020818051810103126102c95760200151143880614528565b915060208251101591614522565b73ffffffffffffffffffffffffffffffffffffffff838116911614935038614483565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81519190604183036145df576145d892506020820151906060604084015193015160001a906145ea565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161466f57926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156107b657805173ffffffffffffffffffffffffffffffffffffffff81161561466657918190565b50809160019190565b50505060009160039190565b91909293805161468c575050505050565b7f13bf30b6830bca1c21fdc9367b4324f3b487495838d53960e41c6a0438b04df6946146be9260405195869586613869565b0390a1388080808061312d565b9190929380516146dc575050505050565b7fe89bff6dbb8de3277d772983dc45be4ad20d90baf4a39e3876251c8b0e1ac8dd946146be9260405195869586613573565b906114909061471f949336916109da565b1561472657565b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b9190820391821161255157565b909161477461065693604084526040840190610f5c565b916020818403910152610f5c565b91909173ffffffffffffffffffffffffffffffffffffffff811660009181835260086020526040832085845260205260ff6040842054166147ff57509260409293825260086020528282209082526020522060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b6040517f752d88c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260248101859052604490fdfea26469706673582212206f3a6aaadb16b18edcfe11ef7248b919938f264433ba9c936a686c8c3194b23864736f6c63430008140033