7.5k txs
14.8k calls
constructor
constructor(address _endpoint, address _owner, uint32 _eid, uint16 _maxFillsPerSettle)
functions
allowInitializePath
viewfunction allowInitializePath(tuple origin) view returns (bool)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
ENDPOINT_ID
viewfunction ENDPOINT_ID() view returns (uint32)
endpoint
viewfunction endpoint() view returns (address)
getLockedBalances
viewfunction getLockedBalances(address offerer, address token) view returns (uint256)
getUnlockedBalances
viewfunction getUnlockedBalances(address offerer, address token) view returns (uint256)
hash
purefunction hash(tuple order) pure returns (bytes32)
isAllowedHook
viewfunction isAllowedHook(address) view returns (bool)
isAllowedSolver
viewfunction isAllowedSolver(address) view returns (bool)
isComposeMsgSender
viewfunction isComposeMsgSender(tuple, bytes, address _sender) view returns (bool)
isSupportedChain
viewfunction isSupportedChain(uint32) view returns (bool)
MAX_FILLS_PER_SETTLE
viewfunction MAX_FILLS_PER_SETTLE() view returns (uint16)
nextNonce
viewfunction nextNonce(uint32, bytes32) view returns (uint64 nonce)
oAppVersion
purefunction oAppVersion() pure returns (uint64 senderVersion, uint64 receiverVersion)
orders
viewfunction orders(bytes32) view returns (uint128 inputAmount, uint128 outputAmount, address inputToken, address outputToken, uint32 startTime, uint32 endTime, uint32 srcEid, uint32 dstEid, address offerer, address recipient)
orderStatus
viewfunction orderStatus(bytes32) view returns (uint8)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
peers
viewfunction peers(uint32 eid) view returns (bytes32 peer)
quote
viewfunction quote(uint32 _dstEid, uint8 _msgType, bytes _options, bool _payInLzToken, uint32 _srcEid, address _filler) view returns (uint256 fee)
srcEidToFillerFills
viewfunction srcEidToFillerFills(uint32, address, uint256) view returns (bytes32)
addAllowedHook
nonpayablefunction addAllowedHook(address hook)
addAllowedSolver
nonpayablefunction addAllowedSolver(address solver)
addSupportedChain
nonpayablefunction addSupportedChain(uint32 eid)
addSupportedChains
nonpayablefunction addSupportedChains(uint32[] eids) returns (bool[] results)
cancel
payablefunction cancel(bytes32 orderId, tuple orderToCancel, bytes extraOptions) payable
cancel
nonpayablefunction cancel(bytes32 orderId)
deposit
nonpayablefunction deposit(tuple order, bytes signature, tuple hook)
deposit
nonpayablefunction deposit(tuple order, bytes signature)
depositNative
payablefunction depositNative(tuple order) payable
emergencyCancel
nonpayablefunction emergencyCancel(bytes32 orderId, address recipient)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, uint256 amount, address user, bool isLocked, address recipient)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, uint256 amount)
fill
payablefunction fill(tuple order, tuple hook) payable
fill
payablefunction fill(tuple order) payable
lzReceive
payablefunction lzReceive(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
pause
nonpayablefunction pause()
removeAllowedHook
nonpayablefunction removeAllowedHook(address hook)
removeAllowedSolver
nonpayablefunction removeAllowedSolver(address solver)
removeSupportedChain
nonpayablefunction removeSupportedChain(uint32 eid)
renounceOwnership
nonpayablefunction renounceOwnership()
setDelegate
nonpayablefunction setDelegate(address _delegate)
setPeer
nonpayablefunction setPeer(uint32 _eid, bytes32 _peer)
settle
payablefunction settle(uint32 srcEid, address filler, bytes extraOptions) payable
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
withdraw
nonpayablefunction withdraw(address token, uint256 amount)
events
Cancel
event Cancel(bytes32 indexed orderId)
CancelSent
event CancelSent(bytes32 indexed orderId, bytes32 guid, uint64 nonce, uint256 fee)
ChainRemoved
event ChainRemoved(uint32 indexed eid)
ChainSupported
event ChainSupported(uint32 indexed eid)
Deposit
event Deposit(bytes32 indexed orderId, (uint128 inputAmount, uint128 outputAmount, address inputToken, address outputToken, uint32 startTime, uint32 endTime, uint32 srcEid, uint32 dstEid, address offerer, address recipient) order)
DstHookExecuted
event DstHookExecuted(bytes32 indexed orderId, address indexed preferredToken, uint256 amountReceived)
Fill
event Fill(bytes32 indexed orderId, (uint128 inputAmount, uint128 outputAmount, address inputToken, address outputToken, uint32 startTime, uint32 endTime, uint32 srcEid, uint32 dstEid, address offerer, address recipient) order)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PeerSet
event PeerSet(uint32 eid, bytes32 peer)
Settle
event Settle(bytes32 indexed orderId)
settlementFailed
event settlementFailed(bytes32 indexed orderId, uint32 expectedEid, uint32 submittedEid, string reason)
SettleSent
event SettleSent(uint32 indexed srcEid, address indexed filler, bytes payload, bytes32 guid, uint64 nonce, uint256 fee)
SrcHookExecuted
event SrcHookExecuted(bytes32 indexed orderId, address indexed preferredToken, uint256 amountReceived)
Unpaused
event Unpaused(address account)
Withdraw
event Withdraw(address indexed holder, address indexed token, uint256 amount)
errors
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
InvalidDelegate
error InvalidDelegate()
InvalidEndpointCall
error InvalidEndpointCall()
LzTokenUnavailable
error LzTokenUnavailable()
NoPeer
error NoPeer(uint32 eid)
NotEnoughNative
error NotEnoughNative(uint256 msgValue)
OnlyEndpoint
error OnlyEndpoint(address addr)
OnlyPeer
error OnlyPeer(uint32 eid, bytes32 sender)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x61018080604052346102a6576000608082615ca9803803809161002282856102ab565b8339810103126102a357610035826102e4565b91610042602082016102e4565b604082015163ffffffff8116928382036102a157606001519161ffff831683036102a1576001600160a01b0316801561028d5784546001600160a01b0319811682178655604051969082906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08880a36001600160a01b0316608081905290813b1561028957602487878094829463ca5eb5e160e01b845260048401525af194851561027e5760409561026a575b5060016002553060a0524660c05260a085519461011587876102ab565b60048652602086019563416f726960e01b875287519661013589896102ab565b60058852602088019164302e332e3160d81b835251902091965190208160e05280610100528751917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352602083015287820152466060820152306080820152206101205261014052610160528152600660205220600160ff198254161790556040516159b090816102f9823960805181818161054001528181610fb801528181611cfd01528181612f9c015281816139050152615013015260a05181505060c05181505060e05181505061010051815050610120518150506101405181818161074d0152818161098d01528181610dfd015281816110cc015281816115390152818161170b015281816118be01528181611ca90152611ef30152610160518181816108ce01528181610c910152612f0a0152f35b84610277919592956102ab565b92386100f8565b6040513d86823e3d90fd5b8580fd5b631e4fbdf760e01b85526004859052602485fd5b845b80fd5b600080fd5b601f909101601f19168101906001600160401b038211908210176102ce57604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036102a65756fe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806305ef94ba1461030b5780630c89a13d1461030657806313137d651461030157806317442b70146102fc5780631c0166aa146102f75780631e2c273e146102f25780632c85455b146102ed5780632cee9acd146102e85780632d7c615a146102e35780632dff692d146102de5780633400288b146102d9578063344ba6fd146102d45780633f4ba83a146102cf57806344ae20c3146102ca57806350964586146102c5578063555c3898146102c0578063595490c8146102bb57806359f429a4146102b65780635c975abb146102b15780635e280f11146102ac5780636b624fdb146102a7578063715018a6146102a25780637ce5e33e1461029d5780637d25a05e146102985780637de637341461029357806382413eac1461028e5780638456cb591461028957806384b0196e146102845780638da5cb5b1461027f57806395ccea671461027a578063983f7fd114610275578063996628a0146102705780639c3f1e901461026b578063a9a683ba14610266578063b410f12214610261578063b8f480c61461025c578063bb0b6a5314610257578063c15c4b3714610252578063c4d252f51461024d578063ca5eb5e114610248578063cd77488714610243578063e86dfbbf1461023e578063e898841f14610239578063edb25d8114610234578063f2fde38b1461022f578063f3fef3a31461022a5763ff7bd03d0361000e576121df565b6120f5565b612068565b61201f565b611e56565b611e0e565b611d80565b611cd3565b611b4e565b611ae6565b611aab565b611a3f565b6119d6565b611854565b61175d565b611647565b6114b0565b6113fd565b6113d4565b611333565b611298565b61123a565b6111f8565b6111d1565b611086565b61102d565b610fe7565b610fa2565b610f7f565b610f3f565b610ef6565b610d2e565b610cb5565b610c76565b610c0d565b610bcb565b610b5c565b610b24565b6109bb565b610970565b6107e5565b61079f565b61061d565b6105d7565b6104d4565b61040a565b61035b565b6001600160a01b0381160361032157565b600080fd5b359061033182610310565b565b60409060031901126103215760043561034b81610310565b9060243561035881610310565b90565b3461032157602061036b36610333565b6001600160a01b039182166000908152600484526040808220929093168152602091909152206001600160801b03905416604051908152f35b63ffffffff81160361032157565b3590610331826103a4565b6001600160a01b0316600090815260046020526040902090565b634e487b7160e01b600052603260045260246000fd5b80548210156104055760005260206000200190600090565b6103d7565b3461032157606036600319011261032157600435610427816103a4565b61046460243561043681610310565b63ffffffff6044359316600052600a60205260406000209060018060a01b0316600052602052604060002090565b8054821015610321576104929161047a916103ed565b90549060031b1c604051918291829190602083019252565b0390f35b606090600319011261032157600490565b9181601f84011215610321578235916001600160401b038311610321576020838186019501011161032157565b60e0366003190112610321576104e936610496565b6064356084356001600160401b0381116103215761050b9036906004016104a7565b60a4929192359061051b82610310565b60c4356001600160401b0381116103215761053a9036906004016104a7565b949093337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036105c257863596610579886103a4565b610582886130fc565b97602082013580990361059a57506100199750613130565b63ffffffff816105aa8b936103a4565b63309afaf360e21b6000521660045260245260446000fd5b6391ac5e4f60e01b6000523360045260246000fd5b3461032157600036600319011261032157604080516001815260026020820152f35b61014090600319011261032157600490565b61014090602319011261032157602490565b61014036600319011261032157610795610636366105f9565b61063e613210565b610646613230565b604081019061068161067c61065a84612230565b6001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b61223a565b6106a361069c61069083612297565b6001600160801b031690565b34146122a1565b6106c96106c26106b66101008401612230565b6001600160a01b031690565b33146122e7565b6107836106d582612c60565b926107066106f76106f0866000526007602052604060002090565b5460ff1690565b61070081610b15565b15612342565b6107366107316106f061071b60e08701612226565b63ffffffff166000526006602052604060002090565b612385565b61077561074560c08501612226565b63ffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116146123d1565b61077e8361344d565b612230565b61078f61069083612297565b90613551565b6100196001600255565b34610321576020366003190112610321576004356107bc81610310565b6107c46136a2565b6001600160a01b03166000908152600960205260409020805460ff19169055005b6060366003190112610321576004356107fd816103a4565b60243561080981610310565b604435906001600160401b0382116103215763ffffffff7fd054cd999785d4c556d1f55b27cc59caba458cd5663063989d47725b970092329161095c6108566109279536906004016104a7565b610861969196613210565b610869613230565b33600052600960205261088360ff6040600020541661240e565b6109006108bb856108a48b63ffffffff16600052600a602052604060002090565b9060018060a01b0316600052602052604060002090565b8561ffff82546108cc81151561244b565b7f000000000000000000000000000000000000000000000000000000000000000082168082101561096957505b16916136e2565b9661092061090c6124fe565b913483526000602084015233933691612547565b888a613888565b805190604061094060208301516001600160401b031690565b910151519160405195869560018060a01b03169916978561257e565b0390a36100196001600255565b90506108f9565b3461032157600036600319011261032157602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b8015150361032157565b346103215760a0366003190112610321576004356109d881610310565b6024359060008051602061595b833981519152610aae604435926109fb84610310565b610a948560643595610a0c876109b1565b8360843591610a1a83610310565b610a226136a2565b610a2d8415156125af565b6001600160a01b03811698610a438a15156125fa565b610a576001600160a01b038516151561263d565b15610ab357610a6f610a84926108a4610a7f936103bd565b6001600160801b03851690613979565b61271c565b610a8e8285613a73565b83613b0e565b6040519485526001600160a01b0316939081906020820190565b0390a3005b610af5826108a4610aef61069088610ade610690610ad7610afa9a6108a48b6103bd565b5460801c90565b610aea82821015612685565b6126e7565b936103bd565b6126f9565b610a84565b634e487b7160e01b600052602160045260246000fd5b60051115610b1f57565b610aff565b3461032157602036600319011261032157600435600052600760205260ff604060002054166040516005821015610b1f576020918152f35b34610321576040366003190112610321577f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b6040600435610b9c816103a4565b63ffffffff60243591610bad6136a2565b169081600052600160205280836000205582519182526020820152a1005b3461032157602036600319011261032157600435610be881610310565b60018060a01b03166000526008602052602060ff604060002054166040519015158152f35b3461032157600036600319011261032157610c266136a2565b60035460ff811615610c655760ff19166003557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b60005260046000fd5b3461032157600036600319011261032157602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103215760203660031901126103215763ffffffff600435610cd7816103a4565b610cdf6136a2565b168060005260066020526040600020600160ff198254161790557fa7dbeb6ef5cb64125bfb03ac211f1aea3f639de95ceb37b16706d4f0735d1863600080a2005b908160809103126103215790565b346103215761018036600319011261032157610d49366105f9565b610144356001600160401b03811161032157610d699036906004016104a7565b90610164356001600160401b03811161032157610e2a91610d91610e23923690600401610d20565b93610d9a613210565b610da2613230565b336000526009602052610dbc60ff6040600020541661240e565b610ddc610dd7610dd3604089013561065a81610310565b1590565b612772565b610ded610de886613bd5565b6127ca565b610df686613bed565b91309230927f00000000000000000000000000000000000000000000000000000000000000009289613d8f565b9183613f4f565b604051828152909391906001600160a01b0385169084907f86d7c80bc9d060acd32be0a39bbd97538a0e7b1f748c30d4e87b186b1d3589bb90602090a3610e7082614138565b15610ee85750819250610e90610e95926000526005602052604060002090565b612805565b610eb9610eac826000526007602052604060002090565b805460ff19166004179055565b7fe82916be8cebf4000a0d08979cca286e4bfe07a019f19c0c930305aceacdcaf6600080a26100196001600255565b610ef193613551565b610795565b3461032157602036600319011261032157600435610f1381610310565b610f1b6136a2565b6001600160a01b03166000908152600960205260409020805460ff19166001179055005b346103215760203660031901126103215763ffffffff600435610f61816103a4565b166000526006602052602060ff604060002054166040519015158152f35b3461032157600036600319011261032157602060ff600354166040519015158152f35b34610321576000366003190112610321576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346103215760203660031901126103215760043561100481610310565b61100c6136a2565b6001600160a01b03166000908152600860205260409020805460ff19169055005b34610321576000366003190112610321576110466136a2565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b6101403660031901126103215761109c366105f9565b6110a4613210565b6110ac613230565b3360005260096020526110c660ff6040600020541661240e565b6110f1307f0000000000000000000000000000000000000000000000000000000000000000836141a0565b90606081019161110361065a84612230565b156111c25761112161111a61069060208501612297565b3414612a28565b8161112b81614138565b156111b457506111479033906111413685612a7f565b906143c0565b61115361065a83612230565b156111875761116461079592612230565b90611181610690602061117a6101208501612230565b9301612297565b91613b0e565b6111966106b6610ef193612230565b906111ac610690602061117a6101208501612230565b913390614613565b6111bd916142c8565b611147565b6111cc34156129c4565b611121565b34610321576040366003190112610321576111ed6004356103a4565b602060405160008152f35b346103215760203660031901126103215760043561121581610310565b60018060a01b03166000526009602052602060ff604060002054166040519015158152f35b346103215760a03660031901126103215761125436610496565b506064356001600160401b038111610321576112749036906004016104a7565b5050602060843561128481610310565b6040516001600160a01b0390911630148152f35b34610321576000366003190112610321576112b16136a2565b6112b9613230565b600160ff1960035416176003557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b919082519283825260005b84811061131e575050826000602080949584010152601f8019910116010190565b806020809284010151828286010152016112fd565b3461032157600036600319011261032157611373611381611352614657565b604092919251938493600f60f81b855260e0602086015260e08501906112f2565b9083820360408501526112f2565b466060830152306080830152600060a083015281810360c0830152602060605191828152019060809060005b8181106113bb575050500390f35b82518452859450602093840193909201916001016113ad565b34610321576000366003190112610321576000546040516001600160a01b039091168152602090f35b346103215760403660031901126103215760043561141a81610310565b6024356114256136a2565b478061144b575b508061143457005b60005461001992906001600160a01b031690613b0e565b60008080809360018060a01b038254165af1611465612b3e565b5015611471573861142c565b60405162461bcd60e51b8152602060048201526017602482015276115d1a195c881dda5d1a191c985dd85b0819985a5b1959604a1b6044820152606490fd5b610180366003190112610321576004356114c93661060b565b610164356001600160401b038111610321576114e99036906004016104a7565b6114f4929192613210565b6114fc613230565b8361150683612c60565b036115ef577f8168c9ac1d18802efe1afee0a6bf2de2b35d9f041a5b42a072b06252ba84fe509261159d9261155f3033307f00000000000000000000000000000000000000000000000000000000000000008a86614763565b611583611576876000526007602052604060002090565b805460ff19166003179055565b61159860c0611591886148ce565b9201612226565b6148f0565b80516115e260406115b860208501516001600160401b031690565b93015151604051938493846001600160401b03604092959493606083019683521660208201520152565b0390a26100196001600255565b60405162461bcd60e51b815260206004820152602a60248201527f5375626d6974746564206f72646572206461746120646f65736e2774206d617460448201526918da081bdc99195c925960b21b6064820152608490fd5b346103215761016036600319011261032157611662366105f9565b610144356001600160401b03811161032157610795916116896107839236906004016104a7565b611694939193613210565b61169c613230565b3360005260096020526116b660ff6040600020541661240e565b61077e60408401916117376117318435976116d089610310565b6001600160a01b038916936116fb73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee861415612772565b61170489613bed565b91309230927f0000000000000000000000000000000000000000000000000000000000000000928c613d8f565b96610310565b6101008501359061174782610310565b611755863561069081612286565b913091614613565b346103215760203660031901126103215760043560005260056020526040600020805461049260018060a01b036001840154166002840154936117a08560e01c90565b6003820154906117d460046117c563ffffffff85169460201c6001600160a01b031690565b9401546001600160a01b031690565b604080516001600160801b0389168152608098891c60208201526001600160a01b0396871691810191909152858916606082015260a089811c63ffffffff9081169983019990995260c0998a1c89169082015291871697820197909752941660e08501528116610100840152909216610120820152908190610140820190565b6101603660031901126103215761186a366105f9565b610144356001600160401b0381116103215761188a903690600401610d20565b90611893613210565b61189b613230565b3360005260096020526118b560ff6040600020541661240e565b61199f6118e3307f0000000000000000000000000000000000000000000000000000000000000000846141a0565b916118ee8482614928565b936001600160a01b039061190490602001612230565b16837fd6fb3db9629fef5e875e0d0138b2fb4ae60575aba13837c23c1c9a6aa1e35bac6040518061193a89829190602083019252565b0390a3611957602082019461195161069087612297565b906126e7565b928161196281614138565b156119c857506119789033906111413685612a7f565b606081019361118161069061199961012061199289612230565b9501612230565b92612297565b806119ae576100196001600255565b6119c1916119bc3391612230565b613b0e565b3880610795565b6119d1916142c8565b611978565b34610321576101403660031901126103215760206119fb6119f6366105f9565b612c60565b604051908152f35b602060408183019282815284518094520192019060005b818110611a275750505090565b82511515845260209384019390920191600101611a1a565b34610321576020366003190112610321576004356001600160401b0381116103215736602382011215610321578060040135906001600160401b038211610321573660248360051b8301011161032157610492916024611a9f9201612c89565b60405191829182611a03565b346103215760203660031901126103215763ffffffff600435611acd816103a4565b1660005260016020526020604060002054604051908152f35b346103215760203660031901126103215763ffffffff600435611b08816103a4565b611b106136a2565b16806000526006602052604060002060ff1981541690557f79df5d328757ca456e42d3dc087c02eedd4cf61d984a6aa526cfac31f1542dcd600080a2005b3461032157602036600319011261032157610795600435611b6d613210565b611b75613230565b806000526005602052611cce6040600020611ca0611c8f6004611b9661250d565b84546001600160801b0381168252909490611bc690611bb6905b60801c90565b6001600160801b03166020870152565b6001810154611be9906001600160a01b03165b6001600160a01b03166040870152565b60028101546001600160a01b0381166060870152611c3990611c2c9063ffffffff60a082901c16608089015263ffffffff60c082901c1660a08901525b60e01c90565b63ffffffff1660c0870152565b611c81611c706003830154611c61611c548263ffffffff1690565b63ffffffff1660e08a0152565b60201c6001600160a01b031690565b6001600160a01b0316610100870152565b01546001600160a01b031690565b6001600160a01b0316610120830152565b309033903090857f000000000000000000000000000000000000000000000000000000000000000091614d00565b614e41565b346103215760006020366003190112611d7d5780600435611cf381610310565b611cfb6136a2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b15611d795760405163ca5eb5e160e01b81526001600160a01b0390921660048301529091908290602490829084905af18015611d74578290611d665780f35b611d6f916124dd565b388180f35b612e85565b5050fd5b80fd5b346103215760c036600319011261032157600435611d9d816103a4565b6024359060ff8216820361032157604435906001600160401b0382116103215761049292611dd2611dfe9336906004016104a7565b60643591611ddf836109b1565b60843593611dec856103a4565b60a43595611df987610310565b612ec3565b6040519081529081906020820190565b34610321576020611e4a611e2136610333565b6001600160a01b0391821660009081526004855260408082209290931681526020919091522090565b5460801c604051908152f35b3461032157604036600319011261032157600435602435611e7681610310565b611e7e6136a2565b611e92826000526007602052604060002090565b5460ff16611e9f81610b15565b600114611eab90613006565b6001600160a01b03811690611ec182151561263d565b611ed5836000526005602052604060002090565b611ede90612d9b565b9260c0840151611ef19063ffffffff1690565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff169063ffffffff1614611f2990613052565b604084015184516001600160801b0316946001600160a01b039091169290859081908590611f578383613a73565b611f6b866000526007602052604060002090565b805460ff1916600317905561010001516001600160a01b0316611f8d906103bd565b6001600160a01b0390911660009081526020919091526040902090611fb191613979565b611fba9061271c565b611fc49184613b0e565b6040519182917fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a600080a26001600160801b039490941690526001600160a01b039092169160008051602061595b83398151915290602090a3005b346103215760203660031901126103215760043561203c81610310565b6120446136a2565b6001600160a01b03166000908152600860205260409020805460ff19166001179055005b346103215760203660031901126103215760043561208581610310565b61208d6136a2565b6001600160a01b031680156120df57600080546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b600052600060045260246000fd5b346103215760403660031901126103215760043561211281610310565b60243561211d613210565b612125613230565b80336000526004602052612152610ad78460406000209060018060a01b0316600052602052604060002090565b9161215e8315156130b4565b806121c257505061218961217c6106908380945b610aea8288613a73565b610af5846108a4336103bd565b612194813384613b0e565b6040519081526001600160a01b0390911690339060008051602061595b83398151915290806020810161095c565b61069082846121da61217c9461218996971015612685565b612172565b346103215760603660031901126103215760206121fb36610496565b63ffffffff813561220b816103a4565b16600052600182528160406000205491013560405191148152f35b35610358816103a4565b3561035881610310565b1561224157565b60405162461bcd60e51b815260206004820152601f60248201527f4f72646572206d7573742073706563696679206e617469766520746f6b656e006044820152606490fd5b6001600160801b0381160361032157565b3561035881612286565b156122a857565b60405162461bcd60e51b8152602060048201526017602482015276125b98dbdc9c9958dd081b985d1a5d9948185b5bdd5b9d604a1b6044820152606490fd5b156122ee57565b60405162461bcd60e51b815260206004820152602660248201527f4f6e6c79206f6666657265722063616e206465706f736974206e617469766520604482015265746f6b656e7360d01b6064820152608490fd5b1561234957565b60405162461bcd60e51b81526020600482015260146024820152734f7264657220616c72656164792065786973747360601b6044820152606490fd5b1561238c57565b60405162461bcd60e51b815260206004820152601f60248201527f44657374696e6174696f6e20636861696e206e6f7420737570706f72746564006044820152606490fd5b156123d857565b60405162461bcd60e51b815260206004820152600e60248201526d086d0c2d2dc40dad2e6dac2e8c6d60931b6044820152606490fd5b1561241557565b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b7b63b32b960911b6044820152606490fd5b1561245257565b60405162461bcd60e51b8152602060048201526012602482015271139bc81bdc99195c9cc81c1c9bdd9a59195960721b6044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176124bd57604052565b61248c565b606081019081106001600160401b038211176124bd57604052565b90601f801991011681019081106001600160401b038211176124bd57604052565b604051906103316040836124dd565b60405190610331610140836124dd565b6040519061033160a0836124dd565b6001600160401b0381116124bd57601f01601f191660200190565b9291926125538261252c565b9161256160405193846124dd565b829481845281830111610321578281602093846000960137010152565b9060609295949361259f6001600160401b03926080855260808501906112f2565b9660208401521660408201520152565b156125b657565b606460405162461bcd60e51b815260206004820152602060248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152fd5b1561260157565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642075736572206164647265737360601b6044820152606490fd5b1561264457565b60405162461bcd60e51b8152602060048201526019602482015278496e76616c696420726563697069656e74206164647265737360381b6044820152606490fd5b1561268c57565b60405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420756e6c6f636b65642062616c616e63650000006044820152606490fd5b634e487b7160e01b600052601160045260246000fd5b919082039182116126f457565b6126d1565b80546001600160801b031660809290921b6001600160801b031916919091179055565b1561272357565b60405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f206465637265617365206c6f636b65642062616c616e636044820152606560f81b6064820152608490fd5b1561277957565b60405162461bcd60e51b815260206004820152602360248201527f557365206465706f7369744e617469766520666f72206e617469766520746f6b604482015262656e7360e81b6064820152608490fd5b156127d157565b60405162461bcd60e51b815260206004820152600c60248201526b4d697373696e6720686f6f6b60a01b6044820152606490fd5b60046129a36101206103319461283961281d82612297565b86546001600160801b0319166001600160801b03909116178655565b61284e61284860208301612297565b866126f9565b61288061285d60408301612230565b6001870180546001600160a01b0319166001600160a01b03909216919091179055565b61293c600286016128b261289660608501612230565b82546001600160a01b0319166001600160a01b03909116178255565b6128e16128c160808501612226565b825463ffffffff60a01b191660a09190911b63ffffffff60a01b16178255565b6129106128f060a08501612226565b825463ffffffff60c01b191660c09190911b63ffffffff60c01b16178255565b61291c60c08401612226565b81546001600160e01b031660e09190911b6001600160e01b031916179055565b61299d6003860161296861295260e08501612226565b825463ffffffff191663ffffffff909116178255565b6129756101008401612230565b8154640100000000600160c01b03191660209190911b640100000000600160c01b0316179055565b01612230565b910180546001600160a01b0319166001600160a01b03909216919091179055565b156129cb57565b60405162461bcd60e51b815260206004820152602f60248201527f4e6f206e617469766520746f6b656e732073686f756c642062652073656e742060448201526e666f722045524332302066696c6c7360881b6064820152608490fd5b15612a2f57565b60405162461bcd60e51b815260206004820152601c60248201527f496e636f7272656374206e617469766520616d6f756e742073656e74000000006044820152606490fd5b359061033182612286565b91908261014091031261032157612b36610120612a9a61250d565b93612aa481612a74565b8552612ab260208201612a74565b6020860152612ac360408201610326565b6040860152612ad460608201610326565b6060860152612ae5608082016103b2565b6080860152612af660a082016103b2565b60a0860152612b0760c082016103b2565b60c0860152612b1860e082016103b2565b60e0860152612b2a6101008201610326565b61010086015201610326565b610120830152565b3d15612b69573d90612b4f8261252c565b91612b5d60405193846124dd565b82523d6000602084013e565b606090565b61033190929192610120612c5281610140840196612b9c85612b8f83612a74565b6001600160801b03169052565b612bab611bb660208301612a74565b612bba611bd960408301610326565b612bd9612bc960608301610326565b6001600160a01b03166060870152565b612bf5612be8608083016103b2565b63ffffffff166080870152565b612c11612c0460a083016103b2565b63ffffffff1660a0870152565b612c20611c2c60c083016103b2565b612c3c612c2f60e083016103b2565b63ffffffff1660e0870152565b612c4c611c706101008301610326565b01610326565b6001600160a01b0316910152565b604051612c8381612c75602082019485612b6e565b03601f1981018352826124dd565b51902090565b612c916136a2565b612c9a82612d60565b91612ca860405193846124dd565b808352601f19612cb782612d60565b0136602085013760005b818110612cce5750505090565b8063ffffffff612ce16001938587612d77565b35612ceb816103a4565b16600052600660205260406000208260ff19825416179055612d22612d19612d14838688612d77565b612226565b63ffffffff1690565b7fa7dbeb6ef5cb64125bfb03ac211f1aea3f639de95ceb37b16706d4f0735d1863600080a2612d5a612d548287612d87565b60019052565b01612cc1565b6001600160401b0381116124bd5760051b60200190565b91908110156104055760051b0190565b80518210156104055760209160051b010190565b90610331612e746004612dac61250d565b85546001600160801b0381168252909590612dda90612dca90611bb0565b6001600160801b03166020880152565b60018101546001600160a01b0316604087015260028101546001600160a01b0381166060880152612e3b90612e2e9063ffffffff60a082901c1660808a015263ffffffff60c082901c1660a08a0152611c26565b63ffffffff1660c0880152565b611c81612e636003830154611c61612e568263ffffffff1690565b63ffffffff1660e08b0152565b6001600160a01b0316610100880152565b6001600160a01b0316610120840152565b6040513d6000823e3d90fd5b90612e9b8261252c565b612ea860405191826124dd565b8281528092612eb9601f199161252c565b0190602036910137565b9391612f3c90612f34612f2f612f7d9694612f07612f989b63ffffffff60409c16600052600a6020528b6000209060018060a01b0316600052602052604060002090565b547f000000000000000000000000000000000000000000000000000000000000000091614f0e565b612e91565b923691612547565b90612f45613768565b50612f4f856130fc565b612f66612f5a61251d565b63ffffffff9097168752565b602086015285850152606084015215156080830152565b815180938192631bb8518b60e31b835230906004840161381a565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115611d7457600091612fd957505190565b612ffb915060403d604011612fff575b612ff381836124dd565b810190614f85565b5190565b503d612fe9565b1561300d57565b60405162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c792063616e63656c20616374697665206f72646572730000006044820152606490fd5b1561305957565b60405162461bcd60e51b815260206004820152602d60248201527f456d657267656e63792063616e63656c206f6e6c7920616c6c6f776564206f6e60448201526c1039b7bab931b29031b430b4b760991b6064820152608490fd5b156130bb57565b60405162461bcd60e51b8152602060048201526019602482015278139bdb8b5e995c9bc818985b185b98d9481c995c5d5a5c9959603a1b6044820152606490fd5b63ffffffff1680600052600160205260406000205490811561311c575090565b63f6ff4fb760e01b60005260045260246000fd5b9350509350915061313f613230565b81156131db573561314f816103a4565b61315982846153fa565b3560f81c6002811015610b1f5761316f816148c4565b6001810361318257505061033191615550565b61318e819392936148c4565b61319b5761033192615403565b60405162461bcd60e51b8152602060048201526018602482015277556e737570706f72746564207061796c6f6164207479706560401b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c115b5c1d1e481c185e5b1bd859609a1b6044820152606490fd5b600280541461321f5760028055565b633ee5aeb560e01b60005260046000fd5b60ff6003541661323c57565b63d93c066560e01b60005260046000fd5b1561325457565b60405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b21037b33332b932b960891b6044820152606490fd5b1561329257565b60405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606490fd5b156132d257565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420656e642074696d6560801b6044820152606490fd5b1561331157565b60405162461bcd60e51b815260206004820152601160248201527013dc99195c881b9bdd081cdd185c9d1959607a1b6044820152606490fd5b1561335157565b60405162461bcd60e51b815260206004820152601160248201527013dc99195c881a185cc8195e1c1a5c9959607a1b6044820152606490fd5b1561339157565b60405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606490fd5b156133d457565b60405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081bdd5d1c1d5d08185b5bdd5b9d605a1b6044820152606490fd5b1561341857565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606490fd5b610331906134716001600160a01b036134696101008401612230565b16151561324d565b61348b6134846106b66101208401612230565b151561328b565b6134e5608082016134d26134c36134a183612226565b92612d1460a087019463ffffffff6134bb612d1988612226565b9116106132cb565b63ffffffff429116111561330a565b6134df612d194292612226565b1161334a565b6135016001600160801b036134f983612297565b16151561338a565b61351a61351361069060208401612297565b15156133cd565b6135296106b660408301612230565b15159081613538575b50613411565b613549915060606106b69101612230565b151538613532565b9161369161365e61369d936136597f8e45fa612720ed3142e896a3a29c981f4ca01c25bca19c3a5c203398ee1bc3d79661010086013561359081610310565b6001600160a01b0390811660009081526004602090815260408083209385168352929052206135f2906135d56135c586614f99565b82546001600160801b0316614fcc565b81546001600160801b0319166001600160801b0391909116179055565b8860005260076020526040600020600160ff1982541617905561362386610e908b6000526005602052604060002090565b60016136398a6000526005602052604060002090565b0180546001600160a01b0319166001600160a01b03909216919091179055565b614f99565b613672866000526005602052604060002090565b80546001600160801b0319166001600160801b03909216919091179055565b60405191829182612b6e565b0390a2565b6000546001600160a01b031633036136b657565b63118cdaa760e01b6000523360045260246000fd5b63ffffffff166017019063ffffffff82116126f457565b908260051b621fffe061ffe08216911681036126f457612f2f612d1961370f6137149396949661ffff1690565b6136cb565b928160481b9060581b17602084015281600052602060002093825491820393603781015b838681111561375c57906000602092811901958119908a0101805483525501613738565b50509392915093505590565b60405190613775826124a2565b60006020838281520152565b6040519061378e826124c2565b81600081526000602082015260406137a4613768565b910152565b9190826040910312610321576040516137c1816124a2565b6020808294805184520151910152565b60808183031261032157604051916137e8836124c2565b8151835260208201516001600160401b0381168103610321576020840152613812916040016137a9565b604082015290565b906020909392936040835263ffffffff8151166040840152818101516060840152608061386e613858604084015160a08488015260e08701906112f2565b6060840151868203603f190160a08801526112f2565b910151151560c08401526001600160a01b03909416910152565b6138e560809492613901969461389c613781565b5060206138a98651614fe5565b95019182518061396a575b506138be856130fc565b92511515926138ce612f5a61251d565b602086015260408501526060840152151585830152565b6040518095819482936302637a4560e41b84526004840161381a565b03917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115611d7457600091613941575090565b610358915060803d608011613963575b61395b81836124dd565b8101906137d1565b503d613951565b61397390615004565b386138b4565b805490916001600160801b039182169081039091169081116139b95781546001600160801b0319166001600160801b03909116179055600190565b600190565b5050600090565b90816020910312610321575190565b156139d657565b60405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e63650000006044820152606490fd5b15613a2257565b60405162461bcd60e51b8152602060048201526024808201527f496e73756666696369656e7420636f6e7472616374206e61746976652062616c604482015263616e636560e01b6064820152608490fd5b6001600160a01b03169073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8203613aa5576103319150471015613a1b565b6040516370a0823160e01b815230600482015291602090839060249082905afa8015611d745761033192600091613adf575b5010156139cf565b613b01915060203d602011613b07575b613af981836124dd565b8101906139c0565b38613ad7565b503d613aef565b6001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8103613b9557506000918291829182916001600160a01b03165af1613b4f612b3e565b5015613b5757565b60405162461bcd60e51b815260206004820152601660248201527513985d1a5d99481d1c985b9cd9995c8819985a5b195960521b6044820152606490fd5b60405163a9059cbb60e01b60208201526001600160a01b03909216602483015260448083019390935291815261033191613bd06064836124dd565b61537e565b35613bdf81610310565b6001600160a01b0316151590565b61035890803590613bfd82612286565b613d1b6020820135613c0e81612286565b612c75604084013593613c2085610310565b606081013590613c2f82610310565b613c3b60808201612226565b613c4760a08301612226565b613c5360c08401612226565b90613c6060e08501612226565b92613c7b610120613c746101008801612230565b9601612230565b956040519a8b9960208b019d8e7f16210483e9c961c9c307e53963eafad0795395f2fce68f0c9c294cca1ac5a06a81526001600160801b039182166020820152911660408201526001600160a01b039182166060820152918116608083015263ffffffff92831660a083015292821660c082015292811660e084015292909216610100820152918116610120830152919091166101408201526101600190565b5190206150bd565b90816020910312610321575160058110156103215790565b908160209103126103215751610358816109b1565b15613d5757565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c69645369676e617475726560801b6044820152606490fd5b90613dd49392959796602060405181810190613daf81612c758885612b6e565b519020809a6040518080998194632dff692d60e01b8352600483019190602083019252565b03915afa908115611d7457613dfb602092613e3097600091613edf575b5061070081610b15565b613e0760e08501612226565b60405163167d0a6960e21b815263ffffffff909116600482015295869190829081906024820190565b03915afa918215611d7457613e97613e7663ffffffff9695613e7060c0956103319b613e69613ea6998c9b600091613eb0575b50612385565b3691612547565b9061512a565b613e866106b66101008501612230565b6001600160a01b0390911614613d50565b613ea08161344d565b01612226565b92169116146123d1565b613ed2915060203d602011613ed8575b613eca81836124dd565b810190613d3b565b38613e63565b503d613ec0565b613eff9150843d8611613f05575b613ef781836124dd565b810190613d23565b38613df1565b503d613eed565b15613f1357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c696420686f6f6b206164647265737360601b6044820152606490fd5b91908035613f5c81610310565b6001600160a01b0316600090815260086020526040902054613f809060ff16613f0c565b613fbb613f926106b660408601612230565b613f9f6101008601612230565b613fa884612230565b90613fb561069088612297565b92614613565b613fc483614138565b1561407d57613ff8613fe3613fd883612230565b9260608101906140ba565b606086019391613ff285612230565b926151b6565b906140576140516106906020870161401d61401561069083612297565b8710156140ec565b61404c61402986612230565b9861404061012061403989612230565b9201612230565b61118161069085612297565b612297565b836126e7565b80614063575b50509190565b61406f61407692612230565b3390613b0e565b388061405d565b915061035861408b83612230565b61077e60406140af6140a060608801886140ba565b602089019591613ff287612230565b9501358510156140ec565b903590601e198136030182121561032157018035906001600160401b0382116103215760200191813603831361032157565b156140f357565b60405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74206f75747075742066726f6d20686f6f6b0000006044820152606490fd5b63ffffffff8060e060c08401359361414f856103a4565b013561415a816103a4565b1691161490565b1561416857565b60405162461bcd60e51b815260206004820152601060248201526f4f72646572206e6f742061637469766560801b6044820152606490fd5b9291906141ac8461344d565b6141c360e085019163ffffffff80613ea685612226565b63ffffffff6141f9612d196141f360c060405160208101906141e981612c758d85612b6e565b5190209801612226565b93612226565b91160361426657604051632dff692d60e01b81526004810184905290602090829060249082905afa908115611d745761033191600191600091614247575b5061424181610b15565b14614161565b614260915060203d602011613f0557613ef781836124dd565b38614237565b604051632dff692d60e01b81526004810184905290602090829060249082905afa8015611d7457610331916000916142a9575b506142a381610b15565b15614161565b6142c2915060203d602011613f0557613ef781836124dd565b38614299565b908160005260076020526142e76040600020600260ff19825416179055565b63ffffffff60c08201356142fa816103a4565b166000908152600a60209081526040808320338452909152902080549091600160401b8210156124bd57614358827f7f80314442bfb82d1f9dfa4f96cbc84ae8fef158c7a93315024778ca3fc1671694600161369d950181556103ed565b81549060031b9086821b91600019901b191617905560405191829182612b6e565b1561438057565b60405162461bcd60e51b815260206004820152601860248201527710985b185b98d9481bdc195c985d1a5bdb8819985a5b195960421b6044820152606490fd5b610100820180519193916001600160a01b03166143dc906103bd565b604084810180516001600160a01b031660009081526020939093529120909390546001600160801b03169282614411826103bd565b86516001600160a01b03166000908152602091909152604090205460801c81519093908190889085906001600160a01b031661444c906103bd565b82516001600160a01b0316600090815260209190915260409020546001600160801b031683516001600160801b03166001600160801b031690600160801b600190031610156144d561451f610ad761450f61450961454f9f6144da6144d56145499d61453b9c6144e69b6144fc9561452d9c61458d575b505090516001600160a01b0316919050565b6103bd565b89516001600160a01b03165b60018060a01b0316600052602052604060002090565b546001600160801b031690565b9a6103bd565b86516001600160a01b03166144e6565b99516001600160a01b031690565b91516001600160a01b031690565b50516001600160801b031690565b936152a4565b614566610eac826000526007602052604060002090565b7fe82916be8cebf4000a0d08979cca286e4bfe07a019f19c0c930305aceacdcaf6600080a2565b614602926145f06145e26145f6936144e661452d6145dc6145ca6145ba6144d58d5160018060a01b031690565b85516001600160a01b03166144e6565b87516001600160801b03165b90613979565b976103bd565b91516001600160801b031690565b9061527e565b8161460b575b50614379565b8f8e908d6144c3565b9050386145fc565b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815261033191613bd06084836124dd565b604090815161466683826124dd565b6004815263416f726960e01b602082015291614684815191826124dd565b6005815264302e332e3160d81b602082015290565b156146a057565b60405162461bcd60e51b81526020600482015260186024820152772737ba1037b7103232b9ba34b730ba34b7b71031b430b4b760411b6044820152606490fd5b156146e757565b60405162461bcd60e51b815260206004820152604860248201527f4f6e6c792077686974656c697374656420736f6c7665722c206f66666572657260448201527f2c206f7220726563697069656e742028616674657220657870697279292063616064820152671b8818d85b98d95b60c21b608482015260a490fd5b929060209161478b6147ab9463ffffffff8061478160e08a01612226565b9216911614614699565b6040518080958194632dff692d60e01b8352600483019190602083019252565b03915afa8015611d74576147ca916000916142a957506142a381610b15565b604051631f798dcd60e21b81526001600160a01b038316600482015292602090849060249082905afa918215611d7457610331936000936148a3575b508215614863575b821561481c575b50506146e0565b90915061482f6106b66101208401612230565b6001600160a01b0390911614908161484a575b503880614815565b61485b915060a0612d199101612226565b421138614842565b91506148756106b66101008301612230565b6001600160a01b038316148061488c575b9161480e565b5061489c612d1960a08301612226565b4211614886565b6148bd91935060203d602011613ed857613eca81836124dd565b9138614806565b60021115610b1f57565b60405190600160f81b60208301526021820152602181526103586041826124dd565b6103589392916148fe613781565b506149226040519361490f856124a2565b3485526000602086015233953691612547565b91613888565b906149e461069060206149dd61035894803561494381610310565b6001600160a01b031660009081526008845260409020546149669060ff16613f0c565b60608101358015614a175783820161498061065a82612230565b156149ec575060008080808461499a6149b9963414614ad1565b6149a96106b66106b689612230565b5af16149b3612b3e565b50614b31565b6149d06149c582612230565b9160408101906140ba565b90613ff260608a01612230565b9401612297565b821015614b7d565b90614a016106b6614a129361077e3415614a63565b614a0a84612230565b903390614613565b6149b9565b50614a1234614a2257565b60405162461bcd60e51b8152602060048201526019602482015278139bc81b985d1a5d99481d1bdad95b9cc8195e1c1958dd1959603a1b6044820152606490fd5b15614a6a57565b60405162461bcd60e51b815260206004820152603960248201527f4e6f206e617469766520746f6b656e732073686f756c642062652073656e74206044820152783337b91022a921991810383932b332b93932b2103a37b5b2b760391b6064820152608490fd5b15614ad857565b60405162461bcd60e51b815260206004820152602b60248201527f496e636f7272656374206e617469766520616d6f756e7420666f72207072656660448201526a32b93932b2103a37b5b2b760a91b6064820152608490fd5b15614b3857565b60405162461bcd60e51b815260206004820152601e60248201527f4e6174697665207472616e7366657220746f20686f6f6b206661696c656400006044820152606490fd5b15614b8457565b60405162461bcd60e51b815260206004820152603560248201527f486f6f6b206d7573742070726f76696465206174206c656173742074686520656044820152741e1c1958dd1959081bdd5d1c1d5d08185b5bdd5b9d605a1b6064820152608490fd5b15614bee57565b60405162461bcd60e51b81526020600482015260136024820152722737ba1037b71039b7bab931b29031b430b4b760691b6044820152606490fd5b15614c3057565b60405162461bcd60e51b815260206004820152603b60248201527f43726f73732d636861696e206f7264657273206d7573742062652063616e636560448201527f6c6c65642066726f6d2064657374696e6174696f6e20636861696e00000000006064820152608490fd5b15614ca257565b60405162461bcd60e51b815260206004820152603060248201527f4f6e6c7920736f6c766572206f72206f6666657265722028616674657220657860448201526f1c1a5c9e4a4818d85b8818d85b98d95b60821b6064820152608490fd5b92614d2e9160209161478b60c087019563ffffffff80614d24895163ffffffff1690565b9216911614614be7565b03915afa918215611d7457614d576001614d8294614d6194600091614247575061424181610b15565b5163ffffffff1690565b63ffffffff614d7a612d1960e086015163ffffffff1690565b911614614c29565b604051631f798dcd60e21b81526001600160a01b038316600482015292602090849060249082905afa918215611d745761033193600093614e20575b508215614dcd575b5050614c9b565b61010082015191925090614de9906001600160a01b03166106b6565b6001600160a01b03909116149081614e04575b503880614dc6565b60a00151614e18915063ffffffff16612d19565b421138614dfc565b614e3a91935060203d602011613ed857613eca81836124dd565b9138614dbe565b806000526007602052614e67600160ff60406000205416614e6181610b15565b14613006565b614ee7614e86614e81836000526005602052604060002090565b612d9b565b80516040820151610100909201516001600160801b03909116916001600160a01b039182169116614eb78382613a73565b614ece611576866000526007602052604060002090565b6119bc610a7f84614ee2846108a4876103bd565b613979565b7fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a600080a2565b90919060ff1660018103614f2457505050602190565b614f49576103589161ffff91821680821015614f4257505b166153d9565b9050614f3c565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d657373616765207479706560601b6044820152606490fd5b9060408282031261032157610358916137a9565b6001600160801b038111614fb3576001600160801b031690565b6306dfcc6560e41b600052608060045260245260446000fd5b6001600160801b0391821690821601919082116126f457565b803403614fef5790565b6304fb820960e51b6000523460045260246000fd5b60405163393f876560e21b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190602081600481865afa908115611d7457600091615082575b506001600160a01b031691821561507157610331923390614613565b6329b99a9560e11b60005260046000fd5b90506020813d6020116150b5575b8161509d602093836124dd565b8101031261032157516150af81610310565b38615055565b3d9150615090565b906150c6614657565b604093919351937f91ab3d17e3a50a9d89e63fd30b92be7f5336b03b287bb946787a83a9d62a276660005260208151910120602052602081519101206040523060605260806000206020526119016000526040526042601e20916040526000606052565b919091604051928051806040146151945760411461515557505050505b638baa579f6000526004601cfd5b602091606082015160001a835260408201516060525b60005201516040526020600160806000825afa519160006060526040523d610331575050615147565b506020916040820151601b8160ff1c01845260018060ff1b031660605261516b565b6000919392908291826151c930876155b6565b96826040519384928337810182815203925af16151e4612b3e565b501561524b576151f59030906155b6565b9080821061520657610358916126e7565b60405162461bcd60e51b815260206004820152601f60248201527f486f6f6b2064656372656173656420636f6e74726163742062616c616e6365006044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a10d85b1b0819985a5b195960aa1b6044820152606490fd5b8054909160809190911c9081016001600160801b03169081106139b9576139b4916126f9565b92939192906001600160801b03906152bd908490614fcc565b166001600160801b0390911603615339576001600160801b03916152e19190614fcc565b166001600160801b03909116036152f457565b60405162461bcd60e51b815260206004820152601b60248201527f496e636f6e73697374656e7420736f6c7665722062616c616e636500000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527f496e636f6e73697374656e74206f6666657265722062616c616e6365000000006044820152606490fd5b906000602091828151910182855af115612e85576000513d6153d057506001600160a01b0381163b155b6153af5750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b600114156153a8565b8060051b90808204602014901517156126f457601701806017116126f45790565b90156104055790565b9190916017831061550c576154188382615678565b9390916154268583836156bc565b60005b61ffff8616811061543c57505050505050565b60018161544d61ffff938686615741565b868861547660e061546b614e81866000526005602052604060002090565b015163ffffffff1690565b63ffffffff821663ffffffff82160361549c57505061549491615805565b019050615429565b7fbb563f7e333f32ed0571f8dc4913648b41737753db5df83c58657c6bfcc2ef569250615504604051928392839060a09263ffffffff809216835216602082015260606040820152600c60608201526b08ad2c840dad2e6dac2e8c6d60a31b60808201520190565b0390a2615494565b606460405162461bcd60e51b815260206004820152602060248201527f5061796c6f616420746f6f2073686f727420666f7220736574746c656d656e746044820152fd5b90602103615565576001610331910135614e41565b60405162461bcd60e51b815260206004820152602360248201527f496e76616c69642063616e63656c6c6174696f6e207061796c6f6164206c656e6044820152620cee8d60eb1b6064820152608490fd5b6001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81036155df57503190565b6040516370a0823160e01b81526001600160a01b039092166004830152602090829060249082905afa908115611d745760009161561a575090565b610358915060203d602011613b0757613af981836124dd565b1561563a57565b60405162461bcd60e51b8152602060048201526016602482015275092dcecc2d8d2c840e0c2f2d8dec2c840d8cadccee8d60531b6044820152606490fd5b9190916156886017841015615633565b600181013560601c928060151015610405576016101561040557601581013560f01c61ff00166016919091013560f81c1790565b5090621fffe061ffff82169160051b1690808204602014901517156126f45760170190816017116126f457036156ee57565b60405162461bcd60e51b815260206004820152602560248201527f496e76616c6964207061796c6f6164206c656e67746820666f7220736574746c604482015264195b595b9d60da1b6064820152608490fd5b9061574f6017821015615633565b60161981019081116126f45760051c8210156157715760179160051b01013590565b60405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606490fd5b906040516157b9816124a2565b91546001600160801b038116835260801c6020830152565b815181546001600160801b0319166001600160801b039190911617815561033191602001516001600160801b0316906126f9565b90600161581f6106f0846000526007602052604060002090565b61582881610b15565b0361595657615844614e81836000526005602052604060002090565b6101008101805191929091615861906001600160a01b03166103bd565b6040840180519093916158869161588191906001600160a01b03166144e6565b6157ac565b9061589661588161450f856103bd565b946158e36158d36158c36158b36144d5865160018060a01b031690565b88516001600160a01b03166144e6565b83516001600160801b03166145d6565b916145f06145e26144da886103bd565b901590811561594d575b5061590e575050505050614566610eac826000526007602052604060002090565b51610331955061594893926144e69261452d926144d591908790615938906001600160a01b031684565b87516001600160a01b03166144e6565b6157d1565b905015386158ed565b505056fe9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eba26469706673582212202463fc3c173b6a5cc2bef337128c18ef1cd9704d7eb70d9979f92d42aa4971ad64736f6c634300081c00330000000000000000000000001a44076050125825900e736c501f859c50fe728c000000000000000000000000941327e206b8d8cfe1014a8a95b05e1536dfd00d000000000000000000000000000000000000000000000000000000000000759f0000000000000000000000000000000000000000000000000000000000000064