@towns-protocol/generated
Version:
## How to generate contract types
1,516 lines (1,514 loc) • 71.6 kB
text/typescript
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers";
import type { Provider, TransactionRequest } from "@ethersproject/providers";
import type { PromiseOrValue } from "../common";
import type {
MembershipFacet,
MembershipFacetInterface,
} from "../MembershipFacet";
const _abi = [
{
type: "function",
name: "expiresAt",
inputs: [
{
name: "tokenId",
type: "uint256",
internalType: "uint256",
},
],
outputs: [
{
name: "",
type: "uint256",
internalType: "uint256",
},
],
stateMutability: "view",
},
{
type: "function",
name: "getMembershipCurrency",
inputs: [],
outputs: [
{
name: "",
type: "address",
internalType: "address",
},
],
stateMutability: "view",
},
{
type: "function",
name: "getMembershipDuration",
inputs: [],
outputs: [
{
name: "",
type: "uint64",
internalType: "uint64",
},
],
stateMutability: "view",
},
{
type: "function",
name: "getMembershipFreeAllocation",
inputs: [],
outputs: [
{
name: "",
type: "uint256",
internalType: "uint256",
},
],
stateMutability: "view",
},
{
type: "function",
name: "getMembershipImage",
inputs: [],
outputs: [
{
name: "",
type: "string",
internalType: "string",
},
],
stateMutability: "view",
},
{
type: "function",
name: "getMembershipLimit",
inputs: [],
outputs: [
{
name: "",
type: "uint256",
internalType: "uint256",
},
],
stateMutability: "view",
},
{
type: "function",
name: "getMembershipPrice",
inputs: [],
outputs: [
{
name: "",
type: "uint256",
internalType: "uint256",
},
],
stateMutability: "view",
},
{
type: "function",
name: "getMembershipPricingModule",
inputs: [],
outputs: [
{
name: "",
type: "address",
internalType: "address",
},
],
stateMutability: "view",
},
{
type: "function",
name: "getMembershipRenewalPrice",
inputs: [
{
name: "tokenId",
type: "uint256",
internalType: "uint256",
},
],
outputs: [
{
name: "",
type: "uint256",
internalType: "uint256",
},
],
stateMutability: "view",
},
{
type: "function",
name: "getProtocolFee",
inputs: [],
outputs: [
{
name: "",
type: "uint256",
internalType: "uint256",
},
],
stateMutability: "view",
},
{
type: "function",
name: "getSpaceFactory",
inputs: [],
outputs: [
{
name: "",
type: "address",
internalType: "address",
},
],
stateMutability: "view",
},
{
type: "function",
name: "joinSpace",
inputs: [
{
name: "receiver",
type: "address",
internalType: "address",
},
],
outputs: [],
stateMutability: "payable",
},
{
type: "function",
name: "joinSpaceWithReferral",
inputs: [
{
name: "receiver",
type: "address",
internalType: "address",
},
{
name: "referral",
type: "tuple",
internalType: "struct IMembershipBase.ReferralTypes",
components: [
{
name: "partner",
type: "address",
internalType: "address",
},
{
name: "userReferral",
type: "address",
internalType: "address",
},
{
name: "referralCode",
type: "string",
internalType: "string",
},
],
},
],
outputs: [],
stateMutability: "payable",
},
{
type: "function",
name: "renewMembership",
inputs: [
{
name: "tokenId",
type: "uint256",
internalType: "uint256",
},
],
outputs: [],
stateMutability: "payable",
},
{
type: "function",
name: "revenue",
inputs: [],
outputs: [
{
name: "",
type: "uint256",
internalType: "uint256",
},
],
stateMutability: "view",
},
{
type: "function",
name: "setMembershipDuration",
inputs: [
{
name: "duration",
type: "uint64",
internalType: "uint64",
},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "setMembershipFreeAllocation",
inputs: [
{
name: "newAllocation",
type: "uint256",
internalType: "uint256",
},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "setMembershipImage",
inputs: [
{
name: "newImage",
type: "string",
internalType: "string",
},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "setMembershipLimit",
inputs: [
{
name: "newLimit",
type: "uint256",
internalType: "uint256",
},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "setMembershipPrice",
inputs: [
{
name: "newPrice",
type: "uint256",
internalType: "uint256",
},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "setMembershipPricingModule",
inputs: [
{
name: "pricingModule",
type: "address",
internalType: "address",
},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "event",
name: "Approval",
inputs: [
{
name: "owner",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "approved",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "tokenId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "ApprovalForAll",
inputs: [
{
name: "owner",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "operator",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "approved",
type: "bool",
indexed: false,
internalType: "bool",
},
],
anonymous: false,
},
{
type: "event",
name: "Banned",
inputs: [
{
name: "moderator",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "tokenId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "ConsecutiveTransfer",
inputs: [
{
name: "fromTokenId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
{
name: "toTokenId",
type: "uint256",
indexed: false,
internalType: "uint256",
},
{
name: "from",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "to",
type: "address",
indexed: true,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "DefaultBpsFeeUpdated",
inputs: [
{
name: "defaultBpsFee",
type: "uint256",
indexed: false,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "EntitlementCheckResultPosted",
inputs: [
{
name: "transactionId",
type: "bytes32",
indexed: true,
internalType: "bytes32",
},
{
name: "result",
type: "uint8",
indexed: false,
internalType: "enum IEntitlementGatedBase.NodeVoteStatus",
},
],
anonymous: false,
},
{
type: "event",
name: "Initialized",
inputs: [
{
name: "version",
type: "uint32",
indexed: false,
internalType: "uint32",
},
],
anonymous: false,
},
{
type: "event",
name: "InterfaceAdded",
inputs: [
{
name: "interfaceId",
type: "bytes4",
indexed: true,
internalType: "bytes4",
},
],
anonymous: false,
},
{
type: "event",
name: "InterfaceRemoved",
inputs: [
{
name: "interfaceId",
type: "bytes4",
indexed: true,
internalType: "bytes4",
},
],
anonymous: false,
},
{
type: "event",
name: "MaxBpsFeeUpdated",
inputs: [
{
name: "maxBpsFee",
type: "uint256",
indexed: false,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "MaxPartnerFeeSet",
inputs: [
{
name: "fee",
type: "uint256",
indexed: false,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "MembershipCurrencyUpdated",
inputs: [
{
name: "currency",
type: "address",
indexed: true,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "MembershipFeeRecipientUpdated",
inputs: [
{
name: "recipient",
type: "address",
indexed: true,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "MembershipFreeAllocationUpdated",
inputs: [
{
name: "allocation",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "MembershipLimitUpdated",
inputs: [
{
name: "limit",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "MembershipPriceUpdated",
inputs: [
{
name: "price",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "MembershipTokenIssued",
inputs: [
{
name: "recipient",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "tokenId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "MembershipTokenRejected",
inputs: [
{
name: "recipient",
type: "address",
indexed: true,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "MembershipWithdrawal",
inputs: [
{
name: "recipient",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "amount",
type: "uint256",
indexed: false,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "OwnershipTransferred",
inputs: [
{
name: "previousOwner",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "newOwner",
type: "address",
indexed: true,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "PartnerRegistered",
inputs: [
{
name: "account",
type: "address",
indexed: true,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "PartnerRemoved",
inputs: [
{
name: "account",
type: "address",
indexed: true,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "PartnerUpdated",
inputs: [
{
name: "account",
type: "address",
indexed: true,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "Paused",
inputs: [
{
name: "account",
type: "address",
indexed: false,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "PermissionsAddedToChannelRole",
inputs: [
{
name: "updater",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "roleId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
{
name: "channelId",
type: "bytes32",
indexed: true,
internalType: "bytes32",
},
],
anonymous: false,
},
{
type: "event",
name: "PermissionsRemovedFromChannelRole",
inputs: [
{
name: "updater",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "roleId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
{
name: "channelId",
type: "bytes32",
indexed: true,
internalType: "bytes32",
},
],
anonymous: false,
},
{
type: "event",
name: "PermissionsUpdatedForChannelRole",
inputs: [
{
name: "updater",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "roleId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
{
name: "channelId",
type: "bytes32",
indexed: true,
internalType: "bytes32",
},
],
anonymous: false,
},
{
type: "event",
name: "Prepay__Prepaid",
inputs: [
{
name: "supply",
type: "uint256",
indexed: false,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "ReferralRegistered",
inputs: [
{
name: "referralCode",
type: "bytes32",
indexed: false,
internalType: "bytes32",
},
{
name: "basisPoints",
type: "uint256",
indexed: false,
internalType: "uint256",
},
{
name: "recipient",
type: "address",
indexed: false,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "ReferralRemoved",
inputs: [
{
name: "referralCode",
type: "bytes32",
indexed: false,
internalType: "bytes32",
},
],
anonymous: false,
},
{
type: "event",
name: "ReferralUpdated",
inputs: [
{
name: "referralCode",
type: "bytes32",
indexed: false,
internalType: "bytes32",
},
{
name: "basisPoints",
type: "uint256",
indexed: false,
internalType: "uint256",
},
{
name: "recipient",
type: "address",
indexed: false,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "RegistryFeeSet",
inputs: [
{
name: "fee",
type: "uint256",
indexed: false,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "RoleCreated",
inputs: [
{
name: "creator",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "roleId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "RoleRemoved",
inputs: [
{
name: "remover",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "roleId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "RoleUpdated",
inputs: [
{
name: "updater",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "roleId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "SubscriptionUpdate",
inputs: [
{
name: "tokenId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
{
name: "expiration",
type: "uint64",
indexed: false,
internalType: "uint64",
},
],
anonymous: false,
},
{
type: "event",
name: "Transfer",
inputs: [
{
name: "from",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "to",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "tokenId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "Unbanned",
inputs: [
{
name: "moderator",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "tokenId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "Unpaused",
inputs: [
{
name: "account",
type: "address",
indexed: false,
internalType: "address",
},
],
anonymous: false,
},
{
type: "error",
name: "ApprovalCallerNotOwnerNorApproved",
inputs: [],
},
{
type: "error",
name: "ApprovalQueryForNonexistentToken",
inputs: [],
},
{
type: "error",
name: "BalanceQueryForZeroAddress",
inputs: [],
},
{
type: "error",
name: "Banning__AlreadyBanned",
inputs: [
{
name: "tokenId",
type: "uint256",
internalType: "uint256",
},
],
},
{
type: "error",
name: "Banning__CannotBanOwner",
inputs: [],
},
{
type: "error",
name: "Banning__CannotBanSelf",
inputs: [],
},
{
type: "error",
name: "Banning__InvalidTokenId",
inputs: [
{
name: "tokenId",
type: "uint256",
internalType: "uint256",
},
],
},
{
type: "error",
name: "Banning__NotBanned",
inputs: [
{
name: "tokenId",
type: "uint256",
internalType: "uint256",
},
],
},
{
type: "error",
name: "Dispatcher__TransactionAlreadyExists",
inputs: [],
},
{
type: "error",
name: "ERC5643__DurationZero",
inputs: [],
},
{
type: "error",
name: "ERC5643__InvalidTokenId",
inputs: [
{
name: "tokenId",
type: "uint256",
internalType: "uint256",
},
],
},
{
type: "error",
name: "ERC5643__NotApprovedOrOwner",
inputs: [],
},
{
type: "error",
name: "ERC5643__SubscriptionNotRenewable",
inputs: [
{
name: "tokenId",
type: "uint256",
internalType: "uint256",
},
],
},
{
type: "error",
name: "EntitlementGated_InvalidAddress",
inputs: [],
},
{
type: "error",
name: "EntitlementGated_InvalidEntitlement",
inputs: [],
},
{
type: "error",
name: "EntitlementGated_InvalidValue",
inputs: [],
},
{
type: "error",
name: "EntitlementGated_NodeAlreadyVoted",
inputs: [],
},
{
type: "error",
name: "EntitlementGated_NodeNotFound",
inputs: [],
},
{
type: "error",
name: "EntitlementGated_OnlyEntitlementChecker",
inputs: [],
},
{
type: "error",
name: "EntitlementGated_RequestIdNotFound",
inputs: [],
},
{
type: "error",
name: "EntitlementGated_TransactionCheckAlreadyCompleted",
inputs: [],
},
{
type: "error",
name: "EntitlementGated_TransactionCheckAlreadyRegistered",
inputs: [],
},
{
type: "error",
name: "EntitlementGated_TransactionNotRegistered",
inputs: [],
},
{
type: "error",
name: "Entitlement__InvalidValue",
inputs: [],
},
{
type: "error",
name: "Entitlement__NotAllowed",
inputs: [],
},
{
type: "error",
name: "Entitlement__NotMember",
inputs: [],
},
{
type: "error",
name: "Entitlement__ValueAlreadyExists",
inputs: [],
},
{
type: "error",
name: "Initializable_InInitializingState",
inputs: [],
},
{
type: "error",
name: "Introspection_AlreadySupported",
inputs: [],
},
{
type: "error",
name: "Introspection_NotSupported",
inputs: [],
},
{
type: "error",
name: "Membership__AlreadyMember",
inputs: [],
},
{
type: "error",
name: "Membership__Banned",
inputs: [],
},
{
type: "error",
name: "Membership__InsufficientAllowance",
inputs: [],
},
{
type: "error",
name: "Membership__InsufficientPayment",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidAddress",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidCurrency",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidDuration",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidFeeRecipient",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidFreeAllocation",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidLimit",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidMaxSupply",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidPayment",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidPrice",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidPricingModule",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidTokenId",
inputs: [],
},
{
type: "error",
name: "Membership__InvalidTransactionType",
inputs: [],
},
{
type: "error",
name: "Membership__MaxSupplyReached",
inputs: [],
},
{
type: "error",
name: "Membership__NotExpired",
inputs: [],
},
{
type: "error",
name: "Membership__PriceTooLow",
inputs: [],
},
{
type: "error",
name: "MintERC2309QuantityExceedsLimit",
inputs: [],
},
{
type: "error",
name: "MintToZeroAddress",
inputs: [],
},
{
type: "error",
name: "MintZeroQuantity",
inputs: [],
},
{
type: "error",
name: "Ownable__NotOwner",
inputs: [
{
name: "account",
type: "address",
internalType: "address",
},
],
},
{
type: "error",
name: "Ownable__ZeroAddress",
inputs: [],
},
{
type: "error",
name: "OwnerQueryForNonexistentToken",
inputs: [],
},
{
type: "error",
name: "OwnershipNotInitializedForExtraData",
inputs: [],
},
{
type: "error",
name: "PartnerRegistry__InvalidPartnerFee",
inputs: [
{
name: "fee",
type: "uint256",
internalType: "uint256",
},
],
},
{
type: "error",
name: "PartnerRegistry__InvalidRecipient",
inputs: [],
},
{
type: "error",
name: "PartnerRegistry__NotPartnerAccount",
inputs: [
{
name: "account",
type: "address",
internalType: "address",
},
],
},
{
type: "error",
name: "PartnerRegistry__PartnerAlreadyRegistered",
inputs: [
{
name: "account",
type: "address",
internalType: "address",
},
],
},
{
type: "error",
name: "PartnerRegistry__PartnerNotActive",
inputs: [
{
name: "account",
type: "address",
internalType: "address",
},
],
},
{
type: "error",
name: "PartnerRegistry__PartnerNotRegistered",
inputs: [
{
name: "account",
type: "address",
internalType: "address",
},
],
},
{
type: "error",
name: "PartnerRegistry__RegistryFeeNotPaid",
inputs: [
{
name: "fee",
type: "uint256",
internalType: "uint256",
},
],
},
{
type: "error",
name: "Pausable__NotPaused",
inputs: [],
},
{
type: "error",
name: "Pausable__Paused",
inputs: [],
},
{
type: "error",
name: "Prepay__InvalidAddress",
inputs: [],
},
{
type: "error",
name: "Prepay__InvalidAmount",
inputs: [],
},
{
type: "error",
name: "Prepay__InvalidMembership",
inputs: [],
},
{
type: "error",
name: "Prepay__InvalidSupplyAmount",
inputs: [],
},
{
type: "error",
name: "Reentrancy",
inputs: [],
},
{
type: "error",
name: "Referrals__InvalidBasisPoints",
inputs: [],
},
{
type: "error",
name: "Referrals__InvalidBpsFee",
inputs: [],
},
{
type: "error",
name: "Referrals__InvalidRecipient",
inputs: [],
},
{
type: "error",
name: "Referrals__InvalidReferralCode",
inputs: [],
},
{
type: "error",
name: "Referrals__ReferralAlreadyExists",
inputs: [],
},
{
type: "error",
name: "Roles__EntitlementAlreadyExists",
inputs: [],
},
{
type: "error",
name: "Roles__EntitlementDoesNotExist",
inputs: [],
},
{
type: "error",
name: "Roles__InvalidEntitlementAddress",
inputs: [],
},
{
type: "error",
name: "Roles__InvalidPermission",
inputs: [],
},
{
type: "error",
name: "Roles__PermissionAlreadyExists",
inputs: [],
},
{
type: "error",
name: "Roles__PermissionDoesNotExist",
inputs: [],
},
{
type: "error",
name: "Roles__RoleDoesNotExist",
inputs: [],
},
{
type: "error",
name: "Roles__RoleIsImmutable",
inputs: [],
},
{
type: "error",
name: "TransferCallerNotOwnerNorApproved",
inputs: [],
},
{
type: "error",
name: "TransferFromIncorrectOwner",
inputs: [],
},
{
type: "error",
name: "TransferToNonERC721ReceiverImplementer",
inputs: [],
},
{
type: "error",
name: "TransferToZeroAddress",
inputs: [],
},
{
type: "error",
name: "URIQueryForNonexistentToken",
inputs: [],
},
] as const;
const _bytecode =
"0x6080604052348015600e575f5ffd5b5060156019565b60bd565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef520008054640100000000900460ff16156064576040516366008a2d60e01b815260040160405180910390fd5b805463ffffffff908116101560ba57805463ffffffff191663ffffffff90811782556040519081527fe9c9b456cb2994b80aeef036cf59d26e9617df80f816a6ee5a5b4166e07e2f5c9060200160405180910390a15b50565b6152d5806100ca5f395ff3fe608060405260043610610162575f3560e01c806379dda585116100c657806393b13cb71161007c578063a5a4103111610057578063a5a41031146103ab578063df9a9fe6146103bf578063e847abdd146103de575f5ffd5b806393b13cb71461035757806395d600c81461037857806397fb7c1e1461038c575f5ffd5b80638120f0ba116100ac5780638120f0ba146102f857806383f3f0dc146103255780638c625b0614610344575f5ffd5b806379dda585146102d15780637c9669ac146102e5575f5ffd5b80635becd24a1161011b578063686f768411610101578063686f76841461028b57806369d5f38a1461029e578063706b8e09146102bd575f5ffd5b80635becd24a14610233578063657e45e814610252575f5ffd5b806317c957091161014b57806317c95709146101ae5780633e9491a2146102025780635803909f14610214575f5ffd5b80630ef1be5f146101665780631278076a14610187575b5f5ffd5b348015610171575f5ffd5b5061018561018036600461470d565b6103f2565b005b348015610192575f5ffd5b5061019b6104a7565b6040519081526020015b60405180910390f35b3480156101b9575f5ffd5b5061019b6101c836600461477b565b5f9081527f4775a23600034fdd9f073b224f794d51a58b35ba663a9602623ba7a5c09cce00602052604090205467ffffffffffffffff1690565b34801561020d575f5ffd5b504761019b565b34801561021f575f5ffd5b5061019b61022e36600461477b565b610500565b34801561023e575f5ffd5b5061018561024d36600461477b565b61055b565b34801561025d575f5ffd5b50610266610642565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a5565b61018561029936600461489d565b610681565b3480156102a9575f5ffd5b506101856102b836600461477b565b6106c5565b3480156102c8575f5ffd5b5061019b6107dd565b3480156102dc575f5ffd5b506102666107e6565b6101856102f336600461477b565b610825565b348015610303575f5ffd5b5061030c610868565b60405167ffffffffffffffff90911681526020016101a5565b348015610330575f5ffd5b5061018561033f36600461499c565b610871565b6101856103523660046149b7565b6108eb565b348015610362575f5ffd5b5061036b61091e565b6040516101a59190614a1e565b348015610383575f5ffd5b5061019b610928565b348015610397575f5ffd5b506101856103a636600461477b565b610951565b3480156103b6575f5ffd5b5061019b610a3b565b3480156103ca575f5ffd5b506101856103d93660046149b7565b610a92565b3480156103e9575f5ffd5b50610266610b6b565b6103fa610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610465576040517f65f490650000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6104a382828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c6a92505050565b5050565b5f6104fb6104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b610c95565b905090565b5f610555826105507f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b610f0c565b92915050565b610563610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105c9576040517f65f4906500000000000000000000000000000000000000000000000000000000815233600482015260240161045c565b5f6105f27fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6035490565b9050801580159061060257508082115b15610630576106307fc3983b9100000000000000000000000000000000000000000000000000000000611066565b6106398261106e565b6104a382611112565b5f6104fb7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b3068929eee149b4bd21268540361069f5763ab143c065f526004601cfd5b3068929eee149b4bd21268556106b582826111d0565b3868929eee149b4bd21268555050565b6106cd610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610733576040517f65f4906500000000000000000000000000000000000000000000000000000000815233600482015260240161045c565b61073c816112d4565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb608546040517f91b7f5ed0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff909116906391b7f5ed906024015f604051808303815f87803b1580156107c4575f5ffd5b505af11580156107d6573d5f5f3e3d5ffd5b5050505050565b5f6104fb61137c565b5f6104fb7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6065473ffffffffffffffffffffffffffffffffffffffff1690565b3068929eee149b4bd2126854036108435763ab143c065f526004601cfd5b3068929eee149b4bd21268556108593382611447565b3868929eee149b4bd212685550565b5f6104fb6115cb565b610879610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108df576040517f65f4906500000000000000000000000000000000000000000000000000000000815233600482015260240161045c565b6108e88161168e565b50565b3068929eee149b4bd2126854036109095763ab143c065f526004601cfd5b3068929eee149b4bd212685561085981611709565b60606104fb6117b2565b5f6104fb7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6035490565b610959610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109bf576040517f65f4906500000000000000000000000000000000000000000000000000000000815233600482015260240161045c565b610a1381610a0e7f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b611864565b6108e8817fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60355565b5f6104fb610a8d6104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b611895565b610a9a610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b00576040517f65f4906500000000000000000000000000000000000000000000000000000000815233600482015260240161045c565b610b0981611a08565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905550565b5f6104fb7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6085473ffffffffffffffffffffffffffffffffffffffff1690565b5f807fd2f24d4f172e4e84e48e7c4125b6e904c29e5eba33ad4938fee51dd5dbd4b600805460018201546040517f6352211e000000000000000000000000000000000000000000000000000000008152600481019190915291925073ffffffffffffffffffffffffffffffffffffffff1690636352211e90602401602060405180830381865afa158015610c40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c649190614a30565b91505090565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60c6104a38282614ada565b5f5f610c9f61137c565b90505f610ce07fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6085473ffffffffffffffffffffffffffffffffffffffff1690565b90505f610ceb6107e6565b905073ffffffffffffffffffffffffffffffffffffffff8216610d7e578073ffffffffffffffffffffffffffffffffffffffff16630eac306d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d759190614bf1565b95945050505050565b6040517f5cf4ee91000000000000000000000000000000000000000000000000000000008152600481018490526024810186905273ffffffffffffffffffffffffffffffffffffffff831690635cf4ee9190604401602060405180830381865afa158015610dee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e129190614bf1565b93505f8173ffffffffffffffffffffffffffffffffffffffff16631b159e2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e5e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e829190614bf1565b905080851015610f03578173ffffffffffffffffffffffffffffffffffffffff16630eac306d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef99190614bf1565b9695505050505050565b50505050919050565b5f7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60081610f376107e6565b90505f8173ffffffffffffffffffffffffffffffffffffffff16630eac306d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f83573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa79190614bf1565b5f8781526009850160205260409020549091508015610fd457818110828218028118945050505050610555565b5f8373ffffffffffffffffffffffffffffffffffffffff16631b159e2e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561101e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110429190614bf1565b90505f61104e88610c95565b90508181108282180281189998505050505050505050565b805f5260045ffd5b6110766107e6565b73ffffffffffffffffffffffffffffffffffffffff16632cbb9d136040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e29190614bf1565b8111156108e8576108e87fc3983b9100000000000000000000000000000000000000000000000000000000611066565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6078190557fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6009082907fab14a23e88fb272313490d4f20d63098e64fd38304c0e07a377db98c2b39b92f905f90a25050565b6111d982611b41565b5f6111e2611c37565b90505f81156111f6576111f3611cd0565b90505b6112008484611d62565b5f836040516020016112129190614c08565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290507f686f7684000000000000000000000000000000000000000000000000000000005f6112798761127484338388611e07565b611e39565b90505f5f61128989338589611f74565b91509150806112c95781156112bf5786156112a7576112a783611fef565b6112b1838a612168565b6112ba896121f3565b6112c9565b6112c9838a6122e2565b505050505050505050565b5f6112dd6107e6565b73ffffffffffffffffffffffffffffffffffffffff16630eac306d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611325573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113499190614bf1565b9050808210156104a3576104a37f3447ac8e00000000000000000000000000000000000000000000000000000000611066565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60d545f907fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6009060ff16156113d35760070154919050565b6113db6107e6565b73ffffffffffffffffffffffffffffffffffffffff16632cbb9d136040518163ffffffff1660e01b8152600401602060405180830381865afa158015611423573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c649190614bf1565b5f61145182612348565b905073ffffffffffffffffffffffffffffffffffffffff8116611497576114977f5fbd571700000000000000000000000000000000000000000000000000000000611066565b5f6114a06115cb565b67ffffffffffffffff1690505f6114fc846105507f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b90503481111561152f5761152f7f34a7a93d00000000000000000000000000000000000000000000000000000000611066565b5f61153a8683612352565b90505f6115478284614c8f565b9050801561155b57611559878261241a565b505b5f6115668434614c8f565b905080156115b7576115b76115af7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b308a84612590565b6115c187866125e8565b5050505050505050565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6065474010000000000000000000000000000000000000000900467ffffffffffffffff165f81900361168b5761161f6107e6565b73ffffffffffffffffffffffffffffffffffffffff16638120f0ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611667573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fb9190614ca2565b90565b61169781612716565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb606805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b61171281611b41565b5f61171b611c37565b90505f811561172f5761172c611cd0565b90505b5f638c625b0660e01b90505f6117598561127484338960405180602001604052805f815250611e07565b90505f5f61176987338588611f74565b91509150806117a957811561179f578515611787576117878361280c565b6117918388612168565b61179a876121f3565b6117a9565b6117a983886122e2565b50505050505050565b60607fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb600600c0180546117e390614a4b565b80601f016020809104026020016040519081016040528092919081815260200182805461180f90614a4b565b801561185a5780601f106118315761010080835404028352916020019161185a565b820191905f5260205f20905b81548152906001019060200180831161183d57829003601f168201915b5050505050905090565b808210156104a3576104a37fccc9aa2e00000000000000000000000000000000000000000000000000000000611066565b5f5f61189f6107e6565b90505f8173ffffffffffffffffffffffffffffffffffffffff16631b159e2e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190f9190614bf1565b90508084101561198e578173ffffffffffffffffffffffffffffffffffffffff16630eac306d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611962573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119869190614bf1565b949350505050565b611986848373ffffffffffffffffffffffffffffffffffffffff16639f6542aa6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff9190614cbd565b61ffff1661292a565b73ffffffffffffffffffffffffffffffffffffffff8116611a4c57611a4c7f0e88bf4b00000000000000000000000000000000000000000000000000000000611066565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6065473ffffffffffffffffffffffffffffffffffffffff166040517f8df80bd600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529190911690638df80bd690602401602060405180830381865afa158015611af0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b149190614cf2565b6108e8576108e87f0e88bf4b00000000000000000000000000000000000000000000000000000000611066565b73ffffffffffffffffffffffffffffffffffffffff8116611b8557611b857f5fbd571700000000000000000000000000000000000000000000000000000000611066565b5f611bae7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6035490565b90508015801590611c09575080611c067f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b10155b156104a3576104a37f7efcdb4900000000000000000000000000000000000000000000000000000000611066565b5f5f611c847f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b90505f611c8f61137c565b90505f611c9a61297d565b905082821115611cad575f935050505090565b8015611cc657611cbd60016129a6565b5f935050505090565b6001935050505090565b5f5f611d206104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b9050611d2b816129e3565b915081341015611d5e57611d5e7fb1296a8a00000000000000000000000000000000000000000000000000000000611066565b5090565b602081015173ffffffffffffffffffffffffffffffffffffffff16156104a3578173ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff161480611dd95750602081015173ffffffffffffffffffffffffffffffffffffffff1633145b156104a3576104a37f5fbd571700000000000000000000000000000000000000000000000000000000611066565b606084848484604051602001611e209493929190614d0b565b6040516020818303038152906040529050949350505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b1660208201524360348201525f908190605401604051602081830303815290604052805190602001209050611f1881611eec8387611e9f86612a13565b6040805160208082019590955273ffffffffffffffffffffffffffffffffffffffff9390931683820152606080840192909252805180840390920182526080909201909152805191012090565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b91505f611f2483612a59565b511115611f5457611f547ff82e65c300000000000000000000000000000000000000000000000000000000611066565b611f5e8284612b39565b3415611f6d57611f6d82612b91565b5092915050565b5f5f5f611fb56040518060400160405280600981526020017f4a6f696e53706163650000000000000000000000000000000000000000000000815250612bef565b9050611fc18188612d87565b15611fd35760015f9250925050611fe6565b611fe08188888888612fa2565b92509250505b94509492505050565b5f61203e6104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b90505f61204a826129e3565b90505f5f5f5f61205987612a59565b80602001905181019061206c9190614de2565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084167f686f768400000000000000000000000000000000000000000000000000000000146120e8576120e87fda6153bd00000000000000000000000000000000000000000000000000000000611066565b5f818060200190518101906120fd9190614e66565b90505f5f61210b868a612352565b90505f61211c87855f01518c61312f565b90505f61213388866020015187604001518e61329c565b90508082612141858d614c8f565b61214b9190614c8f565b6121559190614c8f565b93505050506112c98986868a858d61341e565b5f8281527f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e01602052604090205480156121ee576121a583826134a9565b6121ee6121e67fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b308484612590565b505050565b5f6121fc613511565b9050612280816122506104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b5f9182527fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb609602052604090912055565b61228b826001613538565b61229c816122976115cb565b6125e8565b604051819073ffffffffffffffffffffffffffffffffffffffff8416907f2f40b0474996b72a4251e00fb9170cdd960deea1dc749772cbbab61395b9b576905f90a35050565b6122fa8260405180602001604052805f815250612b39565b6123048282612168565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f86fd446d5c04e892d58b448a924dcd9c3ece3a5e0d2960b8c35cd475a5595a1f905f90a25050565b5f61055582613551565b5f61235c82611895565b905061055561239f7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b846123a86107e6565b73ffffffffffffffffffffffffffffffffffffffff16634ccb20c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124149190614a30565b84612590565b5f7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6008161247b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b90507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016124dd578382600a015f8282546124cd9190614f0e565b9091555084935061055592505050565b5f6124fe73ffffffffffffffffffffffffffffffffffffffff831630613682565b905061250c82873088612590565b5f61252d73ffffffffffffffffffffffffffffffffffffffff841630613682565b90505f61253a8383614c8f565b905086811461256c5761256c7fb1296a8a00000000000000000000000000000000000000000000000000000000611066565b8085600a015f82825461257f9190614f0e565b909155509098975050505050505050565b80156125e25773ffffffffffffffffffffffffffffffffffffffff841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146125d8576125d3848484846136b5565b6125e2565b6125e28282613749565b50505050565b5f8281527f4775a23600034fdd9f073b224f794d51a58b35ba663a9602623ba7a5c09cce00602081905260409091205467ffffffffffffffff16801580159061262e57505f5b15612668576040517ff7d2131a0000000000000000000000000000000000000000000000000000000081526004810185905260240161045c565b5f428267ffffffffffffffff16111561268c576126858483614f21565b9050612699565b6126968442614f21565b90505b5f858152602084815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516908117909155915191825286917f2ec2be2c4b90c2cf13ecb6751a24daed6bb741ae5ed3f7371aabf9402f6d62e8910160405180910390a25050505050565b5f61271f6107e6565b73ffffffffffffffffffffffffffffffffffffffff16638120f0ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612767573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278b9190614ca2565b67ffffffffffffffff1690508167ffffffffffffffff165f036127d1576127d17f82323d2e00000000000000000000000000000000000000000000000000000000611066565b808267ffffffffffffffff1611156104a3576104a37f82323d2e00000000000000000000000000000000000000000000000000000000611066565b5f61285b6104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b90505f612867826129e3565b90505f5f5f61287586612a59565b8060200190518101906128889190614de2565b50919450925090507fffffffff0000000000000000000000000000000000000000000000000000000083167f8c625b060000000000000000000000000000000000000000000000000000000014612902576129027fda6153bd00000000000000000000000000000000000000000000000000000000611066565b5f61290d8387612352565b90505f61291a8287614c8f565b90506115c188858589858c61341e565b5f61271082111561295f5761295f7f197f19620000000000000000000000000000000000000000000000000000000083613769565b61271061296c8385614f41565b6129769190614f58565b9392505050565b5f7f097b4f25b64e012d0cf55f67e9b34fe5d57f15b11b95baa4ddd136b424967c005b54919050565b7f097b4f25b64e012d0cf55f67e9b34fe5d57f15b11b95baa4ddd136b424967c008054829082905f906129da908490614c8f565b90915550505050565b5f5f6129ed61297d565b905080156129fd57505f92915050565b825f03612a0c57505f92915050565b5090919050565b5f8181527f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e0060208190526040822080549083612a4e83614f90565b909155509392505050565b5f8181527f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e026020526040902080546060917f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e0091612ab590614a4b565b80601f0160208091040260200160405190810160405280929190818152602001828054612ae190614a4b565b8015612b2c5780601f10612b0357610100808354040283529160200191612b2c565b820191905f5260205f20905b815481529060010190602001808311612b0f57829003601f168201915b5050505050915050919050565b5f8281527f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e02602052604090207f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e00906125e28382614ada565b5f8181527f34516f6fe0