34 txs
67 calls
constructor
constructor(string _name, string _symbol, address _principalToken, address _lzEndpoint, address _delegate, (uint256 dailyCreditLimit, uint256 globalCreditLimit, uint256 dailyDebitLimit, uint256 globalDebitLimit, address feesRecipient, uint16 feesRate, bool isIsolateMode) _config)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
allowInitializePath
viewfunction allowInitializePath(tuple origin) view returns (bool)
approvalRequired
purefunction approvalRequired() pure returns (bool)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
combineOptions
viewfunction combineOptions(uint32 _eid, uint16 _msgType, bytes _extraOptions) view returns (bytes)
decimalConversionRate
viewfunction decimalConversionRate() view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
endpoint
viewfunction endpoint() view returns (address)
enforcedOptions
viewfunction enforcedOptions(uint32 eid, uint16 msgType) view returns (bytes enforcedOption)
getCreditDebitBalance
viewfunction getCreditDebitBalance() view returns (int256)
getCurrentDailyCreditAmount
viewfunction getCurrentDailyCreditAmount() view returns (uint256)
getCurrentDailyDebitAmount
viewfunction getCurrentDailyDebitAmount() view returns (uint256)
getDailyCreditLimit
viewfunction getDailyCreditLimit() view returns (uint256)
getDailyDebitLimit
viewfunction getDailyDebitLimit() view returns (uint256)
getFeesRate
viewfunction getFeesRate() view returns (uint16)
getFeesRecipient
viewfunction getFeesRecipient() view returns (address)
getGlobalCreditLimit
viewfunction getGlobalCreditLimit() view returns (uint256)
getGlobalDebitLimit
viewfunction getGlobalDebitLimit() view returns (uint256)
getIsIsolateMode
viewfunction getIsIsolateMode() view returns (bool)
getMaxCreditableAmount
viewfunction getMaxCreditableAmount() view returns (uint256)
getMaxDebitableAmount
viewfunction getMaxDebitableAmount() view returns (uint256)
getPrincipalToken
viewfunction getPrincipalToken() view returns (address)
isComposeMsgSender
viewfunction isComposeMsgSender(tuple, bytes, address _sender) view returns (bool)
isPeer
viewfunction isPeer(uint32 _eid, bytes32 _peer) view returns (bool)
msgInspector
viewfunction msgInspector() view returns (address)
name
viewfunction name() view returns (string)
nextNonce
viewfunction nextNonce(uint32, bytes32) view returns (uint64 nonce)
oApp
viewfunction oApp() view returns (address)
oAppVersion
purefunction oAppVersion() pure returns (uint64 senderVersion, uint64 receiverVersion)
oftVersion
purefunction oftVersion() pure returns (bytes4 interfaceId, uint64 version)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
peers
viewfunction peers(uint32 eid) view returns (bytes32 peer)
preCrime
viewfunction preCrime() view returns (address)
quoteOFT
viewfunction quoteOFT(tuple _sendParam) view returns (tuple oftLimit, tuple[] oftFeeDetails, tuple oftReceipt)
quoteSend
viewfunction quoteSend(tuple _sendParam, bool _payInLzToken) view returns (tuple msgFee)
SEND_AND_CALL
viewfunction SEND_AND_CALL() view returns (uint16)
SEND
viewfunction SEND() view returns (uint16)
sharedDecimals
viewfunction sharedDecimals() view returns (uint8)
symbol
viewfunction symbol() view returns (string)
token
viewfunction token() view returns (address)
totalSupply
viewfunction totalSupply() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
emergencyRescue
nonpayablefunction emergencyRescue(address _token, address _to, uint256 _amount)
lzReceive
payablefunction lzReceive(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
lzReceiveAndRevert
payablefunction lzReceiveAndRevert(tuple[] _packets) payable
lzReceiveSimulate
payablefunction lzReceiveSimulate(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
send
payablefunction send(tuple _sendParam, tuple _fee, address _refundAddress) payable returns (tuple msgReceipt, tuple oftReceipt)
sendWithPermit
payablefunction sendWithPermit(tuple _sendParam, tuple _fee, tuple _permit, address _refundAddress) payable returns (tuple msgReceipt, tuple oftReceipt)
setDailyCreditLimit
nonpayablefunction setDailyCreditLimit(uint256 _dailyCreditLimit)
setDailyDebitLimit
nonpayablefunction setDailyDebitLimit(uint256 _dailyDebitLimit)
setDelegate
nonpayablefunction setDelegate(address _delegate)
setEnforcedOptions
nonpayablefunction setEnforcedOptions(tuple[] _enforcedOptions)
setFeesRate
nonpayablefunction setFeesRate(uint16 _newFeesRate)
setFeesRecipient
nonpayablefunction setFeesRecipient(address _newFeesRecipient)
setGlobalCreditLimit
nonpayablefunction setGlobalCreditLimit(uint256 _globalCreditLimit)
setGlobalDebitLimit
nonpayablefunction setGlobalDebitLimit(uint256 _globalDebitLimit)
setMsgInspector
nonpayablefunction setMsgInspector(address _msgInspector)
setPeer
nonpayablefunction setPeer(uint32 _eid, bytes32 _peer)
setPreCrime
nonpayablefunction setPreCrime(address _preCrime)
swapLzTokenToPrincipalToken
nonpayablefunction swapLzTokenToPrincipalToken(address _to, uint256 _amount)
toggleIsolateMode
nonpayablefunction toggleIsolateMode()
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
BridgeableTokenReceived
event BridgeableTokenReceived(bytes32 guid, uint32 indexed srcEid, address indexed from, address indexed to, uint256 amountReceived, uint256 oftReceived, uint256 feeAmount)
BridgeableTokenSent
event BridgeableTokenSent(bytes32 guid, uint32 indexed dstEid, address indexed from, address indexed to, uint256 nativeFeeAmount, bool isPrincipalTokenSent, uint256 amountSent, uint256 amountReceive)
DailyCreditLimitSet
event DailyCreditLimitSet(uint256 dailyCreditLimit)
DailyDebitLimitSet
event DailyDebitLimitSet(uint256 dailyDebitLimit)
EnforcedOptionSet
event EnforcedOptionSet((uint32 eid, uint16 msgType, bytes options)[] _enforcedOptions)
FeesRateSet
event FeesRateSet(uint16 feesRate)
FeesRecipientSet
event FeesRecipientSet(address feesRecipient)
GlobalCreditLimitSet
event GlobalCreditLimitSet(uint256 globalCreditLimit)
GlobalDebitLimitSet
event GlobalDebitLimitSet(uint256 globalDebitLimit)
IsolateModeToggled
event IsolateModeToggled(bool isolateMode)
MsgInspectorSet
event MsgInspectorSet(address inspector)
OFTReceived
event OFTReceived(bytes32 indexed guid, uint32 srcEid, address indexed toAddress, uint256 amountReceivedLD)
OFTSent
event OFTSent(bytes32 indexed guid, uint32 dstEid, address indexed fromAddress, uint256 amountSentLD, uint256 amountReceivedLD)
OFTSwapped
event OFTSwapped(address caller, address to, uint256 amountSwapped, uint256 principalTokenAmountCredited, uint256 feeAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PeerSet
event PeerSet(uint32 eid, bytes32 peer)
PreCrimeSet
event PreCrimeSet(address preCrimeAddress)
PrincipalTokenCredited
event PrincipalTokenCredited(address to, uint256 amountCredited)
PrincipalTokenDebited
event PrincipalTokenDebited(address from, uint256 amountDebited)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
errors
AddressZero
error AddressZero()
DailyDebitLimitReached
error DailyDebitLimitReached()
EnforcedPause
error EnforcedPause()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ExpectedPause
error ExpectedPause()
GlobalDebitLimitReached
error GlobalDebitLimitReached()
GlobalLimitOverFlow
error GlobalLimitOverFlow()
InvalidDelegate
error InvalidDelegate()
InvalidEndpointCall
error InvalidEndpointCall()
InvalidLocalDecimals
error InvalidLocalDecimals()
InvalidMsgLength
error InvalidMsgLength()
InvalidOptions
error InvalidOptions(bytes options)
IsolateModeLimitReach
error IsolateModeLimitReach()
LzTokenUnavailable
error LzTokenUnavailable()
MaxFeesRateExceeded
error MaxFeesRateExceeded()
NoPeer
error NoPeer(uint32 eid)
NotEnoughNative
error NotEnoughNative(uint256 msgValue)
NothingToSwap
error NothingToSwap()
OnlyEndpoint
error OnlyEndpoint(address addr)
OnlyPeer
error OnlyPeer(uint32 eid, bytes32 sender)
OnlySelf
error OnlySelf()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SimulationResult
error SimulationResult(bytes result)
SlippageExceeded
error SlippageExceeded(uint256 amountLD, uint256 minAmountLD)
creation bytecode
0x60e060405234801561000f575f5ffd5b5060405161523b38038061523b83398101604081905261002e916105cf565b85858484838360128484818181818e6001600160a01b03811661006a57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100738161021b565b506001600160a01b0380831660805281166100a157604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b1580156100e5575f5ffd5b505af11580156100f7573d5f5f3e3d5ffd5b505050505050505061010d61026a60201b60201c565b60ff168360ff161015610133576040516301e9714b60e41b815260040160405180910390fd5b61013e6006846106fd565b61014990600a6107ff565b60a052506008915061015d90508382610898565b50600961016a8282610898565b5050600a805460ff191690555050506001600160a01b03861691506101a4905057604051639fabe1c160e01b815260040160405180910390fd5b6001600160a01b03841660c05260a08101516101bf9061026f565b80516101ca906102ed565b60208101516101d890610322565b60408101516101e69061037f565b60608101516101f4906103b4565b60c081015161020290610418565b608081015161021090610461565b505050505050610952565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b6103e861ffff8216111561029657604051630d058af560e01b815260040160405180910390fd5b600a805461ffff60b01b1916600160b01b61ffff8416908102919091179091556040519081527ffda307e16a9a5e822864b3947fcb9f4b4e6c23ff58cc37b0a88549915a45d9d7906020015b60405180910390a150565b600c8190556040518181527fccb31564499732bd47578f4ea8ddfc766ba24d78f139a1e3233f0a28bf9d138c906020016102e2565b6001600160ff1b0381111561034a5760405163400cc7b560e01b815260040160405180910390fd5b600d8190556040518181527f031173ddaf99a1bb237b541d778002d21ff01d4d2363132deda07f67ab97b6f2906020016102e2565b600e8190556040518181527f8f8d6d555d7c47768fe3daa91adf38b664b676133b63288491adb0422730697a906020016102e2565b6001600160ff1b038111156103dc5760405163400cc7b560e01b815260040160405180910390fd5b6103e5815f0390565b600f556040518181527fa4cc26688b9b71e575ec9368ea145eeb80b6d7f2107c7d2f3a2450a8c49cbf98906020016102e2565b600a80548215156101000261ff00199091161790556040517f907853d23e2ef9a4fce26edec2a088a636887fadf9c80fdc00e4bf13e9bbb93a906102e290831515815260200190565b6001600160a01b03811661048857604051639fabe1c160e01b815260040160405180910390fd5b600a805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040519081527fa2b43027058674eb68bf92a2eb43b7784f2b5bb0d61067bb072be7519db2ee5b906020016102e2565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715610516576105166104e0565b60405290565b5f82601f83011261052b575f5ffd5b81516001600160401b03811115610544576105446104e0565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610572576105726104e0565b604052818152838201602001851015610589575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b03811681146105bb575f5ffd5b919050565b805180151581146105bb575f5ffd5b5f5f5f5f5f5f8688036101808112156105e6575f5ffd5b87516001600160401b038111156105fb575f5ffd5b6106078a828b0161051c565b60208a015190985090506001600160401b03811115610624575f5ffd5b6106308a828b0161051c565b96505061063f604089016105a5565b945061064d606089016105a5565b935061065b608089016105a5565b925060e0609f198201121561066e575f5ffd5b506106776104f4565b60a0880151815260c0880151602082015260e0880151604082015261010088015160608201526106aa61012089016105a5565b608082015261014088015161ffff811681146106c4575f5ffd5b60a08201526106d661016089016105c0565b60c0820152809150509295509295509295565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115610716576107166106e9565b92915050565b6001815b60018411156107575780850481111561073b5761073b6106e9565b600184161561074957908102905b60019390931c928002610720565b935093915050565b5f8261076d57506001610716565b8161077957505f610716565b816001811461078f5760028114610799576107b5565b6001915050610716565b60ff8411156107aa576107aa6106e9565b50506001821b610716565b5060208310610133831016604e8410600b84101617156107d8575081810a610716565b6107e45f19848461071c565b805f19048211156107f7576107f76106e9565b029392505050565b5f61080d60ff84168361075f565b9392505050565b600181811c9082168061082857607f821691505b60208210810361084657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561089357805f5260205f20601f840160051c810160208510156108715750805b601f840160051c820191505b81811015610890575f815560010161087d565b50505b505050565b81516001600160401b038111156108b1576108b16104e0565b6108c5816108bf8454610814565b8461084c565b6020601f8211600181146108f7575f83156108e05750848201515b5f19600385901b1c1916600184901b178455610890565b5f84815260208120601f198516915b828110156109265787850151825560209485019460019092019101610906565b508482101561094357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a05160c05161486b6109d05f395f8181610a9f01528181611286015281816129d901526131db01525f81816109f701528181612d3101528181612ded0152612fa501525f818161081b01528181610ea70152818161199401528181612084015281816132b5015281816135e101526136b1015261486b5ff3fe60806040526004361061041b575f3560e01c806370a082311161021d578063aa5896b311610122578063c8a9dd98116100b7578063d687d0b311610087578063f2fde38b1161006d578063f2fde38b14610c39578063fc0c546a1461075a578063ff7bd03d14610c58575f5ffd5b8063d687d0b314610bd6578063dd62ed3e14610bf5575f5ffd5b8063c8a9dd9814610b71578063ca5eb5e114610b85578063d045a0dc14610ba4578063d424388514610bb7575f5ffd5b8063bb0b6a53116100f2578063bb0b6a5314610b01578063bc70b35414610b2c578063bd815db014610b4b578063c7c7f5b314610b5e575f5ffd5b8063aa5896b314610a7d578063adb724bf14610a91578063b731ea0a14610ac3578063b98bd07014610ae2575f5ffd5b806384b7719a116101b2578063963efcaa116101825780639f68b964116101685780639f68b96414610a38578063a4ebb06d14610a4a578063a9059cbb14610a5e575f5ffd5b8063963efcaa146109e65780639b8bf67b14610a19575f5ffd5b806384b7719a14610984578063857749b0146109a35780638da5cb5b146109b657806395d89b41146109d2575f5ffd5b806373bc8407116101ed57806373bc8407146108f85780637d25a05e1461091757806382413eac146109515780638456cb5914610970575f5ffd5b806370a082311461087b578063715018a6146108af5780637273b23b146108c357806372eef635146108e4575f5ffd5b8063313ce5671161032357806352ae2879116102b85780635a0dfe4d116102885780635e280f111161026e5780635e280f111461080a5780636310decc1461083d5780636fc1b31e1461085c575f5ffd5b80635a0dfe4d146107be5780635c975abb146107f3575f5ffd5b806352ae28791461075a5780635535d4611461076c5780635546db271461078b57806357a14c04146107aa575f5ffd5b80633b6f743b116102f35780633b6f743b146106dc5780633f4ba83a1461070857806349422d791461071c5780634c90b6521461073b575f5ffd5b8063313ce5671461066c5780633400288b1461068d57806335387ddf146106ac57806336c5be92146106c8575f5ffd5b8063134d4f25116103b35780631f5e13341161038357806323b872dd1161036957806323b872dd1461061657806328a8317a146106355780632f356a9d14610658575f5ffd5b80631f5e1334146105ee5780632127be9814610602575f5ffd5b8063134d4f2514610565578063156a0d0f1461057957806317442b70146105b957806318160ddd146105da575f5ffd5b80630d35b415116103ee5780630d35b415146104d75780630fd472c514610505578063111ecdad1461051957806313137d6514610550575f5ffd5b806304a011741461041f57806306fdde0314610446578063095ea7b3146104675780630981fadc14610496575b5f5ffd5b34801561042a575f5ffd5b50610433610c77565b6040519081526020015b60405180910390f35b348015610451575f5ffd5b5061045a610d18565b60405161043d9190613779565b348015610472575f5ffd5b5061048661048136600461379f565b610da8565b604051901515815260200161043d565b3480156104a1575f5ffd5b50600a54760100000000000000000000000000000000000000000000900461ffff165b60405161ffff909116815260200161043d565b3480156104e2575f5ffd5b506104f66104f13660046137d9565b610dc1565b60405161043d9392919061380b565b348015610510575f5ffd5b50610433610e8d565b348015610524575f5ffd5b50600454610538906001600160a01b031681565b6040516001600160a01b03909116815260200161043d565b61056361055e366004613919565b610ea5565b005b348015610570575f5ffd5b506104c4600281565b348015610584575f5ffd5b50604080517f02e49c2c000000000000000000000000000000000000000000000000000000008152600160208201520161043d565b3480156105c4575f5ffd5b506040805160018152600260208201520161043d565b3480156105e5575f5ffd5b50600754610433565b3480156105f9575f5ffd5b506104c4600181565b34801561060d575f5ffd5b50610433610f97565b348015610621575f5ffd5b506104866106303660046139b5565b610fb6565b348015610640575f5ffd5b50600a546201000090046001600160a01b0316610538565b348015610663575f5ffd5b50610563610fdb565b348015610677575f5ffd5b5060125b60405160ff909116815260200161043d565b348015610698575f5ffd5b506105636106a7366004613a0b565b610ffa565b3480156106b7575f5ffd5b50600a54610100900460ff16610486565b3480156106d3575f5ffd5b50610433611010565b3480156106e7575f5ffd5b506106fb6106f6366004613a32565b61106e565b60405161043d9190613a81565b348015610713575f5ffd5b506105636110d2565b348015610727575f5ffd5b50610563610736366004613a98565b6110e2565b348015610746575f5ffd5b50610563610755366004613a98565b6110f6565b348015610765575f5ffd5b5030610538565b348015610777575f5ffd5b5061045a610786366004613ac0565b611107565b348015610796575f5ffd5b506105636107a5366004613a98565b6111a9565b3480156107b5575f5ffd5b50600e54610433565b3480156107c9575f5ffd5b506104866107d8366004613a0b565b63ffffffff919091165f908152600160205260409020541490565b3480156107fe575f5ffd5b50600a5460ff16610486565b348015610815575f5ffd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b348015610848575f5ffd5b50610563610857366004613a98565b6111ba565b348015610867575f5ffd5b50610563610876366004613af1565b6111cb565b348015610886575f5ffd5b50610433610895366004613af1565b6001600160a01b03165f9081526005602052604090205490565b3480156108ba575f5ffd5b50610563611240565b6108d66108d1366004613b1c565b611251565b60405161043d929190613bb4565b3480156108ef575f5ffd5b50600c54610433565b348015610903575f5ffd5b50610563610912366004613c06565b61137f565b348015610922575f5ffd5b50610938610931366004613a0b565b5f92915050565b60405167ffffffffffffffff909116815260200161043d565b34801561095c575f5ffd5b5061048661096b366004613c1f565b611390565b34801561097b575f5ffd5b506105636113a5565b34801561098f575f5ffd5b5061056361099e366004613af1565b6113b5565b3480156109ae575f5ffd5b50600661067b565b3480156109c1575f5ffd5b505f546001600160a01b0316610538565b3480156109dd575f5ffd5b5061045a6113c6565b3480156109f1575f5ffd5b506104337f000000000000000000000000000000000000000000000000000000000000000081565b348015610a24575f5ffd5b50610563610a3336600461379f565b6113d5565b348015610a43575f5ffd5b505f610486565b348015610a55575f5ffd5b50610433611584565b348015610a69575f5ffd5b50610486610a7836600461379f565b611590565b348015610a88575f5ffd5b50600b54610433565b348015610a9c575f5ffd5b507f0000000000000000000000000000000000000000000000000000000000000000610538565b348015610ace575f5ffd5b50600254610538906001600160a01b031681565b348015610aed575f5ffd5b50610563610afc366004613cb8565b61159d565b348015610b0c575f5ffd5b50610433610b1b366004613cf7565b60016020525f908152604090205481565b348015610b37575f5ffd5b5061045a610b46366004613d10565b6115b7565b610563610b59366004613cb8565b611771565b6108d6610b6c366004613d6d565b61190a565b348015610b7c575f5ffd5b50600d54610433565b348015610b90575f5ffd5b50610563610b9f366004613af1565b611954565b610563610bb2366004613919565b6119ee565b348015610bc2575f5ffd5b50610563610bd1366004613af1565b611a36565b348015610be1575f5ffd5b50610563610bf03660046139b5565b611aa4565b348015610c00575f5ffd5b50610433610c0f366004613dcc565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b348015610c44575f5ffd5b50610563610c53366004613af1565b611acd565b348015610c63575f5ffd5b50610486610c72366004613df8565b611b20565b600a545f90610100900460ff168015610c9157505f600b54125b15610c9b57505f90565b600f54600b5413610cab57505f90565b5f610ccb600b54600f54610cbf9190613e3f565b60ff81901d9081011890565b90505f60115f610cd9611b54565b81526020019081526020015f205490505f81600e5411610cf9575f610d07565b81600e54610d079190613e65565b838118908411029092189392505050565b606060088054610d2790613e78565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5390613e78565b8015610d9e5780601f10610d7557610100808354040283529160200191610d9e565b820191905f5260205f20905b815481529060010190602001808311610d8157829003601f168201915b5050505050905090565b5f33610db5818585611b62565b60019150505b92915050565b604080518082019091525f80825260208201526060610df160405180604001604052805f81526020015f81525090565b6040805180820182525f80825267ffffffffffffffff602080840182905284518381529081019094529195509182610e4b565b604080518082019091525f815260606020820152815260200190600190039081610e245790505b5093505f80610e6f604089013560608a0135610e6a60208c018c613cf7565b611b6f565b60408051808201909152918252602082015296989597505050505050565b5f610ea0600f5460ff81901d9081011890565b905090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610f0e576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610f2890610f23908a613cf7565b611bc3565b14610f7f57610f3a6020880188613cf7565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610f05565b610f8e87878787878787611c17565b50505050505050565b5f60115f610fa3611b54565b81526020019081526020015f2054905090565b5f33610fc3858285611d14565b610fce858585611da9565b60019150505b9392505050565b610fe3611e38565b600a54610ff890610100900460ff1615611e7d565b565b611002611e38565b61100c8282611ee3565b5050565b5f600d54600b541261102157505f90565b5f600b54600d546110329190613e3f565b90505f60105f611040611b54565b81526020019081526020015f205490505f81600c5411611060575f610d07565b81600c54610d079190613e65565b604080518082019091525f80825260208201525f61109c60408501356060860135610e6a6020880188613cf7565b9150505f5f6110ab8684611f37565b90925090506110c86110c06020880188613cf7565b83838861206f565b9695505050505050565b6110da611e38565b610ff861214d565b6110ea611e38565b6110f3816121bd565b50565b6110fe611e38565b6110f3816121f2565b600360209081525f92835260408084209091529082529020805461112a90613e78565b80601f016020809104026020016040519081016040528092919081815260200182805461115690613e78565b80156111a15780601f10611178576101008083540402835291602001916111a1565b820191905f5260205f20905b81548152906001019060200180831161118457829003601f168201915b505050505081565b6111b1611e38565b6110f381612281565b6111c2611e38565b6110f3816122b6565b6111d3611e38565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b611248611e38565b610ff85f61234c565b61125961370a565b604080518082019091525f80825260208201526112746123b3565b61127c612439565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d505accf33306040808b0135908935906112c6908b0160208c01613ef0565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1681526001600160a01b0396871660048201529590941660248601526044850192909252606484015260ff16608483015287013560a4820152606087013560c482015260e4015f604051808303815f87803b15801561134d575f5ffd5b505af192505050801561135e575060015b5061136a868685612476565b9150915061137661263c565b94509492505050565b611387611e38565b6110f381612666565b6001600160a01b03811630145b949350505050565b6113ad611e38565b610ff8612723565b6113bd611e38565b6110f38161277e565b606060098054610d2790613e78565b6113dd6123b3565b6113e5612439565b6001600160a01b038216611425576040517f9fabe1c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61142f8261282c565b9050805f0361146a576040517f5e497e6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61147433826128cc565b8060105f611480611b54565b81526020019081526020015f205f82825461149b9190613f10565b9250508190555080600b5f8282546114b39190613f23565b9091555050600a545f906114e6908390760100000000000000000000000000000000000000000000900461ffff16612919565b90505f6114f38284613e65565b604080513381526001600160a01b038816602082015290810185905260608101829052608081018490529091507f91da63319e3faba15bdd148e40a5494a272f2b89981627d54b30e7cbd14577a09060a00160405180910390a1811561156f57600a5461156f906201000090046001600160a01b031683612958565b6115798582612958565b50505061100c61263c565b5f60105f610fa3611b54565b5f33610db5818585611da9565b6115a5611e38565b61100c6115b28284613fee565b612a34565b63ffffffff84165f90815260036020908152604080832061ffff871684529091528120805460609291906115ea90613e78565b80601f016020809104026020016040519081016040528092919081815260200182805461161690613e78565b80156116615780601f1061163857610100808354040283529160200191611661565b820191905f5260205f20905b81548152906001019060200180831161164457829003601f168201915b5050505050905080515f036116af5783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092945061139d9350505050565b5f8390036116be57905061139d565b6002831061173b5761170484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b3592505050565b806117128460028188614112565b60405160200161172493929190614150565b60405160208183030381529060405291505061139d565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610f05929190614197565b5f5b81811015611874573683838381811061178e5761178e6141aa565b90506020028101906117a091906141d7565b90506117d26117b26020830183613cf7565b602083013563ffffffff919091165f908152600160205260409020541490565b6117dc575061186c565b3063d045a0dc60c08301358360a08101356117fb610100830183614213565b61180c610100890160e08a01613af1565b61181a6101208a018a614213565b6040518963ffffffff1660e01b815260040161183c9796959493929190614289565b5f604051808303818588803b158015611853575f5ffd5b505af1158015611865573d5f5f3e3d5ffd5b5050505050505b600101611773565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa1580156118b0573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118d7919081019061430f565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610f059190613779565b61191261370a565b604080518082019091525f808252602082015261192d6123b3565b611935612439565b611940858585612476565b9150915061194c61263c565b935093915050565b61195c611e38565b6040517fca5eb5e10000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b1580156119d5575f5ffd5b505af11580156119e7573d5f5f3e3d5ffd5b5050505050565b333014611a27576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f8e87878787878787610f7f565b611a3e611e38565b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001611235565b611aac611e38565b611ab4612b7a565b611ac86001600160a01b0384168383612bb6565b505050565b611ad5611e38565b6001600160a01b038116611b17576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610f05565b6110f38161234c565b5f602082018035906001908390611b379086613cf7565b63ffffffff16815260208101919091526040015f20541492915050565b5f610ea06201518042614384565b611ac88383836001612c2a565b5f5f611b7a85612d2e565b91508190508381101561194c576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610f05565b63ffffffff81165f9081526001602052604081205480610dbb576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610f05565b611c1f6123b3565b5f611c30611c2d8787612d64565b90565b90505f611c3d8787612d7b565b806020019051810190611c5091906143bc565b9150505f5f5f611c8485611c6c611c678d8d612dc5565b612de7565b8e5f016020810190611c7e9190613cf7565b87612e1c565b925092509250846001600160a01b0316611c9f8d6020013590565b6001600160a01b0316611cb560208f018f613cf7565b604080518f8152602081018890529081018690526060810185905263ffffffff91909116907fd16209d5584ea02a4fd0b04bb61d08057eef523a6b8f8955aa535f975b6373679060800160405180910390a45050505050610f8e61263c565b6001600160a01b038381165f908152600660209081526040808320938616835292905220545f19811015611da35781811015611d95576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610f05565b611da384848484035f612c2a565b50505050565b6001600160a01b038316611deb576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610f05565b6001600160a01b038216611e2d576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610f05565b611ac8838383612e60565b5f546001600160a01b03163314610ff8576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610f05565b600a8054821515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091161790556040517f907853d23e2ef9a4fce26edec2a088a636887fadf9c80fdc00e4bf13e9bbb93a9061123590831515815260200190565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f611f928560200135611f4c86612f9f565b611f5960a0890189614213565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612fca92505050565b90935090505f81611fa4576001611fa7565b60025b9050611fc7611fb96020880188613cf7565b82610b4660808a018a614213565b6004549093506001600160a01b03161561206657600480546040517f043a78eb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163043a78eb916120259188918891016143e0565b602060405180830381865afa158015612040573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120649190614404565b505b50509250929050565b604080518082019091525f80825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff1681526020016120d189611bc3565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b815260040161210692919061441f565b6040805180830381865afa158015612120573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061214491906144e4565b95945050505050565b612155612b7a565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600c8190556040518181527fccb31564499732bd47578f4ea8ddfc766ba24d78f139a1e3233f0a28bf9d138c90602001611235565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81111561224c576040517f400cc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d8190556040518181527f031173ddaf99a1bb237b541d778002d21ff01d4d2363132deda07f67ab97b6f290602001611235565b600e8190556040518181527f8f8d6d555d7c47768fe3daa91adf38b664b676133b63288491adb0422730697a90602001611235565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612310576040517f400cc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612319815f0390565b600f556040518181527fa4cc26688b9b71e575ec9368ea145eeb80b6d7f2107c7d2f3a2450a8c49cbf9890602001611235565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c1561240c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b9061305c565b600a5460ff1615610ff8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61247e61370a565b604080518082019091525f808252602082015261249e60a0860186614213565b90506020146124d9576040517ffe9e4f4400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208501356001600160a01b03811661251e576040517f9fabe1c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61252c60a0880188614213565b81019061253991906144fe565b90505f8061255d8360408b013560608c013561255860208e018e613cf7565b613063565b915091505f5f61256d8b84611f37565b909250905061259961258260208d018d613cf7565b8383612593368f90038f018f614519565b8d613284565b975060405180604001604052808581526020018481525096506125bd8b6020013590565b6001600160a01b0316336125d460208e018e613cf7565b8a51604080519182528e3560208301528915158282015260608201899052608082018890525163ffffffff92909216917f031ac60f40cc4c09c7ebd70b93ac8b3b305ac250643d031922c6e3885ef9e8289181900360a00190a4505050505050935093915050565b610ff85f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00612433565b6103e861ffff821611156126a6576040517f0d058af500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000061ffff8416908102919091179091556040519081527ffda307e16a9a5e822864b3947fcb9f4b4e6c23ff58cc37b0a88549915a45d9d790602001611235565b61272b612439565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121a03390565b6001600160a01b0381166127be576040517f9fabe1c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b038416908102919091179091556040519081527fa2b43027058674eb68bf92a2eb43b7784f2b5bb0d61067bb072be7519db2ee5b90602001611235565b5f600d54600b541261283f57505f919050565b600d54600b5461284e8461338a565b6128589190613f23565b136128635781612873565b600b54600d546128739190613e3f565b90505f60105f612881611b54565b81526020019081526020015f20549050600c5482826128a09190613f10565b11156128c65780600c54116128b5575f6128c3565b80600c546128c39190613e65565b91505b50919050565b6001600160a01b03821661290e576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610f05565b61100c825f83612e60565b5f817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7704831182021561294a575f5ffd5b506127109102611388010490565b604080516001600160a01b0384168152602081018390527f70b3b2c767bb81038206fbf7660ba2fb9f947285b03ce03f75863c854fd9d167910160405180910390a16040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015f604051808303815f87803b158015612a1a575f5ffd5b505af1158015612a2c573d5f5f3e3d5ffd5b505050505050565b5f5b8151811015612b0557612a65828281518110612a5457612a546141aa565b602002602001015160400151612b35565b818181518110612a7757612a776141aa565b60200260200101516040015160035f848481518110612a9857612a986141aa565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110612acf57612acf6141aa565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081612afc919061458e565b50600101612a36565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b674816040516112359190614649565b600281015161ffff811660031461100c57816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610f059190613779565b600a5460ff16610ff8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611ac891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506133ec565b6001600160a01b038416612c6c576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610f05565b6001600160a01b038316612cae576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610f05565b6001600160a01b038085165f9081526006602090815260408083209387168352929052208290558015611da357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612d2091815260200190565b60405180910390a350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000612d5a8184614384565b610dbb91906146f5565b5f612d726020828486614112565b610fd49161470c565b6060612d8a8260288186614112565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b5f612dd4602860208486614112565b612ddd91614729565b60c01c9392505050565b5f610dbb7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff84166146f5565b5f5f5f612e2a878786613471565b909350905080612e3a8488613e65565b612e449190613e65565b91508115612e5657612e568783613555565b9450945094915050565b6001600160a01b038316612e8a578060075f828254612e7f9190613f10565b90915550612f139050565b6001600160a01b0383165f9081526005602052604090205481811015612ef5576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810182905260448101839052606401610f05565b6001600160a01b0384165f9081526005602052604090209082900390555b6001600160a01b038216612f2f57600780548290039055612f4d565b6001600160a01b0382165f9081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f9291815260200190565b60405180910390a3505050565b5f610dbb7f000000000000000000000000000000000000000000000000000000000000000083614384565b805160609015158061302b57848460405160200161301792919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b604051602081830303815290604052613052565b84843385604051602001613042949392919061478e565b6040516020818303038152906040525b9150935093915050565b80825d5050565b5f5f613070858585611b6f565b9092509050851561327a575f613084611b54565b600e545f82815260116020526040902054919250906130a4908590613f10565b11156130dc576040517f272873f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81815260116020526040812080548592906130f9908490613f10565b9250508190555082600b5f8282546131119190613e3f565b9091555050600a54610100900460ff1615613162575f600b541215613162576040517fe07ae02200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f54600b5412156131a0576040517f4919827300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f350ebe04000000000000000000000000000000000000000000000000000000008152600481018490523360248201523060448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063350ebe04906064015f604051808303815f87803b158015613224575f5ffd5b505af1158015613236573d5f5f3e3d5ffd5b505060408051338152602081018790527fa29c40f470146657b4fa101cd11258f0bbdf65564aab90da02f5598738fbc69e935001905060405180910390a150611376565b61137633836128cc565b61328c61370a565b5f613299845f01516135a2565b6020850151909150156132b3576132b384602001516135de565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016133038c611bc3565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b815260040161333e92919061441f565b60806040518083038185885af115801561335a573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061337f91906147d0565b979650505050505050565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156133e8576040517f24775e0600000000000000000000000000000000000000000000000000000000815260048101839052602401610f05565b5090565b5f5f60205f8451602086015f885af18061340b576040513d5f823e3d81fd5b50505f513d9150811561342257806001141561342f565b6001600160a01b0384163b155b15611da3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610f05565b5f5f61347c8461282c565b9150811561194c578160105f613490611b54565b81526020019081526020015f205f8282546134ab9190613f10565b9250508190555081600b5f8282546134c39190613f23565b9091555050821561354b57600a54760100000000000000000000000000000000000000000000900461ffff161561354b57600a54613520908390760100000000000000000000000000000000000000000000900461ffff16612919565b905061352c8183613e65565b600a5490925061354b906201000090046001600160a01b031682612958565b61194c8583612958565b6001600160a01b038216613597576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610f05565b61100c5f8383612e60565b5f8134146133e8576040517f9f704120000000000000000000000000000000000000000000000000000000008152346004820152602401610f05565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561363b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061365f919061481a565b90506001600160a01b0381166136a1576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61100c6001600160a01b038216337f0000000000000000000000000000000000000000000000000000000000000000856040516001600160a01b038481166024830152838116604483015260648201839052611da39186918216906323b872dd90608401612be3565b60405180606001604052805f81526020015f67ffffffffffffffff16815260200161374660405180604001604052805f81526020015f81525090565b905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610fd4602083018461374b565b6001600160a01b03811681146110f3575f5ffd5b5f5f604083850312156137b0575f5ffd5b82356137bb8161378b565b946020939093013593505050565b5f60e082840312156128c6575f5ffd5b5f602082840312156137e9575f5ffd5b813567ffffffffffffffff8111156137ff575f5ffd5b61139d848285016137c9565b83518152602080850151908201525f60a0820160a0604084015280855180835260c08501915060c08160051b8601019250602087015f5b828110156138a8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408786030184528151805186526020810151905060406020870152613892604087018261374b565b9550506020938401939190910190600101613842565b505085516060860152505060208401516080840152905061139d565b5f606082840312156128c6575f5ffd5b5f5f83601f8401126138e4575f5ffd5b50813567ffffffffffffffff8111156138fb575f5ffd5b602083019150836020828501011115613912575f5ffd5b9250929050565b5f5f5f5f5f5f5f60e0888a03121561392f575f5ffd5b61393989896138c4565b965060608801359550608088013567ffffffffffffffff81111561395b575f5ffd5b6139678a828b016138d4565b90965094505060a088013561397b8161378b565b925060c088013567ffffffffffffffff811115613996575f5ffd5b6139a28a828b016138d4565b989b979a50959850939692959293505050565b5f5f5f606084860312156139c7575f5ffd5b83356139d28161378b565b925060208401356139e28161378b565b929592945050506040919091013590565b803563ffffffff81168114613a06575f5ffd5b919050565b5f5f60408385031215613a1c575f5ffd5b6137bb836139f3565b80151581146110f3575f5ffd5b5f5f60408385031215613a43575f5ffd5b823567ffffffffffffffff811115613a59575f5ffd5b613a65858286016137c9565b9250506020830135613a7681613a25565b809150509250929050565b815181526020808301519082015260408101610dbb565b5f60208284031215613aa8575f5ffd5b5035919050565b803561ffff81168114613a06575f5ffd5b5f5f60408385031215613ad1575f5ffd5b613ada836139f3565b9150613ae860208401613aaf565b90509250929050565b5f60208284031215613b01575f5ffd5b8135610fd48161378b565b5f604082840312156128c6575f5ffd5b5f5f5f5f848603610100811215613b31575f5ffd5b853567ffffffffffffffff811115613b47575f5ffd5b613b53888289016137c9565b955050613b638760208801613b0c565b935060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082011215613b94575f5ffd5b5060608501915060e0850135613ba98161378b565b939692955090935050565b5f60c0820190508351825267ffffffffffffffff60208501511660208301526040840151613bef604084018280518252602090810151910152565b5082516080830152602083015160a0830152610fd4565b5f60208284031215613c16575f5ffd5b610fd482613aaf565b5f5f5f5f60a08587031215613c32575f5ffd5b613c3c86866138c4565b9350606085013567ffffffffffffffff811115613c57575f5ffd5b613c63878288016138d4565b9094509250506080850135613ba98161378b565b5f5f83601f840112613c87575f5ffd5b50813567ffffffffffffffff811115613c9e575f5ffd5b6020830191508360208260051b8501011115613912575f5ffd5b5f5f60208385031215613cc9575f5ffd5b823567ffffffffffffffff811115613cdf575f5ffd5b613ceb85828601613c77565b90969095509350505050565b5f60208284031215613d07575f5ffd5b610fd4826139f3565b5f5f5f5f60608587031215613d23575f5ffd5b613d2c856139f3565b9350613d3a60208601613aaf565b9250604085013567ffffffffffffffff811115613d55575f5ffd5b613d61878288016138d4565b95989497509550505050565b5f5f5f60808486031215613d7f575f5ffd5b833567ffffffffffffffff811115613d95575f5ffd5b613da1868287016137c9565b935050613db18560208601613b0c565b91506060840135613dc18161378b565b809150509250925092565b5f5f60408385031215613ddd575f5ffd5b8235613de88161378b565b91506020830135613a768161378b565b5f60608284031215613e08575f5ffd5b610fd483836138c4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181035f831280158383131683831282161715613e5e57613e5e613e12565b5092915050565b81810381811115610dbb57610dbb613e12565b600181811c90821680613e8c57607f821691505b6020821081036128c6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215613f00575f5ffd5b813560ff81168114610fd4575f5ffd5b80820180821115610dbb57610dbb613e12565b8082018281125f831280158216821582161715613f4257613f42613e12565b505092915050565b6040516060810167ffffffffffffffff81118282101715613f6d57613f6d613ec3565b60405290565b6040805190810167ffffffffffffffff81118282101715613f6d57613f6d613ec3565b604051601f8201601f1916810167ffffffffffffffff81118282101715613fbf57613fbf613ec3565b604052919050565b5f67ffffffffffffffff821115613fe057613fe0613ec3565b50601f01601f191660200190565b5f67ffffffffffffffff83111561400757614007613ec3565b8260051b61401760208201613f96565b8481529083019060208101903683111561402f575f5ffd5b845b8381101561410857803567ffffffffffffffff81111561404f575f5ffd5b86016060368290031215614061575f5ffd5b614069613f4a565b614072826139f3565b815261408060208301613aaf565b6020820152604082013567ffffffffffffffff81111561409e575f5ffd5b919091019036601f8301126140b1575f5ffd5b81356140c46140bf82613fc7565b613f96565b8181523660208386010111156140d8575f5ffd5b816020850160208301375f6020838301015280604084015250508085525050602083019250602081019050614031565b5095945050505050565b5f5f85851115614120575f5ffd5b8386111561412c575f5ffd5b5050820193919092039150565b5f81518060208401855e5f93019283525090919050565b5f61415b8286614139565b838582375f930192835250909392505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b602081525f61139d60208301848661416e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112614209575f5ffd5b9190910192915050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614246575f5ffd5b83018035915067ffffffffffffffff821115614260575f5ffd5b602001915036819003821315613912575f5ffd5b67ffffffffffffffff811681146110f3575f5ffd5b63ffffffff614297896139f3565b168152602088810135908201525f60408901356142b381614274565b67ffffffffffffffff811660408401525087606083015260e060808301526142df60e08301878961416e565b6001600160a01b03861660a084015282810360c084015261430181858761416e565b9a9950505050505050505050565b5f6020828403121561431f575f5ffd5b815167ffffffffffffffff811115614335575f5ffd5b8201601f81018413614345575f5ffd5b80516143536140bf82613fc7565b818152856020838501011115614367575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f826143b7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f5f604083850312156143cd575f5ffd5b82516020840151909250613a7681613a25565b604081525f6143f2604083018561374b565b8281036020840152612144818561374b565b5f60208284031215614414575f5ffd5b8151610fd481613a25565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a0608084015261445460e084018261374b565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a085015261448f828261374b565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b5f604082840312156144c5575f5ffd5b6144cd613f73565b825181526020928301519281019290925250919050565b5f604082840312156144f4575f5ffd5b610fd483836144b5565b5f6020828403121561450e575f5ffd5b8135610fd481613a25565b5f604082840312801561452a575f5ffd5b50614533613f73565b823581526020928301359281019290925250919050565b601f821115611ac857805f5260205f20601f840160051c8101602085101561456f5750805b601f840160051c820191505b818110156119e7575f815560010161457b565b815167ffffffffffffffff8111156145a8576145a8613ec3565b6145bc816145b68454613e78565b8461454a565b6020601f8211600181146145ee575f83156145d75750848201515b5f19600385901b1c1916600184901b1784556119e7565b5f84815260208120601f198516915b8281101561461d57878501518255602094850194600190920191016145fd565b508482101561463a57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156146e9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815163ffffffff815116865261ffff602082015116602087015260408101519050606060408701526146d3606087018261374b565b955050602093840193919091019060010161466f565b50929695505050505050565b8082028115828204841417610dbb57610dbb613e12565b80356020831015610dbb575f19602084900360031b1b1692915050565b80357fffffffffffffffff0000000000000000000000000000000000000000000000008116906008841015613e5e577fffffffffffffffff000000000000000000000000000000000000000000000000808560080360031b1b82161691505092915050565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f6110c86048830184614139565b5f60808284031280156147e1575f5ffd5b506147ea613f4a565b8251815260208301516147fc81614274565b602082015261480e84604085016144b5565b60408201529392505050565b5f6020828403121561482a575f5ffd5b8151610fd48161378b56fea2646970667358221220c667ec32cafa3b5982b8dc0b0532cb499de0d86faa18350edbc03be34baab45364736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000090337e484b1cb02132fc150d3afa2621473485450000000000000000000000001a44076050125825900e736c501f859c50fe728c00000000000000000000000066ccec236bbce5f1bbd1b2fc0a4014e57a55ad020000000000000000000000000000000000000000000211654585005212800000000000000000000000000000000000000000000000084595161401484a0000000000000000000000000000000000000000000000000211654585005212800000000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000c5201ffe258a95af986e7cd1fcad54f3f63f2c950000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076c7a2d555344700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076c7a2d5553447000000000000000000000000000000000000000000000000000