0 txs
13 calls
constructor
No constructor.
functions
ADD_FUSE_MANAGER_ROLE
viewfunction ADD_FUSE_MANAGER_ROLE() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
FUSE_METADATA_MANAGER_ROLE
viewfunction FUSE_METADATA_MANAGER_ROLE() view returns (bytes32)
FUSE_STATE_MANAGER_ROLE
viewfunction FUSE_STATE_MANAGER_ROLE() view returns (bytes32)
FUSE_TYPE_MANAGER_ROLE
viewfunction FUSE_TYPE_MANAGER_ROLE() view returns (bytes32)
getFuseByAddress
viewfunction getFuseByAddress(address fuseAddress_) view returns (uint16 fuseState, uint16 fuseType, address fuseAddress, uint32 timestamp)
getFusesByMarketId
viewfunction getFusesByMarketId(uint256 marketId_) view returns (address[])
getFusesByType
viewfunction getFusesByType(uint16 fuseTypeId_) view returns (address[])
getFusesByTypeAndMarketIdAndStatus
viewfunction getFusesByTypeAndMarketIdAndStatus(uint16 type_, uint256 marketId_, uint16 status_) view returns (address[])
getFuseStateName
viewfunction getFuseStateName(uint16 fuseStateId_) view returns (string)
getFuseStates
viewfunction getFuseStates() view returns (uint16[], string[])
getFuseTypeDescription
viewfunction getFuseTypeDescription(uint16 fuseTypeId_) view returns (string)
getFuseTypes
viewfunction getFuseTypes() view returns (uint16[], string[])
getMetadataType
viewfunction getMetadataType(uint16 metadataId_) view returns (string)
getMetadataTypes
viewfunction getMetadataTypes() view returns (uint16[], string[])
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
read
viewfunction read(address target, bytes data) view returns (tuple result)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPDATE_FUSE_METADATA_MANAGER_ROLE
viewfunction UPDATE_FUSE_METADATA_MANAGER_ROLE() view returns (bytes32)
UPDATE_FUSE_STATE_MANAGER_ROLE
viewfunction UPDATE_FUSE_STATE_MANAGER_ROLE() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
addFuses
nonpayablefunction addFuses(address[] fuses_, uint16[] types_, uint16[] states_, uint32[] deploymentTimestamps_) returns (bool)
addFuseStates
nonpayablefunction addFuseStates(uint16[] fuseStateIds_, string[] fuseStateNames_) returns (bool)
addFuseTypes
nonpayablefunction addFuseTypes(uint16[] fuseTypeIds_, string[] fuseTypeNames_) returns (bool)
addMetadataTypes
nonpayablefunction addMetadataTypes(uint16[] metadataIds_, string[] metadataTypes_) returns (bool)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address initialAdmin_)
readInternal
nonpayablefunction readInternal(address target, bytes data) returns (tuple result)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
updateFuseMetadata
nonpayablefunction updateFuseMetadata(address fuseAddress_, uint16 metadataId_, bytes32[] metadata_) returns (bool)
updateFuseState
nonpayablefunction updateFuseState(address fuseAddress_, uint16 fuseState_) returns (bool)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
FuseAddedToListByType
event FuseAddedToListByType(uint16 fuseTypeId, address fuseAddress)
FuseAddedToMarketId
event FuseAddedToMarketId(address fuseAddress, uint256 marketId)
FuseInfoAdded
event FuseInfoAdded(address fuseAddress, uint16 fuseType, uint32 timestamp)
FuseMetadataUpdated
event FuseMetadataUpdated(address fuseAddress, uint256 metadataId, bytes32[] metadata)
FuseStateAdded
event FuseStateAdded(uint16 stateId, string fuseState)
FuseStateUpdated
event FuseStateUpdated(address fuseAddress, uint16 fuseState, uint16 fuseType)
FuseTypeAdded
event FuseTypeAdded(uint16 fuseId, string fuseType)
Initialized
event Initialized(uint64 version)
MetadataTypeAdded
event MetadataTypeAdded(uint16 metadataId, string metadataType)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
EmptyFuseState
error EmptyFuseState()
EmptyFuseType
error EmptyFuseType()
EmptyMetadataType
error EmptyMetadataType()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedInnerCall
error FailedInnerCall()
FuseNotFound
error FuseNotFound(address fuseAddress)
FuseStateAlreadyExists
error FuseStateAlreadyExists(uint256 stateId)
FuseTypeAlreadyExists
error FuseTypeAlreadyExists(uint256 fuseId)
FuseWhitelistInvalidInputLength
error FuseWhitelistInvalidInputLength()
InvalidFuseState
error InvalidFuseState(uint16 fuseState)
InvalidFuseTypeForInfo
error InvalidFuseTypeForInfo(uint256 fuseTypeId)
InvalidFuseTypeId
error InvalidFuseTypeId(uint256 fuseTypeId)
InvalidInitialization
error InvalidInitialization()
InvalidMetadataType
error InvalidMetadataType(uint256 metadataId)
MetadataTypeAlreadyExists
error MetadataTypeAlreadyExists(uint256 metadataId)
NotInitializing
error NotInitializing()
UnauthorizedCaller
error UnauthorizedCaller()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
ZeroAddressFuse
error ZeroAddressFuse()
ZeroAddressFuseInfo
error ZeroAddressFuseInfo()
ZeroDeploymentTimestamp
error ZeroDeploymentTimestamp()
creation bytecode
0x60a060405230608052348015610013575f80fd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516142196100f95f395f8181611b3901528181611b620152611d8201526142195ff3fe60806040526004361061025d575f3560e01c80639569bf281161014b578063ca15c873116100c6578063e03f11b71161007c578063e349b74811610062578063e349b74814610818578063fb2f0d2b14610837578063fef94d4e1461084b575f80fd5b8063e03f11b7146107c6578063e1607576146107f9575f80fd5b8063d03ef468116100ac578063d03ef46814610769578063d547741f14610788578063d79f44eb146107a7575f80fd5b8063ca15c8731461072b578063cf3b3d681461074a575f80fd5b8063ad3cb1cc1161011b578063b5ab67e611610101578063b5ab67e6146106d9578063b888b975146106ed578063c4d66de81461070c575f80fd5b8063ad3cb1cc14610672578063aee33c3b146106ba575f80fd5b80639569bf28146105e1578063a000d5cb1461060d578063a217fddf14610640578063abccd1f314610653575f80fd5b806352d1902d116101db5780637ea075ef116101ab5780639010d07c116101915780639010d07c146104fa57806391d148541461053e578063932994a7146105ae575f80fd5b80637ea075ef146104a8578063802bf5c7146104db575f80fd5b806352d1902d146103dc57806355b36a2d146103f0578063594ea8a1146104565780635e1e4e8f14610475575f80fd5b80632d34a1941161023057806336568abe1161021657806336568abe146103885780633e60a889146103a75780634f1ef286146103c9575f80fd5b80632d34a1941461033b5780632f2ff15d14610367575f80fd5b806301ffc9a7146102615780630d5d3df514610295578063248a9ca3146102b457806329ee4e221461030f575b5f80fd5b34801561026c575f80fd5b5061028061027b3660046136d2565b61087e565b60405190151581526020015b60405180910390f35b3480156102a0575f80fd5b506102806102af366004613759565b6108d9565b3480156102bf575f80fd5b506103016102ce3660046137c5565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161028c565b34801561031a575f80fd5b5061032e6103293660046137f2565b6109b1565b60405161028c9190613857565b348015610346575f80fd5b5061035a610355366004613869565b6109bc565b60405161028c91906138a2565b348015610372575f80fd5b5061038661038136600461391d565b6109d3565b005b348015610393575f80fd5b506103866103a236600461391d565b610a1c565b3480156103b2575f80fd5b506103bb610a7a565b60405161028c929190613947565b6103866103d7366004613af3565b610a8d565b3480156103e7575f80fd5b50610301610aac565b3480156103fb575f80fd5b5061040f61040a366004613b7e565b610ada565b6040805161ffff958616815294909316602085015273ffffffffffffffffffffffffffffffffffffffff9091169183019190915263ffffffff16606082015260800161028c565b348015610461575f80fd5b5061032e6104703660046137f2565b610b86565b348015610480575f80fd5b506103017fac13ce08f612d078262da0e094a923b82c0b4b46b5238a042d2ddc0ed5ead73c81565b3480156104b3575f80fd5b506103017f8aeb4bdd05ee74116d5903a8b120d6a022dc729e37b03bf522b0d9f7d62a7dfd81565b3480156104e6575f80fd5b506102806104f5366004613759565b610b91565b348015610505575f80fd5b50610519610514366004613b97565b610c5b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161028c565b348015610549575f80fd5b5061028061055836600461391d565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156105b9575f80fd5b506103017f94e00ed32d433fb9f4b53e166f06c01a3dc963d5ebf4d27d007284ab0e528b4681565b3480156105ec575f80fd5b506106006105fb366004613af3565b610c9b565b60405161028c9190613bb7565b348015610618575f80fd5b506103017fbb30e7e32e0cbb0f754c883f17a5bfd8085280f855aefef50110f70bd40cb28e81565b34801561064b575f80fd5b506103015f81565b34801561065e575f80fd5b5061028061066d366004613bd1565b610d0b565b34801561067d575f80fd5b5061032e6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156106c5575f80fd5b506102806106d4366004613bf9565b610d4a565b3480156106e4575f80fd5b506103bb610f38565b3480156106f8575f80fd5b50610280610707366004613cc7565b610f43565b348015610717575f80fd5b50610386610726366004613b7e565b610f8a565b348015610736575f80fd5b506103016107453660046137c5565b61111a565b348015610755575f80fd5b5061035a6107643660046137c5565b611151565b348015610774575f80fd5b50610280610783366004613759565b61115c565b348015610793575f80fd5b506103866107a236600461391d565b611226565b3480156107b2575f80fd5b506106006107c1366004613af3565b611269565b3480156107d1575f80fd5b506103017f4fb3bb34cb42e4219dee290bc397df1e4bcf56558ff09c87044cd8f9addd5c4881565b348015610804575f80fd5b5061035a6108133660046137f2565b61136f565b348015610823575f80fd5b5061032e6108323660046137f2565b61137a565b348015610842575f80fd5b506103bb611385565b348015610856575f80fd5b506103017f75c1f71cc6d461a46fd8c7abd959cd0b64785ccd7469a8b0e4e0d68747cf0bb481565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806108d357506108d382611390565b92915050565b5f7f75c1f71cc6d461a46fd8c7abd959cd0b64785ccd7469a8b0e4e0d68747cf0bb461090481611426565b8483811461093e576040517f81f7fcb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156109a35761099b88888381811061095d5761095d613d0c565b905060200201602081019061097291906137f2565b87878481811061098457610984613d0c565b90506020028101906109969190613d39565b611433565b600101610940565b506001979650505050505050565b60606108d38261158b565b60606109c9848484611650565b90505b9392505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a0c81611426565b610a168383611882565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610a6b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a7582826118d7565b505050565b606080610a85611923565b915091509091565b610a95611b21565b610a9e82611c27565b610aa88282611c31565b5050565b5f610ab5611d6a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b5f805f805f610b288673ffffffffffffffffffffffffffffffffffffffff165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd026020526040902090565b5461ffff808216986201000083049091169750640100000000820473ffffffffffffffffffffffffffffffffffffffff169650780100000000000000000000000000000000000000000000000090910463ffffffff16945092505050565b60606108d382611dd9565b5f7f8aeb4bdd05ee74116d5903a8b120d6a022dc729e37b03bf522b0d9f7d62a7dfd610bbc81611426565b84838114610bf6576040517f81f7fcb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156109a357610c53888883818110610c1557610c15613d0c565b9050602002016020810190610c2a91906137f2565b878784818110610c3c57610c3c613d0c565b9050602002810190610c4e9190613d39565b611e01565b600101610bf8565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610c939084611f46565b949350505050565b604080516020810190915260608152333014610ce3576040517f5c427cd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0373ffffffffffffffffffffffffffffffffffffffff841683611f51565b815292915050565b5f7f4fb3bb34cb42e4219dee290bc397df1e4bcf56558ff09c87044cd8f9addd5c48610d3681611426565b610d408484611fd0565b5060019392505050565b5f7fbb30e7e32e0cbb0f754c883f17a5bfd8085280f855aefef50110f70bd40cb28e610d7581611426565b888781141580610d855750808614155b15610dbc576040517f81f7fcb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610f2657610e1c8a8a83818110610ddb57610ddb613d0c565b9050602002016020810190610df091906137f2565b8d8d84818110610e0257610e02613d0c565b9050602002016020810190610e179190613b7e565b61217e565b610e998a8a83818110610e3157610e31613d0c565b9050602002016020810190610e4691906137f2565b8d8d84818110610e5857610e58613d0c565b9050602002016020810190610e6d9190613b7e565b888885818110610e7f57610e7f613d0c565b9050602002016020810190610e949190613d9a565b612305565b610ec88c8c83818110610eae57610eae613d0c565b9050602002016020810190610ec39190613b7e565b612548565b610f1e8c8c83818110610edd57610edd613d0c565b9050602002016020810190610ef29190613b7e565b898984818110610f0457610f04613d0c565b9050602002016020810190610f1991906137f2565b611fd0565b600101610dbe565b5060019b9a5050505050505050505050565b606080610a85612693565b5f7f94e00ed32d433fb9f4b53e166f06c01a3dc963d5ebf4d27d007284ab0e528b46610f6e81611426565b610f7e868661ffff16868661288a565b50600195945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610fd45750825b90505f8267ffffffffffffffff166001148015610ff05750303b155b905081158015610ffe575080155b15611035576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156110965784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61109e612a91565b6110a6612aa5565b6110b05f87611882565b5083156111125784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604082206109cc90612aad565b60606108d382612ab6565b5f7fac13ce08f612d078262da0e094a923b82c0b4b46b5238a042d2ddc0ed5ead73c61118781611426565b848381146111c1576040517f81f7fcb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156109a35761121e8888838181106111e0576111e0613d0c565b90506020020160208101906111f591906137f2565b87878481811061120757611207613d0c565b90506020028101906112199190613d39565b612b4a565b6001016111c3565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461125f81611426565b610a1683836118d7565b60408051602081019091526060815273ffffffffffffffffffffffffffffffffffffffff83166112c5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61135984846040516024016112dc929190613dbd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9569bf28000000000000000000000000000000000000000000000000000000001790523090612c8f565b905080806020019051810190610c939190613deb565b60606108d382612cf0565b60606108d382612d88565b606080610a85612db0565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806108d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108d3565b6114308133612fa7565b50565b5f81900361146d576040517f775643a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff83165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd016020819052604090912080546114ac90613e95565b1590506114f0576040517febca0fb400000000000000000000000000000000000000000000000000000000815261ffff851660048201526024015b60405180910390fd5b61ffff84165f90815260208290526040902061150d838583613f31565b506001818101805491820181555f9081526020902060108204018054600f9092166002026101000a61ffff81810219909316928716029190911790556040517fb62952cfaf39b8f4344935f87d7b23192784485f2bb1481143ee6b48c7e9c84a9061157d90869086908690614047565b60405180910390a150505050565b60607fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd055b61ffff83165f9081526020919091526040902080546115cd90613e95565b80601f01602080910402602001604051908101604052809291908181526020018280546115f990613e95565b80156116445780601f1061161b57610100808354040283529160200191611644565b820191905f5260205f20905b81548152906001019060200180831161162757829003601f168201915b50505050509050919050565b60605f61165c84612ab6565b80519091505f8167ffffffffffffffff81111561167b5761167b613a09565b6040519080825280602002602001820160405280156116a4578160200160208202803683370190505b5090505f805f5b848110156117a8576117158682815181106116c8576116c8613d0c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd026020526040902090565b805490925061ffff8b8116620100009092041614801561173c5750815461ffff8981169116145b156117a05785818151811061175357611753613d0c565b602002602001015184848151811061176d5761176d613d0c565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101528261179c816140cb565b9350505b6001016116ab565b50815f036117cb575050604080515f81526020810190915293506109cc92505050565b5f8267ffffffffffffffff8111156117e5576117e5613a09565b60405190808252806020026020018201604052801561180e578160200160208202803683370190505b5090505f5b838110156118745784818151811061182d5761182d613d0c565b602002602001015182828151811061184757611847613d0c565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101611813565b509998505050505050505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816118af858561304d565b90508015610c93575f8581526020839052604090206118ce908561316b565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081611904858561318c565b90508015610c93575f8581526020839052604090206118ce9085613268565b7fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd0280546040805160208084028201810190925282815260609384937fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd01938301828280156119d457602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161199b5790505b50505060018401549295508291505067ffffffffffffffff8111156119fb576119fb613a09565b604051908082528060200260200182016040528015611a2e57816020015b6060815260200190600190039081611a195790505b5092505f5b81811015611b1a57825f015f868381518110611a5157611a51613d0c565b602002602001015161ffff1661ffff1681526020019081526020015f208054611a7990613e95565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa590613e95565b8015611af05780601f10611ac757610100808354040283529160200191611af0565b820191905f5260205f20905b815481529060010190602001808311611ad357829003601f168201915b5050505050848281518110611b0757611b07613d0c565b6020908102919091010152600101611a33565b5050509091565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480611bee57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611bd57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611c25576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f610aa881611426565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611cb6575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611cb391810190614102565b60015b611d04576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016114e7565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611d60576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016114e7565b610a758383613289565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611c25576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60607fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd016115af565b5f819003611e3b576040517fda94cfda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff83165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd00602081905260409091208054611e7a90613e95565b159050611eb9576040517f9ebf750b00000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016114e7565b61ffff84165f908152602082905260409020611ed6838583613f31565b506001818101805491820181555f9081526020902060108204018054600f9092166002026101000a61ffff81810219909316928716029190911790556040517fe9fa2860bb24b906e567848296afeebd1c31ff894b9f0387acc0badbec44a1c79061157d90869086908690614047565b5f6109cc83836132eb565b60605f808473ffffffffffffffffffffffffffffffffffffffff1684604051611f7a9190614119565b5f60405180830381855af49150503d805f8114611fb2576040519150601f19603f3d011682016040523d82523d5f602084013e611fb7565b606091505b5091509150611fc7858383613311565b95945050505050565b61ffff81165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd0160208190526040909120805461200f90613e95565b90505f0361204f576040517f2be5eb8600000000000000000000000000000000000000000000000000000000815261ffff831660048201526024016114e7565b73ffffffffffffffffffffffffffffffffffffffff83165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd0260205260408120805490916201000090910461ffff1690036120f1576040517f09a6368b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016114e7565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff8481169182178084556040805173ffffffffffffffffffffffffffffffffffffffff89168152602081019490945262010000909104909116908201527f0220449cd7619b2377c71ec8626907352224651d729f2dac35e572eece7492689060600161157d565b73ffffffffffffffffffffffffffffffffffffffff81166121cb576040517f19d8186d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff82165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd006020819052604090912080547fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd0492919061222e90613e95565b90505f0361226e576040517fa025faa200000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016114e7565b61ffff84165f8181526020848152604080832080546001810182559084529282902090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88169081179091558251938452908301527fa39b1dc1c3e89b2de382f5ec5136b653922cc74d0ae6bb06bf864a7e9c354fa2910161157d565b73ffffffffffffffffffffffffffffffffffffffff8216612352576040517fede0d4a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff165f03612391576040517f3d5f888400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff83165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd006020819052604090912080547fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd029291906123f490613e95565b90505f03612434576040517f14cd43e600000000000000000000000000000000000000000000000000000000815261ffff861660048201526024016114e7565b73ffffffffffffffffffffffffffffffffffffffff84165f8181526020848152604091829020805463ffffffff8816780100000000000000000000000000000000000000000000000081027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff000064010000000088027fffffffffffffffff0000000000000000000000000000000000000000ffffffff61ffff8f16620100008102919091167fffffffffffffffff00000000000000000000000000000000000000000000ffff9096169590951717161790925583519485529184019190915282820152517f2bf4054fd03c7282f19cafa5198f8de3f694e571fc7b4ebcba9be458ad2db72e9181900360600190a15050505050565b8073ffffffffffffffffffffffffffffffffffffffff1663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156125cd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526125ca91810190614102565b60015b15611430575f7fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd035f8381526020828152604080832080546001810182559084529282902090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881690811790915582519081529081018590529192507f9b73c16906d5dcbb3b3c96e637e5ae2d19df4feeb39da62d84758b617cd03dc5910160405180910390a1505050565b7fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd0680546040805160208084028201810190925282815260609384937fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd059383018282801561274457602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161270b5790505b50505060018401549295508291505067ffffffffffffffff81111561276b5761276b613a09565b60405190808252806020026020018201604052801561279e57816020015b60608152602001906001900390816127895790505b5092505f5b81811015611b1a57825f015f8683815181106127c1576127c1613d0c565b602002602001015161ffff1661ffff1681526020019081526020015f2080546127e990613e95565b80601f016020809104026020016040519081016040528092919081815260200182805461281590613e95565b80156128605780601f1061283757610100808354040283529160200191612860565b820191905f5260205f20905b81548152906001019060200180831161284357829003601f168201915b505050505084828151811061287757612877613d0c565b60209081029190910101526001016127a3565b73ffffffffffffffffffffffffffffffffffffffff8481165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd02602081905260409091205490917fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd059164010000000090041661294d576040517f09a6368b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526024016114e7565b61ffff85165f908152602082905260409020805461296a90613e95565b90505f036129a7576040517f087040d1000000000000000000000000000000000000000000000000000000008152600481018690526024016114e7565b73ffffffffffffffffffffffffffffffffffffffff86165f90815260208390526040812090805b6002830154811015612a0f57878360020182815481106129f0576129f0613d0c565b905f5260205f20015403612a075760019150612a0f565b6001016129ce565b5080612a2f576002820180546001810182555f9182526020909120018790555b5f8781526001830160205260409020612a49908787613675565b507fd2ab2c912a3a0ff2f8f676ae44c7d2813d120405c95e6a4726ab79aaa16bbf9d88888888604051612a7f949392919061412f565b60405180910390a15050505050505050565b612a996133a0565b612aa1612aa5565b611c255b611c256133a0565b5f6108d3825490565b5f8181527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd03602090815260409182902080548351818402810184019094528084526060939283018282801561164457602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311612b145750505050509050919050565b5f819003612b84576040517fdfa3062200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff83165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd05602081905260409091208054612bc390613e95565b159050612c02576040517f24eaedc000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016114e7565b61ffff84165f908152602082905260409020612c1f838583613f31565b506001818101805491820181555f9081526020902060108204018054600f9092166002026101000a61ffff81810219909316928716029190911790556040517f069d9af3388b46e9021c55e8c48c566b55e5ff83aed74bafc75833cd3e8b150d9061157d90869086908690614047565b60605f808473ffffffffffffffffffffffffffffffffffffffff1684604051612cb89190614119565b5f60405180830381855afa9150503d805f8114611fb2576040519150601f19603f3d011682016040523d82523d5f602084013e611fb7565b61ffff81165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd04602090815260409182902080548351818402810184019094528084526060939283018282801561164457602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311612b145750505050509050919050565b60607fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd006115af565b7fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd0180546040805160208084028201810190925282815260609384937fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd0093830182828015612e6157602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411612e285790505b50505060018401549295508291505067ffffffffffffffff811115612e8857612e88613a09565b604051908082528060200260200182016040528015612ebb57816020015b6060815260200190600190039081612ea65790505b5092505f5b81811015611b1a57825f015f868381518110612ede57612ede613d0c565b602002602001015161ffff1661ffff1681526020019081526020015f208054612f0690613e95565b80601f0160208091040260200160405190810160405280929190818152602001828054612f3290613e95565b8015612f7d5780601f10612f5457610100808354040283529160200191612f7d565b820191905f5260205f20905b815481529060010190602001808311612f6057829003601f168201915b5050505050848281518110612f9457612f94613d0c565b6020908102919091010152600101612ec0565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610aa8576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016114e7565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16613162575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556130fe3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108d3565b5f9150506108d3565b5f6109cc8373ffffffffffffffffffffffffffffffffffffffff8416613407565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615613162575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108d3565b5f6109cc8373ffffffffffffffffffffffffffffffffffffffff8416613453565b6132928261352d565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156132e357610a758282611f51565b610aa86135fb565b5f825f01828154811061330057613300613d0c565b905f5260205f200154905092915050565b6060826133265761332182613633565b6109cc565b815115801561334a575073ffffffffffffffffffffffffffffffffffffffff84163b155b15613399576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016114e7565b50806109cc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c25576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81815260018301602052604081205461344c57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556108d3565b505f6108d3565b5f8181526001830160205260408120548015613162575f6134756001836141a3565b85549091505f90613488906001906141a3565b90508082146134e7575f865f0182815481106134a6576134a6613d0c565b905f5260205f200154905080875f0184815481106134c6576134c6613d0c565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806134f8576134f86141b6565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506108d3565b8073ffffffffffffffffffffffffffffffffffffffff163b5f03613595576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016114e7565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3415611c25576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051156136435780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255905f5260205f209081019282156136ae579160200282015b828111156136ae578235825591602001919060010190613693565b506136ba9291506136be565b5090565b5b808211156136ba575f81556001016136bf565b5f602082840312156136e2575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146109cc575f80fd5b5f8083601f840112613721575f80fd5b50813567ffffffffffffffff811115613738575f80fd5b6020830191508360208260051b8501011115613752575f80fd5b9250929050565b5f805f806040858703121561376c575f80fd5b843567ffffffffffffffff811115613782575f80fd5b61378e87828801613711565b909550935050602085013567ffffffffffffffff8111156137ad575f80fd5b6137b987828801613711565b95989497509550505050565b5f602082840312156137d5575f80fd5b5035919050565b803561ffff811681146137ed575f80fd5b919050565b5f60208284031215613802575f80fd5b6109cc826137dc565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6109cc602083018461380b565b5f805f6060848603121561387b575f80fd5b613884846137dc565b925060208401359150613899604085016137dc565b90509250925092565b602080825282518282018190525f918401906040840190835b818110156138ef57835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016138bb565b509095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146137ed575f80fd5b5f806040838503121561392e575f80fd5b8235915061393e602084016138fa565b90509250929050565b604080825283519082018190525f9060208501906060840190835b8181101561398457835161ffff16835260209384019390920191600101613962565b50508381036020850152809150845180825260208201925060208160051b830101602087015f5b838110156139fb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030186526139e583835161380b565b60209687019690935091909101906001016139ab565b509098975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff81118282101715613a5957613a59613a09565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613aa657613aa6613a09565b604052919050565b5f67ffffffffffffffff821115613ac757613ac7613a09565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f8060408385031215613b04575f80fd5b613b0d836138fa565b9150602083013567ffffffffffffffff811115613b28575f80fd5b8301601f81018513613b38575f80fd5b8035613b4b613b4682613aae565b613a5f565b818152866020838501011115613b5f575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215613b8e575f80fd5b6109cc826138fa565b5f8060408385031215613ba8575f80fd5b50508035926020909101359150565b602081525f8251602080840152610c93604084018261380b565b5f8060408385031215613be2575f80fd5b613beb836138fa565b915061393e602084016137dc565b5f805f805f805f806080898b031215613c10575f80fd5b883567ffffffffffffffff811115613c26575f80fd5b613c328b828c01613711565b909950975050602089013567ffffffffffffffff811115613c51575f80fd5b613c5d8b828c01613711565b909750955050604089013567ffffffffffffffff811115613c7c575f80fd5b613c888b828c01613711565b909550935050606089013567ffffffffffffffff811115613ca7575f80fd5b613cb38b828c01613711565b999c989b5096995094979396929594505050565b5f805f8060608587031215613cda575f80fd5b613ce3856138fa565b9350613cf1602086016137dc565b9250604085013567ffffffffffffffff8111156137ad575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613d6c575f80fd5b83018035915067ffffffffffffffff821115613d86575f80fd5b602001915036819003821315613752575f80fd5b5f60208284031215613daa575f80fd5b813563ffffffff811681146109cc575f80fd5b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6109c9604083018461380b565b5f60208284031215613dfb575f80fd5b815167ffffffffffffffff811115613e11575f80fd5b820160208185031215613e22575f80fd5b613e2a613a36565b815167ffffffffffffffff811115613e40575f80fd5b80830192505084601f830112613e54575f80fd5b8151613e62613b4682613aae565b818152866020838601011115613e76575f80fd5b8160208501602083015e5f918101602001919091528152949350505050565b600181811c90821680613ea957607f821691505b602082108103613ee0577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b601f821115610a7557805f5260205f20601f840160051c81016020851015613f0b5750805b601f840160051c820191505b81811015613f2a575f8155600101613f17565b5050505050565b67ffffffffffffffff831115613f4957613f49613a09565b613f5d83613f578354613e95565b83613ee6565b5f601f841160018114613fad575f8515613f775750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613f2a565b5f838152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08716915b82811015613ffa5786850135825560209485019460019092019101613fda565b5086821015614035577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b61ffff8416815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140fb576140fb61409e565b5060010190565b5f60208284031215614112575f80fd5b5051919050565b5f82518060208501845e5f920191825250919050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201528160608201525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115614188575f80fd5b8260051b808560808501379190910160800195945050505050565b818103818111156108d3576108d361409e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220bd8cbe25b3ed122dd64ad490903bdf6b56d4a186c8e5935a41612e09347c663c64736f6c634300081a0033