0 txs
1 call
constructor
constructor()
functions
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])
contractURI
viewfunction contractURI() view returns (string)
credChainId
viewfunction credChainId() view returns (uint256)
credId
viewfunction credId() view returns (uint256)
exists
viewfunction exists(uint256 id) view returns (bool)
getArtDataFromFactory
viewfunction getArtDataFromFactory(uint256 artId_) view returns (tuple)
getFactoryArtId
viewfunction getFactoryArtId(uint256 tokenId_) view returns (uint256)
getMinterDataHistory
viewfunction getMinterDataHistory(uint256 tokenId_, address minter_) view returns (bytes32[])
getPhiFactoryContract
viewfunction getPhiFactoryContract() view returns (address)
getProtocolFeeDestination
viewfunction getProtocolFeeDestination() view returns (address)
getRoyalties
viewfunction getRoyalties(uint256 tokenId) view returns (tuple)
getTokenIdFromFactoryArtId
viewfunction getTokenIdFromFactoryArtId(uint256 artId_) view returns (uint256 tokenId)
getURIHistory
viewfunction getURIHistory(uint256 tokenId_, address minter_) view returns (string[])
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
minted
viewfunction minted(address minter) view returns (bool minted)
minterDataHistory
viewfunction minterDataHistory(address minter, uint256 tokenId, uint256) view returns (bytes32)
mintFee
viewfunction mintFee(uint256 tokenId_) view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
phiFactoryContract
viewfunction phiFactoryContract() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
royalties
viewfunction royalties(uint256 _tokenId) view returns (uint32 royaltyBPS, address royaltyRecipient)
royaltyInfo
viewfunction royaltyInfo(uint256 tokenId, uint256 salePrice) view returns (address receiver, uint256 royaltyAmount)
snapshotImageHistory
viewfunction snapshotImageHistory(address minter, uint256 tokenId, uint256) view returns (string)
soulBounded
viewfunction soulBounded(uint256 tokenId_) view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenIdCounter
viewfunction tokenIdCounter() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
totalSupply
viewfunction totalSupply(uint256 id) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
uri
viewfunction uri(uint256 tokenId_, address minter_, uint256 index_) view returns (string)
uri
viewfunction uri(uint256 tokenId_) view returns (string)
verificationType
viewfunction verificationType() view returns (string)
version
purefunction version() pure returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
claimFromFactory
payablefunction claimFromFactory(uint256 artId_, address minter_, address ref_, address verifier_, uint256 quantity_, bytes32 data_, string snapshotImage_) payable
createArtFromFactory
payablefunction createArtFromFactory(address sender, uint256 artId_) payable returns (uint256)
initialize
nonpayablefunction initialize(uint256 credChainId_, uint256 credId_, string verificationType_)
merkleClaim
payablefunction merkleClaim() payable
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
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)
setContractURI
nonpayablefunction setContractURI()
signatureClaim
payablefunction signatureClaim() payable
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unPause
nonpayablefunction unPause()
updateRoyalties
nonpayablefunction updateRoyalties(uint256 tokenId_, tuple configuration)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
ArtClaimedData
event ArtClaimedData(address indexed recipient, address indexed artistRewardReceiver, address indexed referrer, address verifier, uint256 artId, uint256 tokenId, uint256 quantity, bytes32 data, string snapshotImage)
ArtCreated
event ArtCreated(uint256 artId, uint256 tokenId)
ContractURIUpdated
event ContractURIUpdated()
Initialized
event Initialized(uint64 version)
InitializePhiNFT1155
event InitializePhiNFT1155(uint256 credChainId, uint256 credId, string verificationType)
MintComment
event MintComment(address indexed to, address from, uint256 tokenId, string snapshotImage)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
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)
Unpaused
event Unpaused(address account)
UpdatedRoyalties
event UpdatedRoyalties(uint256 indexed tokenId, address indexed user, (uint32 royaltyBPS, address royaltyRecipient) configuration)
Upgraded
event Upgraded(address indexed implementation)
URI
event URI(string value, uint256 indexed id)
errors
AddressAlreadyMinted
error AddressAlreadyMinted()
AddressEmptyCode
error AddressEmptyCode(address target)
AddressNotSigned
error AddressNotSigned()
AlreadyInitialized
error AlreadyInitialized()
EnforcedPause
error EnforcedPause()
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)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InsufficientTokenBalance
error InsufficientTokenBalance()
InValdidTokenId
error InValdidTokenId()
InvalidInitialization
error InvalidInitialization()
InvalidMerkleClaimData
error InvalidMerkleClaimData()
InvalidMintSchedule
error InvalidMintSchedule()
InvalidRoyaltyRecipient
error InvalidRoyaltyRecipient()
NotArtCreator
error NotArtCreator()
NotEnded
error NotEnded()
NotInitialized
error NotInitialized()
NotInitializing
error NotInitializing()
NotPhiFactory
error NotPhiFactory()
NotStarted
error NotStarted()
OverMaxAllowedToMint
error OverMaxAllowedToMint()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RoyaltyTooHigh
error RoyaltyTooHigh()
TokenNotTransferable
error TokenNotTransferable()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051614bb86100fd600039600081816125d5015281816125fe01526127810152614bb86000f3fe6080604052600436106103545760003560e01c80637f77f574116101bb578063ce852f9f116100f7578063e8a3d48511610095578063f2fde38b1161006f578063f2fde38b14610abb578063f50b31b714610adb578063f7b188a514610ae3578063feb3621814610af857600080fd5b8063e8a3d48514610a1e578063e985e9c514610a33578063f242432a14610a9b57600080fd5b8063dd762a5f116100d1578063dd762a5f146109c1578063e30c3978146109ee578063e4598fa614610a03578063e752c44a14610a1657600080fd5b8063ce852f9f1461096e578063d82109361461098e578063db968e08146109a357600080fd5b806395d89b4111610164578063ad3cb1cc1161013e578063ad3cb1cc1461087f578063bb3bafd6146108c8578063bd85b039146108f5578063c416a5691461094157600080fd5b806395d89b411461083457806398bdf6f514610849578063a22cb4651461085f57600080fd5b80638da5cb5b116101955780638da5cb5b146107ea5780638db462fc146107ff5780639070940d1461081457600080fd5b80637f77f5741461074b5780638456cb59146107b55780638a35ace3146107ca57600080fd5b806335196aba1161029557806354fd4d5011610233578063715018a61161020d578063715018a6146106d457806375e8c48d146106e957806379ba5097146106fe5780637ab9ffc91461071357600080fd5b806354fd4d50146106695780635c975abb1461067d5780636a6d8039146106b457600080fd5b80634e1273f41161026f5780634e1273f4146105c65780634f1ef286146105f35780634f558e791461060657806352d1902d1461065457600080fd5b806335196aba14610570578063387db2e7146105905780634977bc26146105b057600080fd5b80631585cc64116103025780631e7269c5116102dc5780631e7269c5146104bf57806322720318146104ef5780632a55205a1461050f5780632eb2c2d61461054e57600080fd5b80631585cc641461044b57806315e576371461047857806318160ddd1461048b57600080fd5b806303ce5e111161033357806303ce5e11146103e957806306fdde03146104165780630e89341c1461042b57600080fd5b8062fdd58e1461035957806301ffc9a71461038c5780630333ec92146103bc575b600080fd5b34801561036557600080fd5b50610379610374366004613844565b610b0e565b6040519081526020015b60405180910390f35b34801561039857600080fd5b506103ac6103a7366004613886565b610b57565b6040519015158152602001610383565b3480156103c857600080fd5b506103dc6103d73660046138a3565b610ba5565b6040516103839190613928565b3480156103f557600080fd5b5061037961040436600461393b565b60009081526009602052604090205490565b34801561042257600080fd5b506103dc610c6b565b34801561043757600080fd5b506103dc61044636600461393b565b610c78565b34801561045757600080fd5b5061037961046636600461393b565b6000908152600a602052604090205490565b610379610486366004613844565b610cfb565b34801561049757600080fd5b507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154610379565b3480156104cb57600080fd5b506103ac6104da366004613954565b600b6020526000908152604090205460ff1681565b3480156104fb57600080fd5b506103ac61050a36600461393b565b610ef2565b34801561051b57600080fd5b5061052f61052a366004613971565b610f83565b604080516001600160a01b039093168352602083019190915201610383565b34801561055a57600080fd5b5061056e610569366004613b33565b610fc6565b005b34801561057c57600080fd5b5061037961058b3660046138a3565b6110d8565b34801561059c57600080fd5b506103dc6105ab366004613be1565b611116565b3480156105bc57600080fd5b5061037960045481565b3480156105d257600080fd5b506105e66105e1366004613c19565b6112f2565b6040516103839190613d17565b61056e610601366004613d2a565b6113bf565b34801561061257600080fd5b506103ac61062136600461393b565b60009081527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006020526040902054151590565b34801561066057600080fd5b506103796113de565b34801561067557600080fd5b506001610379565b34801561068957600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166103ac565b3480156106c057600080fd5b506105e66106cf366004613d70565b61140d565b3480156106e057600080fd5b5061056e611482565b3480156106f557600080fd5b5061056e611496565b34801561070a57600080fd5b5061056e6114c1565b34801561071f57600080fd5b50600254610733906001600160a01b031681565b6040516001600160a01b039091168152602001610383565b34801561075757600080fd5b5061079161076636600461393b565b60006020819052908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201610383565b3480156107c157600080fd5b5061056e611509565b3480156107d657600080fd5b506103796107e536600461393b565b611519565b3480156107f657600080fd5b506107336115aa565b34801561080b57600080fd5b506107336115df565b34801561082057600080fd5b5061056e61082f366004613da0565b61166b565b34801561084057600080fd5b506103dc6118ad565b34801561085557600080fd5b5061037960055481565b34801561086b57600080fd5b5061056e61087a366004613dfe565b6118ba565b34801561088b57600080fd5b506103dc6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156108d457600080fd5b506108e86108e336600461393b565b6118c5565b6040516103839190613e2c565b34801561090157600080fd5b5061037961091036600461393b565b60009081527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604090205490565b34801561094d57600080fd5b5061096161095c366004613d70565b611987565b6040516103839190613e52565b34801561097a57600080fd5b5061056e610989366004613ec8565b611a7f565b34801561099a57600080fd5b506103dc611b81565b3480156109af57600080fd5b506002546001600160a01b0316610733565b3480156109cd57600080fd5b506109e16109dc36600461393b565b611b8e565b6040516103839190613f29565b3480156109fa57600080fd5b50610733611c91565b61056e610a11366004614076565b611cba565b61056e611f70565b348015610a2a57600080fd5b506103dc6120e7565b348015610a3f57600080fd5b506103ac610a4e366004614108565b6001600160a01b0391821660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b348015610aa757600080fd5b5061056e610ab6366004614136565b61216f565b348015610ac757600080fd5b5061056e610ad6366004613954565b612246565b61056e6122cb565b348015610aef57600080fd5b5061056e612411565b348015610b0457600080fd5b5061037960035481565b60008181527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602090815260408083206001600160a01b03861684529091529020545b92915050565b6000610b6282612421565b80610b9657506001600160e01b031982167f27575fc900000000000000000000000000000000000000000000000000000000145b80610b515750610b5182612470565b600d6020528260005260406000206020528160005260406000208181548110610bcd57600080fd5b9060005260206000200160009250925050508054610bea9061419f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c169061419f565b8015610c635780601f10610c3857610100808354040283529160200191610c63565b820191906000526020600020905b815481529060010190602001808311610c4657829003601f168201915b505050505081565b60068054610bea9061419f565b6002546000828152600a602052604090819020549051633bb3a24d60e01b815260048101919091526060916001600160a01b031690633bb3a24d90602401600060405180830381865afa158015610cd3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b519190810190614226565b6002546000906001600160a01b0316336001600160a01b031614610d32576040516304117f5560e01b815260040160405180910390fd5b610d3a6124f2565b6005546000838152600960209081526040808320849055928252600a815282822085905560025483517f818849e2000000000000000000000000000000000000000000000000000000008152935192936001600160a01b039091169263818849e2926004808401939192918290030181865afa158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de2919061425b565b90506000600260009054906101000a90046001600160a01b03166001600160a01b0316634ce7957c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5d9190614284565b9050610e726001600160a01b0382168361254e565b6005546040805186815260208101929092527fbdcf05321b109dde965a4c49b2cf4ff68e47300539f1bea56ed319cd5e207448910160405180910390a160058054600181019091556000610ec684346142b7565b1115610ee957610ee9610ed984346142b7565b6001600160a01b0388169061254e565b95945050505050565b6002546000828152600a6020526040808220549051633a00e11560e21b815291926001600160a01b03169163e803845491610f339160040190815260200190565b600060405180830381865afa158015610f50573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f789190810190614317565b6101e0015192915050565b6000806000610f91856118c5565b905061271084826000015163ffffffff16610fac9190614477565b610fb6919061448e565b6020909101519590945092505050565b60005b835181101561102d576001600160a01b038616158015906110075750611007848281518110610ffa57610ffa6144b0565b6020026020010151610ef2565b156110255760405163647d843160e11b815260040160405180910390fd5b600101610fc9565b50336001600160a01b038616811480159061108d57506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b156110c35760405163711bec9160e11b81526001600160a01b038083166004830152871660248201526044015b60405180910390fd5b6110d0868686868661256a565b505050505050565b600c602052826000526040600020602052816000526040600020818154811061110057600080fd5b9060005260206000200160009250925050505481565b6001600160a01b0382166000908152600d602090815260408083208684529091528120546060918190036111d3576002546000868152600a602052604090819020549051633bb3a24d60e01b81526001600160a01b0390921691633bb3a24d916111869160040190815260200190565b600060405180830381865afa1580156111a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111cb9190810190614226565b9150506112eb565b8215806111df57508083115b156112bd576001600160a01b0384166000908152600d6020908152604080832088845290915290206112126001836142b7565b81548110611222576112226144b0565b9060005260206000200180546112379061419f565b80601f01602080910402602001604051908101604052809291908181526020018280546112639061419f565b80156112b05780601f10611285576101008083540402835291602001916112b0565b820191906000526020600020905b81548152906001019060200180831161129357829003601f168201915b50505050509150506112eb565b6001600160a01b0384166000908152600d6020908152604080832088845290915290206112126001856142b7565b9392505050565b606081518351146113235781518351604051635b05999160e01b8152600481019290925260248201526044016110ba565b6000835167ffffffffffffffff81111561133f5761133f613993565b604051908082528060200260200182016040528015611368578160200160208202803683370190505b50905060005b84518110156113b75760208082028601015161139290602080840287010151610b0e565b8282815181106113a4576113a46144b0565b602090810291909101015260010161136e565b509392505050565b6113c76125ca565b6113d082612681565b6113da8282612689565b5050565b60006113e8612776565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6001600160a01b0381166000908152600c6020908152604080832085845282529182902080548351818402810184019094528084526060939283018282801561147557602002820191906000526020600020905b815481526020019060010190808311611461575b5050505050905092915050565b61148a6127bf565b61149460006127f1565b565b6040517fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad96290600090a1565b33806114cb611c91565b6001600160a01b0316146114fd5760405163118cdaa760e01b81526001600160a01b03821660048201526024016110ba565b611506816127f1565b50565b6115116127bf565b611494612829565b6002546000828152600a6020526040808220549051633a00e11560e21b815291926001600160a01b03169163e80384549161155a9160040190815260200190565b600060405180830381865afa158015611577573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261159f9190810190614317565b610160015192915050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b600254604080517f4ce7957c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634ce7957c9160048083019260209291908290030181865afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190614284565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116b65750825b905060008267ffffffffffffffff1660011480156116d35750303b155b9050811580156116e1575080155b15611718576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561174c57845468ff00000000000000001916680100000000000000001785555b6117553361289e565b61175d6128af565b6117656128bf565b600280546001600160a01b0319163317905561177f6128cf565b60016005556003889055600487905561179787612985565b6117a089612985565b6040516020016117b19291906144c6565b604051602081830303815290604052600690816117ce919061459f565b506117d887612985565b6117e189612985565b6040516020016117f292919061465f565b6040516020818303038152906040526007908161180f919061459f565b50600861181c878261459f565b507fce205ff9a7f4069eb0ad67eaf075a8f274d8a525bbf430788f8ef2ab66fcf197888888604051611850939291906146f0565b60405180910390a183156118a357845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60078054610bea9061419f565b6113da3383836129c9565b6040805180820190915260008082526020820152600154600160a01b900460ff1661191c576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902082518084019093525463ffffffff8116835264010000000090046001600160a01b0316908201819052156119605792915050565b5050604080518082019091526101f481526001546001600160a01b03166020820152919050565b6001600160a01b0381166000908152600d602090815260408083208584528252808320805482518185028101850190935280835260609492939192909184015b82821015611a735783829060005260206000200180546119e69061419f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a129061419f565b8015611a5f5780601f10611a3457610100808354040283529160200191611a5f565b820191906000526020600020905b815481529060010190602001808311611a4257829003601f168201915b5050505050815260200190600101906119c7565b50505050905092915050565b6000828152600a6020526040808220546002549151633a00e11560e21b815260048101829052859391926001600160a01b03169063e803845490602401600060405180830381865afa158015611ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b019190810190614317565b60e001519050336001600160a01b03821614801590611b395750611b236115aa565b6001600160a01b0316336001600160a01b031614155b15611b70576040517f5336652700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7a8585612a9d565b5050505050565b60088054610bea9061419f565b611c206040805161020081018252600080825260208083018290528284018290526060808401819052608084015260a0830182905260c0830182905260e083018290526101008301829052835180850190945281845283015290610120820190815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b600254604051633a00e11560e21b8152600481018490526001600160a01b039091169063e803845490602401600060405180830381865afa158015611c69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b519190810190614317565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006115cf565b611cc26124f2565b6002546001600160a01b0316336001600160a01b031614611cf6576040516304117f5560e01b815260040160405180910390fd5b60008781526009602052604081205490819003611d3f576040517f4ea0703b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d4c8782868587612bbb565b600254604051633a00e11560e21b8152600481018a90526000916001600160a01b03169063e803845490602401600060405180830381865afa158015611d96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dbe9190810190614317565b6101000151604080516001600160a01b03808c16602083015280841692820192909252818a166060820152908816608082015290915060009060a00160408051601f198184030181528282526002547fceedf7ce00000000000000000000000000000000000000000000000000000000845291519093506001600160a01b039091169163ceedf7ce9160048083019260209291908290030181865afa158015611e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8f9190614284565b6001600160a01b03166388580db7348c6004548a611eac89611519565b8746600354146040518863ffffffff1660e01b8152600401611ed39695949392919061470f565b6000604051808303818588803b158015611eec57600080fd5b505af1158015611f00573d6000803e3d6000fd5b5050505050876001600160a01b0316826001600160a01b03168a6001600160a01b03167fc7a243c8799746087ada9ce701720f246641c69adef5d352deff2866ed03ef358a8e888c8c8c604051611f5c9695949392919061474f565b60405180910390a450505050505050505050565b6000808080808080808080611f883660048184614795565b810190611f9591906147ca565b99509950995099509950995099509950995099506000611fc1866000908152600a602052604090205490565b905060006040518060c001604052808581526020018b6001600160a01b03168152602001896001600160a01b03168152602001838152602001468152602001848152509050600081604051602001612019919061488b565b604051602081830303815290604052905060008d8d604051602001612048929190918252602082015260400190565b6040516020818303038152906040529050600061206d6002546001600160a01b031690565b9050806001600160a01b031663a0035a22348e868c878f6040518763ffffffff1660e01b81526004016120a49594939291906148e7565b6000604051808303818588803b1580156120bd57600080fd5b505af11580156120d1573d6000803e3d6000fd5b5050505050505050505050505050505050505050565b6002546040517e844d130000000000000000000000000000000000000000000000000000000081523060048201526060916001600160a01b03169062844d1390602401600060405180830381865afa158015612147573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116669190810190614226565b6001600160a01b0385161580159061218b575061218b83610ef2565b156121a95760405163647d843160e11b815260040160405180910390fd5b336001600160a01b038616811480159061220857506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b156122395760405163711bec9160e11b81526001600160a01b038083166004830152871660248201526044016110ba565b6110d08686868686612c9e565b61224e6127bf565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556122926115aa565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b60008080808080808080806122e33660048184614795565b8101906122f09190614939565b9950995099509950995099509950995099509950600061231c866000908152600a602052604090205490565b90506000604051806101000160405280868152602001896001600160a01b031681526020018b6001600160a01b031681526020018a6001600160a01b0316815260200183815260200146815260200184815260200185815250905060008160405160200161238a91906149ea565b604051602081830303815290604052905060008d8d6040516020016123b9929190918252602082015260400190565b604051602081830303815290604052905060006123de6002546001600160a01b031690565b9050806001600160a01b0316636fed0aa63484868d6040518563ffffffff1660e01b81526004016120a493929190614a6f565b6124196127bf565b611494612d2c565b60006001600160e01b031982166301ffc9a760e01b1480610b5157506001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001492915050565b60006001600160e01b031982167fd9b67a260000000000000000000000000000000000000000000000000000000014806124d357506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b80610b5157506301ffc9a760e01b6001600160e01b0319831614610b51565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611494576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003860003884865af16113da5763b12d13eb6000526004601cfd5b6001600160a01b03841661259457604051632bfa23e760e11b8152600060048201526024016110ba565b6001600160a01b0385166125bd57604051626a0d4560e21b8152600060048201526024016110ba565b611b7a8585858585612d84565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061266357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156114945760405163703e46dd60e11b815260040160405180910390fd5b6115066127bf565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126e3575060408051601f3d908101601f191682019092526126e09181019061425b565b60015b61270b57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016110ba565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612767576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016110ba565b6127718383612dd7565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114945760405163703e46dd60e11b815260040160405180910390fd5b336127c86115aa565b6001600160a01b0316146114945760405163118cdaa760e01b81523360048201526024016110ba565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556113da82612e2d565b6128316124f2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128a6612e9e565b61150681612f05565b6128b7612e9e565b611494612f50565b6128c7612e9e565b611494612f83565b60006128d96115df565b90506001600160a01b038116612902576040516347d85f5f60e01b815260040160405180910390fd5b600154600160a01b900460ff1615612946576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffff000000000000000000000000000000000000000000166001600160a01b0390921691909117600160a01b179055565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a9004806129a0575050819003601f19909101908152919050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b038316612a2d576040517fced3e100000000000000000000000000000000000000000000000000000000008152600060048201526024016110ba565b6001600160a01b038481166000818152600184016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b60208101516001600160a01b0316158015612abe5750805163ffffffff1615155b15612adc576040516347d85f5f60e01b815260040160405180910390fd5b6107d0816000015163ffffffff161115612b22576040517fc2b03beb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083518154928501516001600160a01b0316640100000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931663ffffffff9091161791909117905551339083907fac6c25c236bd3d770d0d5fe9beb97491ac12458babd4e48ca0bf86a9517c62fe90612baf908590613e2c565b60405180910390a35050565b6001600160a01b0385166000818152600c60209081526040808320888452825280832080546001818101835591855283852001869055938352600d825280832088845282528220805493840181558252902001612c18838261459f565b506001600160a01b0385166000908152600b602052604090205460ff16612c5d576001600160a01b0385166000908152600b60205260409020805460ff191660011790555b611b7a8585856040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250612fb1565b6001600160a01b038416612cc857604051632bfa23e760e11b8152600060048201526024016110ba565b6001600160a01b038516612cf157604051626a0d4560e21b8152600060048201526024016110ba565b60408051600180825260208201869052818301908152606082018590526080820190925290612d238787848487612d84565b50505050505050565b612d3461300e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612880565b612d9085858585613069565b6001600160a01b03841615611b7a5782513390600103612dc95760208481015190840151612dc283898985858961307b565b50506110d0565b6110d081878787878761319f565b612de082613288565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612e255761277182826132ff565b6113da61336c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611494576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f0d612e9e565b6001600160a01b0381166114fd576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016110ba565b612f58612e9e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b612f8b612e9e565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b038416612fdb57604051632bfa23e760e11b8152600060048201526024016110ba565b604080516001808252602082018690528183019081526060820185905260808201909252906110d0600087848487612d84565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611494576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613075848484846133a4565b50505050565b6001600160a01b0384163b156110d05760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906130bf9089908990889088908890600401614aa5565b6020604051808303816000875af19250505080156130fa575060408051601f3d908101601f191682019092526130f791810190614ae8565b60015b613163573d808015613128576040519150601f19603f3d011682016040523d82523d6000602084013e61312d565b606091505b50805160000361315b57604051632bfa23e760e11b81526001600160a01b03861660048201526024016110ba565b805181602001fd5b6001600160e01b0319811663f23a6e6160e01b14612d2357604051632bfa23e760e11b81526001600160a01b03861660048201526024016110ba565b6001600160a01b0384163b156110d05760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906131e39089908990889088908890600401614b05565b6020604051808303816000875af192505050801561321e575060408051601f3d908101601f1916820190925261321b91810190614ae8565b60015b61324c573d808015613128576040519150601f19603f3d011682016040523d82523d6000602084013e61312d565b6001600160e01b0319811663bc197c8160e01b14612d2357604051632bfa23e760e11b81526001600160a01b03861660048201526024016110ba565b806001600160a01b03163b6000036132be57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016110ba565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161331c9190614b57565b600060405180830381855af49150503d8060008114613357576040519150601f19603f3d011682016040523d82523d6000602084013e61335c565b606091505b5091509150610ee98583836133b8565b3415611494576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133ac6124f2565b6130758484848461342d565b6060826133cd576133c88261359d565b6112eb565b81511580156133e457506001600160a01b0384163b155b15613426576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016110ba565b50806112eb565b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280061345a858585856135df565b6001600160a01b038516613508576000805b84518110156134ec576000848281518110613489576134896144b0565b60200260200101519050808460000160008885815181106134ac576134ac6144b0565b6020026020010151815260200190815260200160002060008282546134d19190614b73565b909155506134e190508184614b73565b92505060010161346c565b50808260010160008282546135019190614b73565b9091555050505b6001600160a01b038416611b7a576000805b8451811015613589576000848281518110613537576135376144b0565b602002602001015190508084600001600088858151811061355a5761355a6144b0565b60209081029190910181015182528101919091526040016000208054919091039055919091019060010161351a565b506001820180549190910390555050505050565b8051156135ad5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450091146136305782518251604051635b05999160e01b8152600481019290925260248201526044016110ba565b3360005b845181101561374f576020818102868101820151908601909101516001600160a01b03891615613700576000828152602086815260408083206001600160a01b038d168452909152902054818110156136d9576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b1660048201526024810182905260448101839052606481018490526084016110ba565b6000838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b03881615613745576000828152602086815260408083206001600160a01b038c1684529091528120805483929061373f908490614b73565b90915550505b5050600101613634565b5083516001036137d05760208401516000906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516137c1929190918252602082015260400190565b60405180910390a450506110d0565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161381f929190614b86565b60405180910390a4505050505050565b6001600160a01b038116811461150657600080fd5b6000806040838503121561385757600080fd5b82356138628161382f565b946020939093013593505050565b6001600160e01b03198116811461150657600080fd5b60006020828403121561389857600080fd5b81356112eb81613870565b6000806000606084860312156138b857600080fd5b83356138c38161382f565b95602085013595506040909401359392505050565b60005b838110156138f35781810151838201526020016138db565b50506000910152565b600081518084526139148160208601602086016138d8565b601f01601f19169290920160200192915050565b6020815260006112eb60208301846138fc565b60006020828403121561394d57600080fd5b5035919050565b60006020828403121561396657600080fd5b81356112eb8161382f565b6000806040838503121561398457600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156139cc576139cc613993565b60405290565b604051610200810167ffffffffffffffff811182821017156139cc576139cc613993565b604051601f8201601f1916810167ffffffffffffffff81118282101715613a1f57613a1f613993565b604052919050565b600067ffffffffffffffff821115613a4157613a41613993565b5060051b60200190565b600082601f830112613a5c57600080fd5b81356020613a71613a6c83613a27565b6139f6565b8083825260208201915060208460051b870101935086841115613a9357600080fd5b602086015b84811015613aaf5780358352918301918301613a98565b509695505050505050565b600067ffffffffffffffff821115613ad457613ad4613993565b50601f01601f191660200190565b600082601f830112613af357600080fd5b8135613b01613a6c82613aba565b818152846020838601011115613b1657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215613b4b57600080fd5b8535613b568161382f565b94506020860135613b668161382f565b9350604086013567ffffffffffffffff80821115613b8357600080fd5b613b8f89838a01613a4b565b94506060880135915080821115613ba557600080fd5b613bb189838a01613a4b565b93506080880135915080821115613bc757600080fd5b50613bd488828901613ae2565b9150509295509295909350565b600080600060608486031215613bf657600080fd5b833592506020840135613c088161382f565b929592945050506040919091013590565b60008060408385031215613c2c57600080fd5b823567ffffffffffffffff80821115613c4457600080fd5b818501915085601f830112613c5857600080fd5b81356020613c68613a6c83613a27565b82815260059290921b84018101918181019089841115613c8757600080fd5b948201945b83861015613cae578535613c9f8161382f565b82529482019490820190613c8c565b96505086013592505080821115613cc457600080fd5b50613cd185828601613a4b565b9150509250929050565b60008151808452602080850194506020840160005b83811015613d0c57815187529582019590820190600101613cf0565b509495945050505050565b6020815260006112eb6020830184613cdb565b60008060408385031215613d3d57600080fd5b8235613d488161382f565b9150602083013567ffffffffffffffff811115613d6457600080fd5b613cd185828601613ae2565b60008060408385031215613d8357600080fd5b823591506020830135613d958161382f565b809150509250929050565b600080600060608486031215613db557600080fd5b8335925060208401359150604084013567ffffffffffffffff811115613dda57600080fd5b613de686828701613ae2565b9150509250925092565b801515811461150657600080fd5b60008060408385031215613e1157600080fd5b8235613e1c8161382f565b91506020830135613d9581613df0565b815163ffffffff1681526020808301516001600160a01b03169082015260408101610b51565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015613ea957603f19888603018452613e978583516138fc565b94509285019290850190600101613e7b565b5092979650505050505050565b63ffffffff8116811461150657600080fd5b6000808284036060811215613edc57600080fd5b833592506040601f1982011215613ef257600080fd5b50613efb6139a9565b6020840135613f0981613eb6565b81526040840135613f198161382f565b6020820152919491935090915050565b602081528151602082015260006020830151613f5060408401826001600160a01b03169052565b50604083015160608301526060830151610220806080850152613f776102408501836138fc565b91506080850151601f198584030160a0860152613f9483826138fc565b92505060a0850151613fb160c08601826001600160a01b03169052565b5060c085015160e085015260e0850151610100613fd8818701836001600160a01b03169052565b8601519050610120613ff4868201836001600160a01b03169052565b860151905061014061402186820183805163ffffffff1682526020908101516001600160a01b0316910152565b860151610180868101919091526101608701516101a080880191909152908701516101c080880191909152908701516101e0808801919091529087015161020087015290950151151593019290925250919050565b600080600080600080600060e0888a03121561409157600080fd5b8735965060208801356140a38161382f565b955060408801356140b38161382f565b945060608801356140c38161382f565b93506080880135925060a0880135915060c088013567ffffffffffffffff8111156140ed57600080fd5b6140f98a828b01613ae2565b91505092959891949750929550565b6000806040838503121561411b57600080fd5b82356141268161382f565b91506020830135613d958161382f565b600080600080600060a0868803121561414e57600080fd5b85356141598161382f565b945060208601356141698161382f565b93506040860135925060608601359150608086013567ffffffffffffffff81111561419357600080fd5b613bd488828901613ae2565b600181811c908216806141b357607f821691505b6020821081036141d357634e487b7160e01b600052602260045260246000fd5b50919050565b600082601f8301126141ea57600080fd5b81516141f8613a6c82613aba565b81815284602083860101111561420d57600080fd5b61421e8260208301602087016138d8565b949350505050565b60006020828403121561423857600080fd5b815167ffffffffffffffff81111561424f57600080fd5b61421e848285016141d9565b60006020828403121561426d57600080fd5b5051919050565b805161427f8161382f565b919050565b60006020828403121561429657600080fd5b81516112eb8161382f565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b5157610b516142a1565b6000604082840312156142dc57600080fd5b6142e46139a9565b905081516142f181613eb6565b815260208201516143018161382f565b602082015292915050565b805161427f81613df0565b60006020828403121561432957600080fd5b815167ffffffffffffffff8082111561434157600080fd5b90830190610220828603121561435657600080fd5b61435e6139d2565b8251815261436e60208401614274565b60208201526040830151604082015260608301518281111561438f57600080fd5b61439b878286016141d9565b6060830152506080830151828111156143b357600080fd5b6143bf878286016141d9565b6080830152506143d160a08401614274565b60a082015260c083015160c08201526143ec60e08401614274565b60e08201526101009150614401828401614274565b828201526101209150614416868385016142ca565b8282015261016091508183015161014082015261018080840151838301526101a092508284015181830152506101c080840151838301526101e09250828401518183015250614468610200840161430c565b91810191909152949350505050565b8082028115828204841417610b5157610b516142a1565b6000826144ab57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60808152600960808201527f50686920437265642d000000000000000000000000000000000000000000000060a082015260c06020820152600061450d60c08301856138fc565b828103806040850152600a82527f206f6e20436861696e2d00000000000000000000000000000000000000000000602083015260408101606085015250610ee960408201856138fc565b601f821115612771576000816000526020600020601f850160051c810160208610156145805750805b601f850160051c820191505b818110156110d05782815560010161458c565b815167ffffffffffffffff8111156145b9576145b9613993565b6145cd816145c7845461419f565b84614557565b602080601f83116001811461460257600084156145ea5750858301515b600019600386901b1c1916600185901b1785556110d0565b600085815260208120601f198616915b8281101561463157888601518255948401946001909101908401614612565b508582101561464f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60808152600460808201527f5048492d0000000000000000000000000000000000000000000000000000000060a082015260c0602082015260006146a660c08301856138fc565b828103806040850152600182527f2d00000000000000000000000000000000000000000000000000000000000000602083015260408101606085015250610ee960408201856138fc565b838152826020820152606060408201526000610ee960608301846138fc565b86815285602082015284604082015283606082015260c06080820152600061473a60c08301856138fc565b905082151560a0830152979650505050505050565b6001600160a01b038716815285602082015284604082015283606082015282608082015260c060a0820152600061478960c08301846138fc565b98975050505050505050565b600080858511156147a557600080fd5b838611156147b257600080fd5b5050820193919092039150565b803561427f8161382f565b6000806000806000806000806000806101408b8d0312156147ea57600080fd5b8a35995060208b0135985061480160408c016147bf565b975060608b013567ffffffffffffffff8082111561481e57600080fd5b61482a8e838f01613a4b565b985061483860808e016147bf565b975060a08d0135965060c08d0135955060e08d013594506101008d013593506101208d013591508082111561486c57600080fd5b506148798d828e01613ae2565b9150509295989b9194979a5092959850565b6020815281516020820152600060208301516001600160a01b038082166040850152806040860151166060850152505060608301516080830152608083015160a083015260a083015160c08084015261421e60e08401826138fc565b60a0815260006148fa60a0830188613cdb565b828103602084015261490c81886138fc565b9050856040840152828103606084015261492681866138fc565b9150508260808301529695505050505050565b6000806000806000806000806000806101408b8d03121561495957600080fd5b8a35995060208b0135985060408b01356149728161382f565b975060608b01356149828161382f565b965060808b01356149928161382f565b955060a08b0135945060c08b0135935060e08b013592506101008b013567ffffffffffffffff8111156149c457600080fd5b6149d08d828e01613ae2565b9250506101208b013590509295989b9194979a5092959850565b6020815281516020820152600060208301516001600160a01b03808216604085015280604086015116606085015250506060830151614a3460808401826001600160a01b03169052565b50608083015160a083015260a083015160c083015260c083015160e083015260e083015161010080818501525061421e6101208401826138fc565b606081526000614a8260608301866138fc565b8281036020840152614a9481866138fc565b915050826040830152949350505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152614add60a08301846138fc565b979650505050505050565b600060208284031215614afa57600080fd5b81516112eb81613870565b60006001600160a01b03808816835280871660208401525060a06040830152614b3160a0830186613cdb565b8281036060840152614b438186613cdb565b9050828103608084015261478981856138fc565b60008251614b698184602087016138d8565b9190910192915050565b80820180821115610b5157610b516142a1565b604081526000614b996040830185613cdb565b8281036020840152610ee98185613cdb56fea164736f6c6343000819000a