0 txs
109 calls
constructor
constructor(bool disable)
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
APPROVED_MINT_CONTRACT
viewfunction APPROVED_MINT_CONTRACT() view returns (bytes32)
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])
BASIS
viewfunction BASIS() view returns (uint256)
blocklistRegistry
viewfunction blocklistRegistry() view returns (address)
getDefaultRoyaltyRecipientAndPercentage
viewfunction getDefaultRoyaltyRecipientAndPercentage() view returns (address, uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
getTokenDetails
viewfunction getTokenDetails(uint256 tokenId) view returns (tuple)
hasRole
viewfunction hasRole(bytes32 role, address potentialRoleMember) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
royaltyInfo
viewfunction royaltyInfo(uint256 tokenId, uint256 salePrice) view returns (address receiver, uint256 royaltyAmount)
setNftDelegationRegistry
purefunction setNftDelegationRegistry(address) pure
storyEnabled
viewfunction storyEnabled() view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tlNftDelegationRegistry
purefunction tlNftDelegationRegistry() pure returns (address)
tokenLocked
viewfunction tokenLocked(uint256 tokenId) view returns (bool)
totalSupply
viewfunction totalSupply() view returns (uint256)
uri
viewfunction uri(uint256 tokenId) view returns (string)
VERSION
viewfunction VERSION() view returns (string)
addCollectionStory
nonpayablefunction addCollectionStory(string, string story)
addCreatorStory
nonpayablefunction addCreatorStory(uint256 tokenId, string, string story)
addStory
nonpayablefunction addStory(uint256 tokenId, string, string story)
batchCreateToken
nonpayablefunction batchCreateToken(string[] newUris, address[][] addresses, uint256[][] amounts, address[] royaltyAddresses, uint256[] royaltyPercents)
batchCreateToken
nonpayablefunction batchCreateToken(string[] newUris, address[][] addresses, uint256[][] amounts)
burn
nonpayablefunction burn(address from, uint256[] tokenIds, uint256[] amounts)
createToken
nonpayablefunction createToken(string newUri, address[] addresses, uint256[] amounts, address royaltyAddress, uint256 royaltyPercent)
createToken
nonpayablefunction createToken(string newUri, address[] addresses, uint256[] amounts)
externalMint
nonpayablefunction externalMint(uint256 tokenId, address[] addresses, uint256[] amounts)
initialize
nonpayablefunction initialize(string name_, string symbol_, string personalization, address defaultRoyaltyRecipient, uint256 defaultRoyaltyPercentage, address initOwner, address[] admins, bool enableStory, address initBlockListRegistry)
lockToken
nonpayablefunction lockToken(uint256 tokenId)
mintToken
nonpayablefunction mintToken(uint256 tokenId, address[] addresses, uint256[] amounts)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role)
revokeAllRoles
nonpayablefunction revokeAllRoles()
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] values, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes data)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setApprovedMintContracts
nonpayablefunction setApprovedMintContracts(address[] minters, bool status)
setBlockListRegistry
nonpayablefunction setBlockListRegistry(address newBlockListRegistry)
setDefaultRoyalty
nonpayablefunction setDefaultRoyalty(address newRecipient, uint256 newPercentage)
setRole
nonpayablefunction setRole(bytes32 role, address[] roleMembers, bool status)
setStoryStatus
nonpayablefunction setStoryStatus(bool status)
setTokenRoyalty
nonpayablefunction setTokenRoyalty(uint256 tokenId, address newRecipient, uint256 newPercentage)
setTokenUri
nonpayablefunction setTokenUri(uint256 tokenId, string newUri)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawERC20
nonpayablefunction withdrawERC20(address currency, uint256 amount, address recipient)
withdrawERC721
nonpayablefunction withdrawERC721(address token, uint256 id, address recipient)
events
AllRolesRevoked
event AllRolesRevoked(address indexed from)
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
BlockListRegistryUpdate
event BlockListRegistryUpdate(address indexed sender, address indexed prevBlockListRegistry, address indexed newBlockListRegistry)
CollectionStory
event CollectionStory(address indexed creatorAddress, string creatorName, string story)
CreatorStory
event CreatorStory(uint256 indexed tokenId, address indexed creatorAddress, string creatorName, string story)
DefaultRoyaltyUpdate
event DefaultRoyaltyUpdate(address indexed sender, address newRecipient, uint256 newPercentage)
Initialized
event Initialized(uint64 version)
NftDelegationRegistryUpdate
event NftDelegationRegistryUpdate(address indexed sender, address indexed prevNftDelegationRegistry, address indexed newNftDelegationRegistry)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RoleChange
event RoleChange(address indexed from, address indexed user, bool indexed approved, bytes32 role)
Story
event Story(uint256 indexed tokenId, address indexed collectorAddress, string collectorName, string story)
StoryStatusUpdate
event StoryStatusUpdate(address indexed sender, bool indexed status)
TokenRoyaltyOverride
event TokenRoyaltyOverride(address indexed sender, uint256 indexed tokenId, address newRecipient, uint256 newPercentage)
TransferBatch
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
TransferSingle
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
URI
event URI(string value, uint256 indexed id)
errors
ArrayLengthMismatch
error ArrayLengthMismatch()
BatchSizeTooSmall
error BatchSizeTooSmall()
BurnZeroTokens
error BurnZeroTokens()
CallerNotApprovedOrOwner
error CallerNotApprovedOrOwner()
CallerNotTokenOwner
error CallerNotTokenOwner()
EmptyTokenURI
error EmptyTokenURI()
ERC1155InsufficientBalance
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId)
ERC1155InvalidApprover
error ERC1155InvalidApprover(address approver)
ERC1155InvalidArrayLength
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength)
ERC1155InvalidOperator
error ERC1155InvalidOperator(address operator)
ERC1155InvalidReceiver
error ERC1155InvalidReceiver(address receiver)
ERC1155InvalidSender
error ERC1155InvalidSender(address sender)
ERC1155MissingApprovalForAll
error ERC1155MissingApprovalForAll(address operator, address owner)
InvalidInitialization
error InvalidInitialization()
MaxRoyaltyError
error MaxRoyaltyError()
MintToZeroAddresses
error MintToZeroAddresses()
NotInitializing
error NotInitializing()
NotRoleOrOwner
error NotRoleOrOwner(bytes32 role)
NotSpecifiedRole
error NotSpecifiedRole(bytes32 role)
OperatorBlocked
error OperatorBlocked()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
StoryNotEnabled
error StoryNotEnabled()
StringsInsufficientHexLength
error StringsInsufficientHexLength(uint256 value, uint256 length)
TokenDoesntExist
error TokenDoesntExist()
TokenLocked
error TokenLocked()
ZeroAddressError
error ZeroAddressError()
creation bytecode
0x608060405234801561000f575f5ffd5b5060405161513c38038061513c83398101604081905261002e916100f4565b801561003c5761003c610042565b5061011a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100925760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100f15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610104575f5ffd5b81518015158114610113575f5ffd5b9392505050565b615015806101275f395ff3fe608060405234801561000f575f5ffd5b506004361061032f575f3560e01c80635b23e3ce116101b35780639713c807116100f3578063d4bf502a1161009e578063e985e9c511610079578063e985e9c5146107a4578063f242432a146107fe578063f2fde38b14610811578063ffa1ad7414610824575f5ffd5b8063d4bf502a1461076b578063d8c3a2741461077e578063d8d045b414610791575f5ffd5b8063a3246ad3116100ce578063a3246ad314610725578063bbe4e87b14610745578063c1e037281461074b575f5ffd5b80639713c807146106f15780639c22fcbb14610704578063a22cb46514610712575f5ffd5b80637c5d28bd1161015e5780638bb9c5bf116101395780638bb9c5bf1461065d5780638da5cb5b1461067057806391d148541461068d57806395d89b41146106e9575f5ffd5b80637c5d28bd146105e25780637e6cc542146105f557806380f203631461064a575f5ffd5b8063715018a61161018e578063715018a6146105b357806375b238fc146105bb5780637b9f76b5146105cf575f5ffd5b80635b23e3ce1461057a5780635fc3ea0b1461058d57806366579402146105a0575f5ffd5b80632eb2c2d61161027e578063485d3c071161022957806351dc02f21161020457806351dc02f214610538578063528cfa981461054b57806356000f771461055457806357f7789e14610567575f5ffd5b8063485d3c07146104f85780634a5970651461050b5780634e1273f414610518575f5ffd5b80633db0f8ab116102595780633db0f8ab146104b057806346317db7146104c357806346694b7d146104d6575f5ffd5b80632eb2c2d614610482578063319210231461049557806333aa4fb3146104a8575f5ffd5b80631a006e8a116102de57806329471dc2116102b957806329471dc21461042a5780632a55205a1461043d5780632d28c08b1461046f575f5ffd5b80631a006e8a146103db5780631ff7f0bc146103f0578063249fde3b14610417575f5ffd5b80630e89341c1161030e5780630e89341c146103915780631145a243146103a457806318160ddd146103d4575f5ffd5b8062fdd58e1461033357806301ffc9a71461035957806306fdde031461037c575b5f5ffd5b610346610341366004613e2e565b610860565b6040519081526020015b60405180910390f35b61036c610367366004613e6b565b6108a8565b6040519015158152602001610350565b610384610996565b6040516103509190613eb4565b61038461039f366004613ec6565b610a22565b6003546103bc9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610350565b5f54610346565b6103ee6103e9366004613edd565b610af1565b005b6103467ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af581565b6103ee610425366004613f37565b610c0c565b6103ee610438366004613fee565b610d0c565b61045061044b36600461405a565b610dfa565b604080516001600160a01b039093168352602083019190915201610350565b6103ee61047d36600461407a565b610ed3565b6103ee610490366004614278565b61102e565b6103ee6104a3366004614327565b6110e3565b6103ee611365565b6103ee6104be366004614427565b6113ba565b6103ee6104d136600461445f565b6114f9565b61036c6104e4366004613ec6565b5f9081526005602052604090205460ff1690565b6103ee6105063660046144fe565b6116cd565b60035461036c9060ff1681565b61052b610526366004614597565b61180e565b6040516103509190614636565b6103ee610546366004614660565b6118f2565b61034661271081565b6103ee6105623660046146b3565b6119f9565b6103ee61057536600461471b565b611b17565b6103ee6105883660046146b3565b611c65565b6103ee61059b366004614763565b611d2f565b6103ee6105ae36600461479c565b611e5b565b6103ee61210b565b6103465f516020614fc05f395f51905f5281565b6103ee6105dd366004614763565b61211e565b6103ee6105f036600461489f565b612239565b6104507fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70700547fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70701546001600160a01b0390911691565b6103ee610658366004613ec6565b61231b565b6103ee61066b366004613ec6565b612407565b5f516020614f805f395f51905f52546001600160a01b03166103bc565b61036c61069b3660046148ba565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083209483529381528382206001600160a01b0393909316825291909152205460ff1690565b61038461246a565b6103ee6106ff3660046148e4565b612477565b6103ee61032f366004613edd565b6103ee610720366004614917565b612525565b610738610733366004613ec6565b612575565b604051610350919061494c565b5f6103bc565b61075e610759366004613ec6565b6125d0565b6040516103509190614997565b6103ee6107793660046149bd565b6126a1565b6103ee61078c366004613f37565b6126b9565b6103ee61079f366004613e2e565b612754565b61036c6107b2366004614a09565b6001600160a01b039182165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b6103ee61080c366004614a31565b612801565b6103ee61081f366004613edd565b6128b6565b6103846040518060400160405280600581526020017f332e372e3100000000000000000000000000000000000000000000000000000081525081565b5f8181527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6108b28261290c565b806108c157506108c1826129a6565b806108f557506001600160e01b031982167f38d29ef300000000000000000000000000000000000000000000000000000000145b8061092957506001600160e01b031982167f2464f17b00000000000000000000000000000000000000000000000000000000145b8061095d57507f0d23ecb9000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806108a257506001600160e01b031982167f83b61254000000000000000000000000000000000000000000000000000000001492915050565b600180546109a390614a85565b80601f01602080910402602001604051908101604052809291908181526020018280546109cf90614a85565b8015610a1a5780601f106109f157610100808354040283529160200191610a1a565b820191905f5260205f20905b8154815290600101906020018083116109fd57829003601f168201915b505050505081565b5f8181526004602052604090205460609060ff16610a5357604051631d6fa32560e31b815260040160405180910390fd5b5f8281526004602052604090206001018054610a6e90614a85565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9a90614a85565b8015610ae55780601f10610abc57610100808354040283529160200191610ae5565b820191905f5260205f20905b815481529060010190602001808311610ac857829003601f168201915b50505050509050919050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff16158015610b73575033610b675f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610b99576040516376c1743160e01b8152600481018290526024015b60405180910390fd5b600380546001600160a01b038481166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff851617909455604051939092041691829033907f6d65d584292e445b64ea5cb6c8d589521aa512572ea6b91ea96e93846ae20aa5905f90a4505050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff16158015610c8e575033610c825f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610caf576040516376c1743160e01b815260048101829052602401610b90565b5f8681526005602052604090205460ff1615610cf7576040517f5a8181f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d048686868686612a0d565b505050505050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff16158015610d8e575033610d825f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610daf576040516376c1743160e01b815260048101829052602401610b90565b337f2e88f428bf841b9abdc4c8d098cebae9a254b846c942a7fe0abf4963cf91ed96610dda82612aff565b8585604051610deb93929190614ae6565b60405180910390a25050505050565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee7070080547fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70701545f8581527fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee7070260205260408120549093849390926001600160a01b039182169290911615610eac5750505f858152600282016020526040902080546001909101546001600160a01b03909116905b81612710610eba8389614b29565b610ec49190614b40565b945094505050505b9250929050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff16158015610f55575033610f495f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610f76576040516376c1743160e01b815260048101829052602401610b90565b5f6110158a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284375f9201919091525050604080516020808d0282810182019093528c82529093508c92508b9182918501908490808284375f92019190915250612b1592505050565b9050611022818585612c59565b50505050505050505050565b336001600160a01b038616811480159061108c57506001600160a01b038087165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b156110d6576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015287166024820152604401610b90565b610d048686868686612d7a565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff161580156111655750336111595f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611186576040516376c1743160e01b815260048101829052602401610b90565b5f8a90036111a7576040516317314b6160e01b815260040160405180910390fd5b89881415806111b65750878614155b806111c15750858414155b806111cc5750838214155b156111ea5760405163512509d360e11b815260040160405180910390fd5b5f5b8a811015611357575f6113038d8d8481811061120a5761120a614b5f565b905060200281019061121c9190614b73565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508f92508e915086905081811061126457611264614b5f565b90506020028101906112769190614bb6565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d91508790508181106112bb576112bb614b5f565b90506020028101906112cd9190614bb6565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b1592505050565b905061134e8188888581811061131b5761131b614b5f565b90506020020160208101906113309190613edd565b87878681811061134257611342614b5f565b90506020020135612c59565b506001016111ec565b505050505050505050505050565b61136d612dd8565b5f516020614fa05f395f51905f528054815f61138883614bfc565b909155505060405133907fdf1eaea754aea6dc7d083377ed7366dd7405e3fb0f16ddfb9448770520e44279905f90a250565b5f8390036113f4576040517f3fb001d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b0386161480159061144f57506001600160a01b0385165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832033845290915290205460ff16155b15611486576040517fc9c1cf1b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114f2858585808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284375f92019190915250612e3992505050565b5050505050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff1615801561157b57503361156f5f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b1561159c576040516376c1743160e01b815260048101829052602401610b90565b5f8690036115bd576040516317314b6160e01b815260040160405180910390fd5b85841415806115cc5750838214155b156115ea5760405163512509d360e11b815260040160405180910390fd5b5f5b868110156116c3576116ba88888381811061160957611609614b5f565b905060200281019061161b9190614b73565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a925089915085905081811061166357611663614b5f565b90506020028101906116759190614bb6565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508992508891508690508181106112bb576112bb614b5f565b506001016115ec565b5050505050505050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff1615801561174f5750336117435f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611770576040516376c1743160e01b815260048101829052602401610b90565b6116c387878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020808b0282810182019093528a82529093508a9250899182918501908490808284375f9201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284375f92019190915250612b1592505050565b6060815183511461185857815183516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610b90565b5f835167ffffffffffffffff81111561187357611873614134565b60405190808252806020026020018201604052801561189c578160200160208202803683370190505b5090505f5b84518110156118ea576020808202860101516118c590602080840287010151610860565b8282815181106118d7576118d7614b5f565b60209081029190910101526001016118a1565b509392505050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff161580156119745750336119685f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611995576040516376c1743160e01b815260048101829052602401610b90565b6119f37ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af58585808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250879250612e7c915050565b50505050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff16158015611a7b575033611a6f5f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611a9c576040516376c1743160e01b815260048101829052602401610b90565b5f8681526004602052604090205460ff16611aca57604051631d6fa32560e31b815260040160405180910390fd5b33867f5c0564b4237730adb947143019acb5addfdbf1be3ad1edf72e24a8f9d02fd2c1611af683612aff565b8686604051611b0793929190614ae6565b60405180910390a3505050505050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff16158015611b99575033611b8d5f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611bba576040516376c1743160e01b815260048101829052602401610b90565b5f8481526004602052604090205460ff16611be857604051631d6fa32560e31b815260040160405180910390fd5b5f829003611c09576040516317314b6160e01b815260040160405180910390fd5b5f848152600460205260409020600101611c24838583614c58565b50837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8484604051611c57929190614d12565b60405180910390a250505050565b60035460ff16611ca1576040517fc3d4cd7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cab3386610860565b5f03611ce3576040517fb23b68b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33857f40ebea9c3c7603a5d233a0bec01e483338737b6bed01bed2ac09ccbaa3d4b7ac611d0f83612aff565b8585604051611d2093929190614ae6565b60405180910390a35050505050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff16158015611db1575033611da55f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611dd2576040516376c1743160e01b815260048101829052602401610b90565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820185905285169063a9059cbb906044016020604051808303815f875af1158015611e37573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f29190614d25565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015611ea55750825b90505f8267ffffffffffffffff166001148015611ec15750303b155b905081158015611ecf575080155b15611f06576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315611f5157845468ff00000000000000001916680100000000000000001785555b611f6860405180602001604052805f815250613008565b611f728b8b613019565b611f7b8961302b565b611f945f516020614fc05f395f51905f52896001612e7c565b6001611fa08f82614d40565b506002611fad8e82614d40565b506003805460ff19168815159081179091556040516001600160a01b038b16907f558a671a281f60a95ebbb675ce350bcef6b95e9c06674b651786076773f6ae19905f90a3600380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03898116918202929092179092556040515f918c16907f6d65d584292e445b64ea5cb6c8d589521aa512572ea6b91ea96e93846ae20aa5908390a48b51156120b0576001600160a01b0389167f2e88f428bf841b9abdc4c8d098cebae9a254b846c942a7fe0abf4963cf91ed9661209882612aff565b8e6040516120a7929190614dfb565b60405180910390a25b83156120fb57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b612113612dd8565b61211c5f613044565b565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff161580156121a05750336121945f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156121c1576040516376c1743160e01b815260048101829052602401610b90565b6040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038381166024830152604482018590528516906342842e0e906064015f604051808303815f87803b158015612227575f5ffd5b505af11580156116c3573d5f5f3e3d5ffd5b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff161580156122bb5750336122af5f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156122dc576040516376c1743160e01b815260048101829052602401610b90565b6003805460ff191683151590811790915560405133907f558a671a281f60a95ebbb675ce350bcef6b95e9c06674b651786076773f6ae19905f90a35050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff1615801561239d5750336123915f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156123be576040516376c1743160e01b815260048101829052602401610b90565b5f8281526004602052604090205460ff166123ec57604051631d6fa32560e31b815260040160405180910390fd5b505f908152600560205260409020805460ff19166001179055565b6040805160018082528183019092525f916020808301908036833701905050905033815f8151811061243b5761243b614b5f565b60200260200101906001600160a01b031690816001600160a01b03168152505061246682825f612e7c565b5050565b600280546109a390614a85565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff161580156124f95750336124ed5f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b1561251a576040516376c1743160e01b815260048101829052602401610b90565b6119f3848484612c59565b801561256b57612534826130ae565b1561256b576040517f30aaa1db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612466828261315c565b5f516020614fa05f395f51905f5280545f9081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e302602090815260408083208584529091529020606091906125c990613167565b9392505050565b604080518082019091525f8152606060208201525f828152600460209081526040918290208251808401909352805460ff1615158352600181018054919284019161261a90614a85565b80601f016020809104026020016040519081016040528092919081815260200182805461264690614a85565b80156126915780601f1061266857610100808354040283529160200191612691565b820191905f5260205f20905b81548152906001019060200180831161267457829003601f168201915b5050505050815250509050919050565b6126a9612dd8565b6126b4838383612e7c565b505050565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083207ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af58085529083528184203385529092529091205460ff16610caf576040517fee074e7400000000000000000000000000000000000000000000000000000000815260048101829052602401610b90565b5f516020614fa05f395f51905f52545f9081525f516020614f605f395f51905f52602090815260408083205f516020614fc05f395f51905f528085529083528184203385529092529091205460ff161580156127d65750336127ca5f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156127f7576040516376c1743160e01b815260048101829052602401610b90565b6126b48383613173565b336001600160a01b038616811480159061285f57506001600160a01b038087165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b156128a9576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015287166024820152604401610b90565b610d04868686868661327f565b6128be612dd8565b6001600160a01b038116612900576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610b90565b61290981613044565b50565b5f6001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000148061296e57506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b806108a257507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146108a2565b5f6001600160e01b031982167f2a55205a0000000000000000000000000000000000000000000000000000000014806108a257506001600160e01b031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b5f8581526004602052604090205460ff16612a3b57604051631d6fa32560e31b815260040160405180910390fd5b5f839003612a75576040517fd8b8bfb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828114612a955760405163512509d360e11b815260040160405180910390fd5b5f5b83811015610d0457612af7858583818110612ab457612ab4614b5f565b9050602002016020810190612ac99190613edd565b87858585818110612adc57612adc614b5f565b9050602002013560405180602001604052805f81525061330b565b600101612a97565b60606108a26001600160a01b0383166014613366565b5f83515f03612b37576040516317314b6160e01b815260040160405180910390fd5b82515f03612b71576040517fd8b8bfb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151835114612b935760405163512509d360e11b815260040160405180910390fd5b5f80549080612ba183614bfc565b9091555050604080518082018252600180825260208083018881525f8054815260049092529390208251815460ff1916901515178155925191929190820190612bea9082614d40565b505f9150505b8351811015612c4e57612c46848281518110612c0e57612c0e614b5f565b60200260200101515f54858481518110612c2a57612c2a614b5f565b602002602001015160405180602001604052805f81525061330b565b600101612bf0565b50505f549392505050565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707006001600160a01b038316612cba576040517f3efa09af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710821115612cf6576040517fdc65bdeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848152600282016020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038716908117825560019091018590558251908152908101849052859133917f3001fd4350a0a56b8c380c23b85aebc6fb22b32c98a314ba3aecc0bc23a1cf9091015b60405180910390a350505050565b6001600160a01b038416612da357604051632bfa23e760e11b81525f6004820152602401610b90565b6001600160a01b038516612dcb57604051626a0d4560e21b81525f6004820152602401610b90565b6114f28585858585613586565b33612df75f516020614f805f395f51905f52546001600160a01b031690565b6001600160a01b03161461211c576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610b90565b6001600160a01b038316612e6157604051626a0d4560e21b81525f6004820152602401610b90565b6126b4835f848460405180602001604052805f815250613586565b5f516020614fa05f395f51905f525f5b83518110156114f25781545f908152600183016020908152604080832088845290915281208551859290879085908110612ec857612ec8614b5f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055508215612f5357612f4d848281518110612f2057612f20614b5f565b60209081029190910181015184545f90815260028601835260408082208a835290935291909120906135d9565b50612f97565b612f95848281518110612f6857612f68614b5f565b60209081029190910181015184545f90815260028601835260408082208a835290935291909120906135ed565b505b821515848281518110612fac57612fac614b5f565b60200260200101516001600160a01b0316336001600160a01b03167fc9f6f69b3c19bd2b7eb8273129bbca5e3db0e3be63ca9903e140122a5bbb556e88604051612ff891815260200190565b60405180910390a4600101612e8c565b613010613601565b61290981613668565b613021613601565b6124668282613679565b613033613601565b61303c8161368b565b61290961369c565b5f516020614f805f395f51905f52805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6003545f9061010090046001600160a01b03166130cc57505f919050565b6003546040517f334980a50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526101009092049091169063334980a590602401602060405180830381865afa158015613133573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a29190614d25565b919050565b6124663383836136a4565b60605f6125c98361376d565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707006001600160a01b0383166131d4576040517f3efa09af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710821115613210576040517fdc65bdeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117825560018201839055604080519182526020820184905233917f37dd87932a16caf40cd3c1ba643a0336807c74041d8c93260524aca37878f010910160405180910390a2505050565b6001600160a01b0384166132a857604051632bfa23e760e11b81525f6004820152602401610b90565b6001600160a01b0385166132d057604051626a0d4560e21b81525f6004820152602401610b90565b604080516001808252602082018690528183019081526060820185905260808201909252906133028787848487613586565b50505050505050565b6001600160a01b03841661333457604051632bfa23e760e11b81525f6004820152602401610b90565b60408051600180825260208201869052818301908152606082018590526080820190925290610d045f87848487613586565b6060825f613375846002614b29565b613380906002614e28565b67ffffffffffffffff81111561339857613398614134565b6040519080825280601f01601f1916602001820160405280156133c2576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f815181106133f8576133f8614b5f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061345a5761345a614b5f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f613494856002614b29565b61349f906001614e28565b90505b600181111561353b577f303132333435363738396162636465660000000000000000000000000000000083600f16601081106134e0576134e0614b5f565b1a60f81b8282815181106134f6576134f6614b5f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049290921c9161353481614e3b565b90506134a2565b50811561357e576040517fe22e27eb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610b90565b949350505050565b613592858585856137c5565b6001600160a01b038416156114f257825133906001036135cb57602084810151908401516135c4838989858589613a29565b5050610d04565b610d04818787878787613b7c565b5f6125c9836001600160a01b038416613c95565b5f6125c9836001600160a01b038416613ce1565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661211c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613670613601565b61290981613dc4565b613681613601565b6124668282613173565b613693613601565b61290981613e10565b61211c613601565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b038316613707576040517fced3e1000000000000000000000000000000000000000000000000000000000081525f6004820152602401610b90565b6001600160a01b038481165f818152600184016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101612d6c565b6060815f01805480602002602001604051908101604052809291908181526020018280548015610ae557602002820191905f5260205f20905b8154815260200190600101908083116137a65750505050509050919050565b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500911461382f57825182516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610b90565b335f5b845181101561394a576020818102868101820151908601909101516001600160a01b038916156138fc575f828152602086815260408083206001600160a01b038d168452909152902054818110156138d6576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b166004820152602481018290526044810183905260648101849052608401610b90565b5f838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b03881615613940575f828152602086815260408083206001600160a01b038c1684529091528120805483929061393a908490614e28565b90915550505b5050600101613832565b5083516001036139ca5760208401515f906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516139bb929190918252602082015260400190565b60405180910390a45050610d04565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051613a19929190614e50565b60405180910390a4505050505050565b6001600160a01b0384163b15610d04576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e6190613a869089908990889088908890600401614e74565b6020604051808303815f875af1925050508015613ac0575060408051601f3d908101601f19168201909252613abd91810190614ebb565b60015b613b27573d808015613aed576040519150601f19603f3d011682016040523d82523d5f602084013e613af2565b606091505b5080515f03613b1f57604051632bfa23e760e11b81526001600160a01b0386166004820152602401610b90565b805181602001fd5b6001600160e01b031981167ff23a6e61000000000000000000000000000000000000000000000000000000001461330257604051632bfa23e760e11b81526001600160a01b0386166004820152602401610b90565b6001600160a01b0384163b15610d04576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c8190613bd99089908990889088908890600401614ed6565b6020604051808303815f875af1925050508015613c13575060408051601f3d908101601f19168201909252613c1091810190614ebb565b60015b613c40573d808015613aed576040519150601f19603f3d011682016040523d82523d5f602084013e613af2565b6001600160e01b031981167fbc197c81000000000000000000000000000000000000000000000000000000001461330257604051632bfa23e760e11b81526001600160a01b0386166004820152602401610b90565b5f818152600183016020526040812054613cda57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556108a2565b505f6108a2565b5f8181526001830160205260408120548015613dbb575f613d03600183614f38565b85549091505f90613d1690600190614f38565b9050808214613d75575f865f018281548110613d3457613d34614b5f565b905f5260205f200154905080875f018481548110613d5457613d54614b5f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080613d8657613d86614f4b565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506108a2565b5f9150506108a2565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45007f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45026126b48382614d40565b6128be613601565b80356001600160a01b0381168114613157575f5ffd5b5f5f60408385031215613e3f575f5ffd5b613e4883613e18565b946020939093013593505050565b6001600160e01b031981168114612909575f5ffd5b5f60208284031215613e7b575f5ffd5b81356125c981613e56565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6125c96020830184613e86565b5f60208284031215613ed6575f5ffd5b5035919050565b5f60208284031215613eed575f5ffd5b6125c982613e18565b5f5f83601f840112613f06575f5ffd5b50813567ffffffffffffffff811115613f1d575f5ffd5b6020830191508360208260051b8501011115610ecc575f5ffd5b5f5f5f5f5f60608688031215613f4b575f5ffd5b85359450602086013567ffffffffffffffff811115613f68575f5ffd5b613f7488828901613ef6565b909550935050604086013567ffffffffffffffff811115613f93575f5ffd5b613f9f88828901613ef6565b969995985093965092949392505050565b5f5f83601f840112613fc0575f5ffd5b50813567ffffffffffffffff811115613fd7575f5ffd5b602083019150836020828501011115610ecc575f5ffd5b5f5f5f5f60408587031215614001575f5ffd5b843567ffffffffffffffff811115614017575f5ffd5b61402387828801613fb0565b909550935050602085013567ffffffffffffffff811115614042575f5ffd5b61404e87828801613fb0565b95989497509550505050565b5f5f6040838503121561406b575f5ffd5b50508035926020909101359150565b5f5f5f5f5f5f5f5f60a0898b031215614091575f5ffd5b883567ffffffffffffffff8111156140a7575f5ffd5b6140b38b828c01613fb0565b909950975050602089013567ffffffffffffffff8111156140d2575f5ffd5b6140de8b828c01613ef6565b909750955050604089013567ffffffffffffffff8111156140fd575f5ffd5b6141098b828c01613ef6565b909550935061411c905060608a01613e18565b979a9699509497939692959194509192608001359150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561417157614171614134565b604052919050565b5f67ffffffffffffffff82111561419257614192614134565b5060051b60200190565b5f82601f8301126141ab575f5ffd5b81356141be6141b982614179565b614148565b8082825260208201915060208360051b8601019250858311156141df575f5ffd5b602085015b838110156141fc5780358352602092830192016141e4565b5095945050505050565b5f82601f830112614215575f5ffd5b8135602083015f5f67ffffffffffffffff84111561423557614235614134565b50601f8301601f191660200161424a81614148565b91505082815285838301111561425e575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f5f5f5f60a0868803121561428c575f5ffd5b61429586613e18565b94506142a360208701613e18565b9350604086013567ffffffffffffffff8111156142be575f5ffd5b6142ca8882890161419c565b935050606086013567ffffffffffffffff8111156142e6575f5ffd5b6142f28882890161419c565b925050608086013567ffffffffffffffff81111561430e575f5ffd5b61431a88828901614206565b9150509295509295909350565b5f5f5f5f5f5f5f5f5f5f60a08b8d031215614340575f5ffd5b8a3567ffffffffffffffff811115614356575f5ffd5b6143628d828e01613ef6565b909b5099505060208b013567ffffffffffffffff811115614381575f5ffd5b61438d8d828e01613ef6565b90995097505060408b013567ffffffffffffffff8111156143ac575f5ffd5b6143b88d828e01613ef6565b90975095505060608b013567ffffffffffffffff8111156143d7575f5ffd5b6143e38d828e01613ef6565b90955093505060808b013567ffffffffffffffff811115614402575f5ffd5b61440e8d828e01613ef6565b915080935050809150509295989b9194979a5092959850565b5f5f5f5f5f6060868803121561443b575f5ffd5b61444486613e18565b9450602086013567ffffffffffffffff811115613f68575f5ffd5b5f5f5f5f5f5f60608789031215614474575f5ffd5b863567ffffffffffffffff81111561448a575f5ffd5b61449689828a01613ef6565b909750955050602087013567ffffffffffffffff8111156144b5575f5ffd5b6144c189828a01613ef6565b909550935050604087013567ffffffffffffffff8111156144e0575f5ffd5b6144ec89828a01613ef6565b979a9699509497509295939492505050565b5f5f5f5f5f5f60608789031215614513575f5ffd5b863567ffffffffffffffff811115614529575f5ffd5b61449689828a01613fb0565b5f82601f830112614544575f5ffd5b81356145526141b982614179565b8082825260208201915060208360051b860101925085831115614573575f5ffd5b602085015b838110156141fc5761458981613e18565b835260209283019201614578565b5f5f604083850312156145a8575f5ffd5b823567ffffffffffffffff8111156145be575f5ffd5b6145ca85828601614535565b925050602083013567ffffffffffffffff8111156145e6575f5ffd5b6145f28582860161419c565b9150509250929050565b5f8151808452602084019350602083015f5b8281101561462c57815186526020958601959091019060010161460e565b5093949350505050565b602081525f6125c960208301846145fc565b8015158114612909575f5ffd5b803561315781614648565b5f5f5f60408486031215614672575f5ffd5b833567ffffffffffffffff811115614688575f5ffd5b61469486828701613ef6565b90945092505060208401356146a881614648565b809150509250925092565b5f5f5f5f5f606086880312156146c7575f5ffd5b85359450602086013567ffffffffffffffff8111156146e4575f5ffd5b6146f088828901613fb0565b909550935050604086013567ffffffffffffffff81111561470f575f5ffd5b613f9f88828901613fb0565b5f5f5f6040848603121561472d575f5ffd5b83359250602084013567ffffffffffffffff81111561474a575f5ffd5b61475686828701613fb0565b9497909650939450505050565b5f5f5f60608486031215614775575f5ffd5b61477e84613e18565b92506020840135915061479360408501613e18565b90509250925092565b5f5f5f5f5f5f5f5f5f6101208a8c0312156147b5575f5ffd5b893567ffffffffffffffff8111156147cb575f5ffd5b6147d78c828d01614206565b99505060208a013567ffffffffffffffff8111156147f3575f5ffd5b6147ff8c828d01614206565b98505060408a013567ffffffffffffffff81111561481b575f5ffd5b6148278c828d01614206565b97505061483660608b01613e18565b955060808a0135945061484b60a08b01613e18565b935060c08a013567ffffffffffffffff811115614866575f5ffd5b6148728c828d01614535565b93505061488160e08b01614655565b91506148906101008b01613e18565b90509295985092959850929598565b5f602082840312156148af575f5ffd5b81356125c981614648565b5f5f604083850312156148cb575f5ffd5b823591506148db60208401613e18565b90509250929050565b5f5f5f606084860312156148f6575f5ffd5b8335925061490660208501613e18565b929592945050506040919091013590565b5f5f60408385031215614928575f5ffd5b61493183613e18565b9150602083013561494181614648565b809150509250929050565b602080825282518282018190525f918401906040840190835b8181101561498c5783516001600160a01b0316835260209384019390920191600101614965565b509095945050505050565b602081528151151560208201525f602083015160408084015261357e6060840182613e86565b5f5f5f606084860312156149cf575f5ffd5b83359250602084013567ffffffffffffffff8111156149ec575f5ffd5b6149f886828701614535565b92505060408401356146a881614648565b5f5f60408385031215614a1a575f5ffd5b614a2383613e18565b91506148db60208401613e18565b5f5f5f5f5f60a08688031215614a45575f5ffd5b614a4e86613e18565b9450614a5c60208701613e18565b93506040860135925060608601359150608086013567ffffffffffffffff81111561430e575f5ffd5b600181811c90821680614a9957607f821691505b602082108103614ab757634e487b7160e01b5f52602260045260245ffd5b50919050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b604081525f614af86040830186613e86565b8281036020840152614b0b818587614abd565b9695505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176108a2576108a2614b15565b5f82614b5a57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112614b88575f5ffd5b83018035915067ffffffffffffffff821115614ba2575f5ffd5b602001915036819003821315610ecc575f5ffd5b5f5f8335601e19843603018112614bcb575f5ffd5b83018035915067ffffffffffffffff821115614be5575f5ffd5b6020019150600581901b3603821315610ecc575f5ffd5b5f60018201614c0d57614c0d614b15565b5060010190565b601f8211156126b457805f5260205f20601f840160051c81016020851015614c395750805b601f840160051c820191505b818110156114f2575f8155600101614c45565b67ffffffffffffffff831115614c7057614c70614134565b614c8483614c7e8354614a85565b83614c14565b5f601f841160018114614cb5575f8515614c9e5750838201355b5f19600387901b1c1916600186901b1783556114f2565b5f83815260208120601f198716915b82811015614ce45786850135825560209485019460019092019101614cc4565b5086821015614d00575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b602081525f61357e602083018486614abd565b5f60208284031215614d35575f5ffd5b81516125c981614648565b815167ffffffffffffffff811115614d5a57614d5a614134565b614d6e81614d688454614a85565b84614c14565b6020601f821160018114614da0575f8315614d895750848201515b5f19600385901b1c1916600184901b1784556114f2565b5f84815260208120601f198516915b82811015614dcf5787850151825560209485019460019092019101614daf565b5084821015614dec57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f614e0d6040830185613e86565b8281036020840152614e1f8185613e86565b95945050505050565b808201808211156108a2576108a2614b15565b5f81614e4957614e49614b15565b505f190190565b604081525f614e6260408301856145fc565b8281036020840152614e1f81856145fc565b6001600160a01b03861681526001600160a01b038516602082015283604082015282606082015260a060808201525f614eb060a0830184613e86565b979650505050505050565b5f60208284031215614ecb575f5ffd5b81516125c981613e56565b6001600160a01b03861681526001600160a01b038516602082015260a060408201525f614f0660a08301866145fc565b8281036060840152614f1881866145fc565b90508281036080840152614f2c8185613e86565b98975050505050505050565b818103818111156108a2576108a2614b15565b634e487b7160e01b5f52603160045260245ffdfe0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3019016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993000d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e300a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212209aa46b2f8c40236f9dce71d19f7dde2a2b524e4a7214705ad10f4afa9048ebd164736f6c634300081c00330000000000000000000000000000000000000000000000000000000000000001