6 txs
62.7k calls
constructor
constructor(address _link, address _linkNativeFeed, address _coordinator, uint256 _subId)
functions
calculateRequestPrice
viewfunction calculateRequestPrice(uint32 _callbackGasLimit, uint32 _numWords) view returns (uint256)
calculateRequestPriceNative
viewfunction calculateRequestPriceNative(uint32 _callbackGasLimit, uint32 _numWords) view returns (uint256)
checkPaymentMode
purefunction checkPaymentMode(bytes extraArgs, bool isLinkMode) pure
estimateRequestPrice
viewfunction estimateRequestPrice(uint32 _callbackGasLimit, uint32 _numWords, uint256 _requestGasPriceWei) view returns (uint256)
estimateRequestPriceNative
viewfunction estimateRequestPriceNative(uint32 _callbackGasLimit, uint32 _numWords, uint256 _requestGasPriceWei) view returns (uint256)
getConfig
viewfunction getConfig() view returns (int256 fallbackWeiPerUnitLink, uint32 stalenessSeconds, uint32 fulfillmentFlatFeeNativePPM, uint32 fulfillmentFlatFeeLinkDiscountPPM, uint32 wrapperGasOverhead, uint32 coordinatorGasOverheadNative, uint32 coordinatorGasOverheadLink, uint16 coordinatorGasOverheadPerWord, uint8 wrapperNativePremiumPercentage, uint8 wrapperLinkPremiumPercentage, bytes32 keyHash, uint8 maxNumWords)
lastRequestId
viewfunction lastRequestId() view returns (uint256)
link
viewfunction link() view returns (address)
linkNativeFeed
viewfunction linkNativeFeed() view returns (address)
owner
viewfunction owner() view returns (address)
s_callbacks
viewfunction s_callbacks(uint256) view returns (address callbackAddress, uint32 callbackGasLimit, uint64 requestGasPrice)
s_configured
viewfunction s_configured() view returns (bool)
s_disabled
viewfunction s_disabled() view returns (bool)
s_fulfillmentTxSizeBytes
viewfunction s_fulfillmentTxSizeBytes() view returns (uint32)
s_l1FeeCalculationMode
viewfunction s_l1FeeCalculationMode() view returns (uint8)
s_l1FeeCoefficient
viewfunction s_l1FeeCoefficient() view returns (uint8)
s_vrfCoordinator
viewfunction s_vrfCoordinator() view returns (address)
SUBSCRIPTION_ID
viewfunction SUBSCRIPTION_ID() view returns (uint256)
typeAndVersion
purefunction typeAndVersion() pure returns (string)
acceptOwnership
nonpayablefunction acceptOwnership()
disable
nonpayablefunction disable()
enable
nonpayablefunction enable()
onTokenTransfer
nonpayablefunction onTokenTransfer(address _sender, uint256 _amount, bytes _data)
rawFulfillRandomWords
nonpayablefunction rawFulfillRandomWords(uint256 requestId, uint256[] randomWords)
requestRandomWordsInNative
payablefunction requestRandomWordsInNative(uint32 _callbackGasLimit, uint16 _requestConfirmations, uint32 _numWords, bytes extraArgs) payable returns (uint256 requestId)
setConfig
nonpayablefunction setConfig(uint32 _wrapperGasOverhead, uint32 _coordinatorGasOverheadNative, uint32 _coordinatorGasOverheadLink, uint16 _coordinatorGasOverheadPerWord, uint8 _coordinatorNativePremiumPercentage, uint8 _coordinatorLinkPremiumPercentage, bytes32 _keyHash, uint8 _maxNumWords, uint32 _stalenessSeconds, int256 _fallbackWeiPerUnitLink, uint32 _fulfillmentFlatFeeNativePPM, uint32 _fulfillmentFlatFeeLinkDiscountPPM)
setCoordinator
nonpayablefunction setCoordinator(address _vrfCoordinator)
setFulfillmentTxSize
nonpayablefunction setFulfillmentTxSize(uint32 _size)
setL1FeeCalculation
nonpayablefunction setL1FeeCalculation(uint8 mode, uint8 coefficient)
transferOwnership
nonpayablefunction transferOwnership(address to)
withdraw
nonpayablefunction withdraw(address _recipient)
withdrawNative
nonpayablefunction withdrawNative(address _recipient)
events
ConfigSet
event ConfigSet(uint32 wrapperGasOverhead, uint32 coordinatorGasOverheadNative, uint32 coordinatorGasOverheadLink, uint16 coordinatorGasOverheadPerWord, uint8 coordinatorNativePremiumPercentage, uint8 coordinatorLinkPremiumPercentage, bytes32 keyHash, uint8 maxNumWords, uint32 stalenessSeconds, int256 fallbackWeiPerUnitLink, uint32 fulfillmentFlatFeeNativePPM, uint32 fulfillmentFlatFeeLinkDiscountPPM)
CoordinatorSet
event CoordinatorSet(address vrfCoordinator)
Disabled
event Disabled()
Enabled
event Enabled()
FallbackWeiPerUnitLinkUsed
event FallbackWeiPerUnitLinkUsed(uint256 requestId, int256 fallbackWeiPerUnitLink)
FulfillmentTxSizeSet
event FulfillmentTxSizeSet(uint32 size)
L1FeeCalculationSet
event L1FeeCalculationSet(uint8 mode, uint8 coefficient)
NativeWithdrawn
event NativeWithdrawn(address indexed to, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed from, address indexed to)
OwnershipTransferRequested
event OwnershipTransferRequested(address indexed from, address indexed to)
Withdrawn
event Withdrawn(address indexed to, uint256 amount)
WrapperFulfillmentFailed
event WrapperFulfillmentFailed(uint256 indexed requestId, address indexed consumer)
errors
FailedToTransferLink
error FailedToTransferLink()
IncorrectExtraArgsLength
error IncorrectExtraArgsLength(uint16 expectedMinimumLength, uint16 actualLength)
InvalidL1FeeCalculationMode
error InvalidL1FeeCalculationMode(uint8 mode)
InvalidL1FeeCoefficient
error InvalidL1FeeCoefficient(uint8 coefficient)
InvalidPremiumPercentage
error InvalidPremiumPercentage(uint8 premiumPercentage, uint8 max)
LinkAlreadySet
error LinkAlreadySet()
LinkDiscountTooHigh
error LinkDiscountTooHigh(uint32 flatFeeLinkDiscountPPM, uint32 flatFeeNativePPM)
LINKPaymentInRequestRandomWordsInNative
error LINKPaymentInRequestRandomWordsInNative()
NativePaymentInOnTokenTransfer
error NativePaymentInOnTokenTransfer()
OnlyCoordinatorCanFulfill
error OnlyCoordinatorCanFulfill(address have, address want)
OnlyOwnerOrCoordinator
error OnlyOwnerOrCoordinator(address have, address owner, address coordinator)
SubscriptionIdMissing
error SubscriptionIdMissing()
UnsupportedL1FeeCalculationMode
error UnsupportedL1FeeCalculationMode(uint8 mode)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60e06040526006805463ffffffff60401b191669030400000000000000001790556008805461ffff19166164001790553480156200003c57600080fd5b50604051620040d9380380620040d98339810160408190526200005f91620002c5565b83838383813380600081620000bb5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000ee57620000ee81620001fd565b5050506001600160a01b038116620001195760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392831617905584811660a052831660c0526000819003620001635760405163a81c0bef60e01b815260040160405180910390fd5b60025460405163dc311dd360e01b8152600481018390526001600160a01b039091169063dc311dd390602401600060405180830381865afa158015620001ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001d7919081019062000345565b50505060809290925250506008805460ff19166001179055506200046e95505050505050565b336001600160a01b03821603620002575760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620000b2565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0381168114620002c057600080fd5b919050565b60008060008060808587031215620002dc57600080fd5b620002e785620002a8565b9350620002f760208601620002a8565b92506200030760408601620002a8565b6060959095015193969295505050565b80516001600160601b0381168114620002c057600080fd5b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200035e57600080fd5b620003698662000317565b945060206200037a81880162000317565b60408801519095506001600160401b0380821682146200039957600080fd5b819550620003aa60608a01620002a8565b94506080890151915080821115620003c157600080fd5b818901915089601f830112620003d657600080fd5b815181811115620003eb57620003eb6200032f565b8060051b604051601f19603f830116810181811085821117156200041357620004136200032f565b60405291825284820192508381018501918c8311156200043257600080fd5b938501935b828510156200045b576200044b85620002a8565b8452938501939285019262000437565b8096505050505050509295509295909350565b60805160a05160c051613c11620004c8600039600081816103bf015261236101526000818161032b015281816112d3015281816113a20152611d4c01526000818161022c015281816119a10152611f390152613c116000f3fe6080604052600436106101e25760003560e01c806357a8070a11610102578063a4c0ed3611610095578063cdd8d88511610064578063cdd8d885146107cd578063e1cab7451461080b578063f2fde38b1461082b578063fc2a88c31461084b57600080fd5b8063a4c0ed3614610645578063a608a1e114610665578063bf17e55914610698578063c3f909d4146106b857600080fd5b806390bd5c74116100d157806390bd5c74146105d15780639cfc058e146105f05780639eccacf614610603578063a3907d711461063057600080fd5b806357a8070a1461052f57806379ba5097146105715780638da5cb5b146105865780638ea98117146105b157600080fd5b80631fe543e31161017a5780632f622e6b116101495780632f622e6b146103f857806340e3290f1461041857806348baa1c51461044457806351cff8d91461050f57600080fd5b80631fe543e31461037057806327e5c50a146103905780632808e6c8146103b05780632f2770db146103e357600080fd5b806314530741116101b65780631453074114610290578063181f5a77146102b057806318b6f4c8146102fc5780631c4695f41461031c57600080fd5b806226501b146101e7578063030932bb1461021a578063045343aa1461024e57806313c34b7f14610270575b600080fd5b3480156101f357600080fd5b50610207610202366004613109565b610861565b6040519081526020015b60405180910390f35b34801561022657600080fd5b506102077f000000000000000000000000000000000000000000000000000000000000000081565b34801561025a57600080fd5b5061026e610269366004613172565b61099b565b005b34801561027c57600080fd5b5061020761028b36600461324e565b610c57565b34801561029c57600080fd5b5061026e6102ab366004613287565b610d7e565b3480156102bc57600080fd5b50604080518082018252601681527f5652465632506c75735772617070657220312e302e300000000000000000000060208201529051610211919061331e565b34801561030857600080fd5b5061026e610317366004613419565b610dd3565b34801561032857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b34801561037c57600080fd5b5061026e61038b366004613460565b610f4e565b34801561039c57600080fd5b506102076103ab36600461324e565b610fcc565b3480156103bc57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061034b565b3480156103ef57600080fd5b5061026e611100565b34801561040457600080fd5b5061026e610413366004613503565b611173565b34801561042457600080fd5b506008546104329060ff1681565b60405160ff9091168152602001610211565b34801561045057600080fd5b506104ce61045f36600461351e565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000810463ffffffff16907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1683565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845263ffffffff909216602084015267ffffffffffffffff1690820152606001610211565b34801561051b57600080fd5b5061026e61052a366004613503565b61129a565b34801561053b57600080fd5b506002546105619074010000000000000000000000000000000000000000900460ff1681565b6040519015158152602001610211565b34801561057d57600080fd5b5061026e61149b565b34801561059257600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661034b565b3480156105bd57600080fd5b5061026e6105cc366004613503565b611598565b3480156105dd57600080fd5b5060085461043290610100900460ff1681565b6102076105fe366004613580565b611723565b34801561060f57600080fd5b5060025461034b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561063c57600080fd5b5061026e611bcf565b34801561065157600080fd5b5061026e6106603660046135fa565b611c2a565b34801561067157600080fd5b50600254610561907501000000000000000000000000000000000000000000900460ff1681565b3480156106a457600080fd5b5061026e6106b3366004613654565b612198565b3480156106c457600080fd5b50600554600654600354600254604051610211949363ffffffff808216947601000000000000000000000000000000000000000000008084048316957a010000000000000000000000000000000000000000000000000000850484169564010000000086048516956c0100000000000000000000000081048616957001000000000000000000000000000000008204169461ffff740100000000000000000000000000000000000000008304169460ff7e0100000000000000000000000000000000000000000000000000000000000084048116957f01000000000000000000000000000000000000000000000000000000000000009094048116949293919091041690613671565b3480156107d957600080fd5b506006546107f69068010000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610211565b34801561081757600080fd5b50610207610826366004613109565b612211565b34801561083757600080fd5b5061026e610846366004613503565b61232f565b34801561085757600080fd5b5061020760045481565b60025460009074010000000000000000000000000000000000000000900460ff166108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f77726170706572206973206e6f7420636f6e666967757265640000000000000060448201526064015b60405180910390fd5b6002547501000000000000000000000000000000000000000000900460ff1615610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f777261707065722069732064697361626c65640000000000000000000000000060448201526064016108e4565b600061097d612343565b5090506109928563ffffffff16858584612499565b95945050505050565b6109a36125e8565b8163ffffffff168163ffffffff1611156109f9576040517f2780dcb200000000000000000000000000000000000000000000000000000000815263ffffffff8083166004830152831660248201526044016108e4565b609b60ff89161115610a43576040517f3acc511a00000000000000000000000000000000000000000000000000000000815260ff89166004820152609b60248201526044016108e4565b609b60ff88161115610a8d576040517f3acc511a00000000000000000000000000000000000000000000000000000000815260ff88166004820152609b60248201526044016108e4565b8b600660046101000a81548163ffffffff021916908363ffffffff1602179055508a6006600c6101000a81548163ffffffff021916908363ffffffff16021790555089600660106101000a81548163ffffffff021916908363ffffffff16021790555088600660146101000a81548161ffff021916908361ffff160217905550876006601e6101000a81548160ff021916908360ff160217905550866006601f6101000a81548160ff021916908360ff1602179055508560038190555084600260166101000a81548160ff021916908360ff1602179055506001600260146101000a81548160ff02191690831515021790555083600660006101000a81548163ffffffff021916908363ffffffff1602179055508260058190555081600660166101000a81548163ffffffff021916908363ffffffff160217905550806006601a6101000a81548163ffffffff021916908363ffffffff1602179055507f8aee1a8c131eaf1a5bd30594737b6926a7c5cb29281a97639f6ac93947c8995e8c8c8c8c8c8c8c8c8c8c8c6006601a9054906101000a900463ffffffff16604051610c419c9b9a999897969594939291906136f2565b60405180910390a1505050505050505050505050565b60025460009074010000000000000000000000000000000000000000900460ff16610cde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f77726170706572206973206e6f7420636f6e666967757265640000000000000060448201526064016108e4565b6002547501000000000000000000000000000000000000000000900460ff1615610d64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f777261707065722069732064697361626c65640000000000000000000000000060448201526064016108e4565b610d758363ffffffff16833a61266b565b90505b92915050565b610d866125e8565b60ff8216610dc5576040517f1d6b700000000000000000000000000000000000000000000000000000000000815260ff831660048201526024016108e4565b610dcf828261276b565b5050565b8151600003610e135780610dcf576040517f6b81746e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160241115610e645781516040517f51200dce0000000000000000000000000000000000000000000000000000000081526108e49160249160040161ffff92831681529116602082015260400190565b600082602381518110610e7957610e7961376f565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f0100000000000000000000000000000000000000000000000000000000000000149050808015610ecf5750815b15610f06576040517f6048aa6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80158015610f12575081155b15610f49576040517f6b81746e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610fc1576002546040517f1cf993f400000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016108e4565b610f49838383612876565b60025460009074010000000000000000000000000000000000000000900460ff16611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f77726170706572206973206e6f7420636f6e666967757265640000000000000060448201526064016108e4565b6002547501000000000000000000000000000000000000000000900460ff16156110d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f777261707065722069732064697361626c65640000000000000000000000000060448201526064016108e4565b60006110e3612343565b5090506110f88463ffffffff16843a84612499565b949350505050565b6111086125e8565b600280547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556040517f75884cdadc4a89e8b545db800057f06ec7f5338a08183c7ba515f2bfdd9fe1e190600090a1565b61117b6125e8565b604051479060009073ffffffffffffffffffffffffffffffffffffffff84169083908381818185875af1925050503d80600081146111d5576040519150601f19603f3d011682016040523d82523d6000602084013e6111da565b606091505b5050905080611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6661696c656420746f207769746864726177206e61746976650000000000000060448201526064016108e4565b8273ffffffffffffffffffffffffffffffffffffffff167fc303ca808382409472acbbf899c316cf439f409f6584aae22df86dfa3c9ed5048360405161128d91815260200190565b60405180910390a2505050565b6112a26125e8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611353919061379e565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af11580156113ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141191906137b7565b611447576040517f7c07fc4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58260405161148f91815260200190565b60405180910390a25050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016108e4565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60005473ffffffffffffffffffffffffffffffffffffffff1633148015906115d8575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561165c57336115fd60005473ffffffffffffffffffffffffffffffffffffffff1690565b6002546040517f061db9c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529190911660448201526064016108e4565b73ffffffffffffffffffffffffffffffffffffffff81166116a9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be6906020015b60405180910390a150565b60025460009074010000000000000000000000000000000000000000900460ff166117aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f77726170706572206973206e6f7420636f6e666967757265640000000000000060448201526064016108e4565b6002547501000000000000000000000000000000000000000000900460ff1615611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f777261707065722069732064697361626c65640000000000000000000000000060448201526064016108e4565b61186f83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250610dd3915050565b600061187a87612a5c565b9050600061188f8863ffffffff16873a61266b565b9050803410156118fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f66656520746f6f206c6f7700000000000000000000000000000000000000000060448201526064016108e4565b600254760100000000000000000000000000000000000000000000900460ff1663ffffffff8716111561198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6e756d576f72647320746f6f206869676800000000000000000000000000000060448201526064016108e4565b60006040518060c0016040528060035481526020017f000000000000000000000000000000000000000000000000000000000000000081526020018961ffff168152602001600660049054906101000a900463ffffffff16858c6119ee9190613803565b6119f89190613803565b63ffffffff1681526020018863ffffffff16815260200187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506002546040517f9b1c385e00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690639b1c385e90611a9e908490600401613827565b6020604051808303816000875af1158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae1919061379e565b6040805160608101825233815263ffffffff808d16602080840191825267ffffffffffffffff3a81168587019081526000888152600790935295909120935184549251955190911678010000000000000000000000000000000000000000000000000277ffffffffffffffffffffffffffffffffffffffffffffffff9590931674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090921673ffffffffffffffffffffffffffffffffffffffff91909116171792909216919091179055935050505095945050505050565b611bd76125e8565b600280547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1690556040517fc0f961051f97b04c496472d11cb6170d844e4b2c9dfd3b602a4fa0139712d48490600090a1565b60025474010000000000000000000000000000000000000000900460ff16611cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f77726170706572206973206e6f7420636f6e666967757265640000000000000060448201526064016108e4565b6002547501000000000000000000000000000000000000000000900460ff1615611d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f777261707065722069732064697361626c65640000000000000000000000000060448201526064016108e4565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f6f6e6c792063616c6c61626c652066726f6d204c494e4b00000000000000000060448201526064016108e4565b6000808080611de485870187613884565b9350935093509350611df7816001610dd3565b6000611e0285612a5c565b9050600080611e0f612343565b915091506000611e278863ffffffff16873a86612499565b9050808b1015611e93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f66656520746f6f206c6f7700000000000000000000000000000000000000000060448201526064016108e4565b600254760100000000000000000000000000000000000000000000900460ff1663ffffffff87161115611f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6e756d576f72647320746f6f206869676800000000000000000000000000000060448201526064016108e4565b60006040518060c0016040528060035481526020017f000000000000000000000000000000000000000000000000000000000000000081526020018961ffff168152602001600660049054906101000a900463ffffffff16878c611f869190613803565b611f909190613803565b63ffffffff908116825289166020820152604090810188905260025490517f9b1c385e00000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff90911690639b1c385e90612004908590600401613827565b6020604051808303816000875af1158015612023573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612047919061379e565b905060405180606001604052808f73ffffffffffffffffffffffffffffffffffffffff1681526020018b63ffffffff1681526020013a67ffffffffffffffff168152506007600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050806004819055508315612188576005546040805183815260208101929092527f6ca648a381f22ead7e37773d934e64885dcf861fbfbb26c40354cbf0c4662d1a910160405180910390a15b5050505050505050505050505050565b6121a06125e8565b600680547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000063ffffffff8416908102919091179091556040519081527f697b48b8b76cebb09a54ec4ff810e8a181c96f65395d51c744db09c115d1d5d090602001611718565b60025460009074010000000000000000000000000000000000000000900460ff16612298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f77726170706572206973206e6f7420636f6e666967757265640000000000000060448201526064016108e4565b6002547501000000000000000000000000000000000000000000900460ff161561231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f777261707065722069732064697361626c65640000000000000000000000000060448201526064016108e4565b6110f88463ffffffff16848461266b565b6123376125e8565b61234081612a74565b50565b6000806000600660009054906101000a900463ffffffff16905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156123ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ee9190613911565b50919650909250505063ffffffff82161580159061241a57506124118142613961565b8263ffffffff16105b925082156124285760055493505b6000841215612493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c6964204c494e4b207765692070726963650000000000000000000060448201526064016108e4565b50509091565b60065460009081906124b990640100000000900463ffffffff1685613974565b905060006124c5612b69565b6124d0876000612b8f565b6124e09063ffffffff168961398b565b6124ea9087613974565b6124f4919061398b565b6006549091506000906125479063ffffffff7a010000000000000000000000000000000000000000000000000000820481169176010000000000000000000000000000000000000000000090041661399e565b61255c9063ffffffff1664e8d4a51000613974565b600654606490612592907f0100000000000000000000000000000000000000000000000000000000000000900460ff16826139bb565b61259f9060ff1685613974565b6125a99190613a03565b6125b3919061398b565b9050846125c0828561398b565b6125d290670de0b6b3a7640000613974565b6125dc9190613a03565b98975050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016108e4565b565b600654600090819061268b90640100000000900463ffffffff1684613974565b90506000612697612b69565b6126a2866001612b8f565b6126b29063ffffffff168861398b565b6126bc9086613974565b6126c6919061398b565b6006549091506000906126fe90760100000000000000000000000000000000000000000000900463ffffffff1664e8d4a51000613974565b600654606490612733907e01000000000000000000000000000000000000000000000000000000000000900460ff16826139bb565b6127409060ff1685613974565b61274a9190613a03565b612754919061398b565b9050612760818461398b565b979650505050505050565b60038260ff16106127ad576040517f1c300f0000000000000000000000000000000000000000000000000000000000815260ff831660048201526024016108e4565b60ff811615806127c0575060648160ff16115b156127fc576040517f1a8a06a000000000000000000000000000000000000000000000000000000000815260ff821660048201526024016108e4565b6008805460ff8481167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092168217610100918516918202179092556040805191825260208201929092527f8e63dc2f2e669ce73bebd2580bb9dd9a5d17fa2d046ac02057d8349fc0b0c2f3910160405180910390a15050565b60008381526007602081815260408084208151606081018352815473ffffffffffffffffffffffffffffffffffffffff808216835274010000000000000000000000000000000000000000820463ffffffff1683870152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169382019390935288865293909252929055805190918116612971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f72657175657374206e6f7420666f756e6400000000000000000000000000000060448201526064016108e4565b600080631fe543e360e01b87878760405160240161299193929190613a17565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000612a07856020015163ffffffff168584612c3a565b905080612a525760405173ffffffffffffffffffffffffffffffffffffffff85169089907fc551b83c151f2d1c7eeb938ac59008e0409f1c1dc1e2f112449d4d79b458902290600090a35b5050505050505050565b6000612a69603f83613a70565b610d78906001613803565b3373ffffffffffffffffffffffffffffffffffffffff821603612af3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016108e4565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600654600090612b8a9068010000000000000000900463ffffffff16612c86565b905090565b60008115612bea57600654612bc09074010000000000000000000000000000000000000000900461ffff1684613a93565b600654612be391906c01000000000000000000000000900463ffffffff16613803565b9050610d78565b600654612c139074010000000000000000000000000000000000000000900461ffff1684613a93565b600654612be39190700100000000000000000000000000000000900463ffffffff16613803565b60005a611388811015612c4c57600080fd5b611388810390508460408204820311612c6457600080fd5b50823b612c7057600080fd5b60008083516020850160008789f1949350505050565b60085460009060ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101612cf1576064612ccb612cc660478661398b565b612dd8565b600854612ce09190610100900460ff16613974565b612cea9190613a03565b9392505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff821601612da157606473420000000000000000000000000000000000000f63f1c7a58b612d4260478761398b565b6040518263ffffffff1660e01b8152600401612d6091815260200190565b602060405180830381865afa158015612d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ccb919061379e565b6040517f1c300f0000000000000000000000000000000000000000000000000000000000815260ff821660048201526024016108e4565b600080612de660448461398b565b612df1906010613974565b9050600073420000000000000000000000000000000000000f73ffffffffffffffffffffffffffffffffffffffff1663519b4bd36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e78919061379e565b73420000000000000000000000000000000000000f73ffffffffffffffffffffffffffffffffffffffff1663c59859186040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efb9190613abb565b612f06906010613a93565b63ffffffff16612f169190613974565b9050600073420000000000000000000000000000000000000f73ffffffffffffffffffffffffffffffffffffffff1663f82061406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9d919061379e565b73420000000000000000000000000000000000000f73ffffffffffffffffffffffffffffffffffffffff166368d5dca66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130209190613abb565b63ffffffff166130309190613974565b9050600061303e828461398b565b6130489085613974565b905073420000000000000000000000000000000000000f73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cd919061379e565b6130d890600a613bf8565b6130e3906010613974565b6130ed9082613a03565b9695505050505050565b63ffffffff8116811461234057600080fd5b60008060006060848603121561311e57600080fd5b8335613129816130f7565b92506020840135613139816130f7565b929592945050506040919091013590565b803561ffff8116811461315c57600080fd5b919050565b803560ff8116811461315c57600080fd5b6000806000806000806000806000806000806101808d8f03121561319557600080fd5b8c356131a0816130f7565b9b5060208d01356131b0816130f7565b9a5060408d01356131c0816130f7565b99506131ce60608e0161314a565b98506131dc60808e01613161565b97506131ea60a08e01613161565b965060c08d013595506131ff60e08e01613161565b94506101008d0135613210816130f7565b93506101208d013592506101408d0135613229816130f7565b91506101608d013561323a816130f7565b809150509295989b509295989b509295989b565b6000806040838503121561326157600080fd5b823561326c816130f7565b9150602083013561327c816130f7565b809150509250929050565b6000806040838503121561329a57600080fd5b6132a383613161565b91506132b160208401613161565b90509250929050565b6000815180845260005b818110156132e0576020818501810151868301820152016132c4565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610d7560208301846132ba565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261337157600080fd5b813567ffffffffffffffff8082111561338c5761338c613331565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156133d2576133d2613331565b816040528381528660208588010111156133eb57600080fd5b836020870160208301376000602085830101528094505050505092915050565b801515811461234057600080fd5b6000806040838503121561342c57600080fd5b823567ffffffffffffffff81111561344357600080fd5b61344f85828601613360565b925050602083013561327c8161340b565b60008060006040848603121561347557600080fd5b83359250602084013567ffffffffffffffff8082111561349457600080fd5b818601915086601f8301126134a857600080fd5b8135818111156134b757600080fd5b8760208260051b85010111156134cc57600080fd5b6020830194508093505050509250925092565b803573ffffffffffffffffffffffffffffffffffffffff8116811461315c57600080fd5b60006020828403121561351557600080fd5b610d75826134df565b60006020828403121561353057600080fd5b5035919050565b60008083601f84011261354957600080fd5b50813567ffffffffffffffff81111561356157600080fd5b60208301915083602082850101111561357957600080fd5b9250929050565b60008060008060006080868803121561359857600080fd5b85356135a3816130f7565b94506135b16020870161314a565b935060408601356135c1816130f7565b9250606086013567ffffffffffffffff8111156135dd57600080fd5b6135e988828901613537565b969995985093965092949392505050565b6000806000806060858703121561361057600080fd5b613619856134df565b935060208501359250604085013567ffffffffffffffff81111561363c57600080fd5b61364887828801613537565b95989497509550505050565b60006020828403121561366657600080fd5b8135612cea816130f7565b8c815263ffffffff8c811660208301528b811660408301528a81166060830152898116608083015288811660a0830152871660c082015261ffff861660e082015260ff85811661010083015284166101208201526101808101836101408301526136e161016083018460ff169052565b9d9c50505050505050505050505050565b63ffffffff8d811682528c811660208301528b8116604083015261ffff8b16606083015260ff8a8116608084015289811660a084015260c08301899052871660e0830152851661010082015261018081018461012083015261375d61014083018563ffffffff169052565b63ffffffff83166101608301526136e1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156137b057600080fd5b5051919050565b6000602082840312156137c957600080fd5b8151612cea8161340b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff818116838216019080821115613820576138206137d4565b5092915050565b60208152815160208201526020820151604082015261ffff60408301511660608201526000606083015163ffffffff80821660808501528060808601511660a0850152505060a083015160c0808401526110f860e08401826132ba565b6000806000806080858703121561389a57600080fd5b84356138a5816130f7565b93506138b36020860161314a565b925060408501356138c3816130f7565b9150606085013567ffffffffffffffff8111156138df57600080fd5b6138eb87828801613360565b91505092959194509250565b805169ffffffffffffffffffff8116811461315c57600080fd5b600080600080600060a0868803121561392957600080fd5b613932866138f7565b9450602086015193506040860151925060608601519150613955608087016138f7565b90509295509295909350565b81810381811115610d7857610d786137d4565b8082028115828204841417610d7857610d786137d4565b80820180821115610d7857610d786137d4565b63ffffffff828116828216039080821115613820576138206137d4565b60ff8181168382160190811115610d7857610d786137d4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613a1257613a126139d4565b500490565b8381526040602082015281604082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613a5657600080fd5b8260051b8085606085013791909101606001949350505050565b600063ffffffff80841680613a8757613a876139d4565b92169190910492915050565b63ffffffff818116838216028082169190828114613ab357613ab36137d4565b505092915050565b600060208284031215613acd57600080fd5b8151612cea816130f7565b600181815b80851115613b3157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613b1757613b176137d4565b80851615613b2457918102915b93841c9390800290613add565b509250929050565b600082613b4857506001610d78565b81613b5557506000610d78565b8160018114613b6b5760028114613b7557613b91565b6001915050610d78565b60ff841115613b8657613b866137d4565b50506001821b610d78565b5060208310610133831016604e8410600b8410161715613bb4575081810a610d78565b613bbe8383613ad8565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613bf057613bf06137d4565b029392505050565b6000610d758383613b3956fea164736f6c6343000813000a00000000000000000000000088fb150bdc53a65fe94dea0c9ba0a6daf8c6e196000000000000000000000000c5e65227fe3385b88468f9a01600017cdc9f3a12000000000000000000000000d5d517abe5cf79b7e95ec98db0f0277788aff63484b1920d5b0ea2e885b00cd159309717a2742d9c911b9380537dfe65f0f808c9