UNPKG

@layerzerolabs/oft-alt-evm

Version:

LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation

1 lines 242 kB
{"abi":[{"type":"constructor","inputs":[{"name":"_lzEndpoint","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"SEND","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"SEND_AND_CALL","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"allowInitializePath","inputs":[{"name":"origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approvalRequired","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"combineOptions","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_msgType","type":"uint16","internalType":"uint16"},{"name":"_extraOptions","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"decimalConversionRate","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"endpoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ILayerZeroEndpointV2"}],"stateMutability":"view"},{"type":"function","name":"enforcedOptions","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_msgType","type":"uint16","internalType":"uint16"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_name","type":"string","internalType":"string"},{"name":"_symbol","type":"string","internalType":"string"},{"name":"_delegate","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isComposeMsgSender","inputs":[{"name":"","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"","type":"bytes","internalType":"bytes"},{"name":"_sender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isPeer","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_peer","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lzReceive","inputs":[{"name":"_origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"_guid","type":"bytes32","internalType":"bytes32"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_executor","type":"address","internalType":"address"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"lzReceiveAndRevert","inputs":[{"name":"_packets","type":"tuple[]","internalType":"struct InboundPacket[]","components":[{"name":"origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"receiver","type":"address","internalType":"address"},{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"executor","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"extraData","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"lzReceiveSimulate","inputs":[{"name":"_origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"_guid","type":"bytes32","internalType":"bytes32"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_executor","type":"address","internalType":"address"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"mint","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"msgInspector","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nativeToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"nextNonce","inputs":[{"name":"","type":"uint32","internalType":"uint32"},{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"nonce","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"oApp","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"oAppVersion","inputs":[],"outputs":[{"name":"senderVersion","type":"uint64","internalType":"uint64"},{"name":"receiverVersion","type":"uint64","internalType":"uint64"}],"stateMutability":"pure"},{"type":"function","name":"oftVersion","inputs":[],"outputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"},{"name":"version","type":"uint64","internalType":"uint64"}],"stateMutability":"pure"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"peers","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"preCrime","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"quoteOFT","inputs":[{"name":"_sendParam","type":"tuple","internalType":"struct SendParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"extraOptions","type":"bytes","internalType":"bytes"},{"name":"composeMsg","type":"bytes","internalType":"bytes"},{"name":"oftCmd","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"oftLimit","type":"tuple","internalType":"struct OFTLimit","components":[{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"maxAmountLD","type":"uint256","internalType":"uint256"}]},{"name":"oftFeeDetails","type":"tuple[]","internalType":"struct OFTFeeDetail[]","components":[{"name":"feeAmountLD","type":"int256","internalType":"int256"},{"name":"description","type":"string","internalType":"string"}]},{"name":"oftReceipt","type":"tuple","internalType":"struct OFTReceipt","components":[{"name":"amountSentLD","type":"uint256","internalType":"uint256"},{"name":"amountReceivedLD","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"quoteSend","inputs":[{"name":"_sendParam","type":"tuple","internalType":"struct SendParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"extraOptions","type":"bytes","internalType":"bytes"},{"name":"composeMsg","type":"bytes","internalType":"bytes"},{"name":"oftCmd","type":"bytes","internalType":"bytes"}]},{"name":"_payInLzToken","type":"bool","internalType":"bool"}],"outputs":[{"name":"msgFee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"send","inputs":[{"name":"_sendParam","type":"tuple","internalType":"struct SendParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"extraOptions","type":"bytes","internalType":"bytes"},{"name":"composeMsg","type":"bytes","internalType":"bytes"},{"name":"oftCmd","type":"bytes","internalType":"bytes"}]},{"name":"_fee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]},{"name":"_refundAddress","type":"address","internalType":"address"}],"outputs":[{"name":"msgReceipt","type":"tuple","internalType":"struct MessagingReceipt","components":[{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"fee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]}]},{"name":"oftReceipt","type":"tuple","internalType":"struct OFTReceipt","components":[{"name":"amountSentLD","type":"uint256","internalType":"uint256"},{"name":"amountReceivedLD","type":"uint256","internalType":"uint256"}]}],"stateMutability":"payable"},{"type":"function","name":"setDelegate","inputs":[{"name":"_delegate","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setEnforcedOptions","inputs":[{"name":"_enforcedOptions","type":"tuple[]","internalType":"struct EnforcedOptionParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"msgType","type":"uint16","internalType":"uint16"},{"name":"options","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMsgInspector","inputs":[{"name":"_msgInspector","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPeer","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_peer","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPreCrime","inputs":[{"name":"_preCrime","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sharedDecimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EnforcedOptionSet","inputs":[{"name":"_enforcedOptions","type":"tuple[]","indexed":false,"internalType":"struct EnforcedOptionParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"msgType","type":"uint16","internalType":"uint16"},{"name":"options","type":"bytes","internalType":"bytes"}]}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"MsgInspectorSet","inputs":[{"name":"inspector","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OFTReceived","inputs":[{"name":"guid","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"srcEid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"toAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amountReceivedLD","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OFTSent","inputs":[{"name":"guid","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"dstEid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"fromAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amountSentLD","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountReceivedLD","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PeerSet","inputs":[{"name":"eid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"peer","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"PreCrimeSet","inputs":[{"name":"preCrimeAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AmountSDOverflowed","inputs":[{"name":"amountSD","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidDelegate","inputs":[]},{"type":"error","name":"InvalidEndpointCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidLocalDecimals","inputs":[]},{"type":"error","name":"InvalidOptions","inputs":[{"name":"options","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"LzTokenUnavailable","inputs":[]},{"type":"error","name":"NativeTokenUnavailable","inputs":[]},{"type":"error","name":"NoPeer","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"NotEnoughNative","inputs":[{"name":"msgValue","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OFTAltCore__msg_value_not_zero","inputs":[{"name":"_msg_value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlyEndpoint","inputs":[{"name":"addr","type":"address","internalType":"address"}]},{"type":"error","name":"OnlyPeer","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"OnlySelf","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"SimulationResult","inputs":[{"name":"result","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"SlippageExceeded","inputs":[{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60e060405234801562000010575f80fd5b5060405162004528380380620045288339810160408190526200003391620001d2565b806012818080806001600160a01b03166080816001600160a01b031681525050506080516001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000093573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000b99190620001d2565b6001600160a01b031660a05250600660ff83161015620000ec576040516301e9714b60e41b815260040160405180910390fd5b620000f960068362000215565b6200010690600a62000330565b60c05250620001179150506200011e565b5062000340565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156200016f5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620001cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215620001e3575f80fd5b81516001600160a01b0381168114620001fa575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b60ff828116828216039081111562000231576200023162000201565b92915050565b600181815b808511156200027757815f19048211156200025b576200025b62000201565b808516156200026957918102915b93841c93908002906200023c565b509250929050565b5f826200028f5750600162000231565b816200029d57505f62000231565b8160018114620002b65760028114620002c157620002e1565b600191505062000231565b60ff841115620002d557620002d562000201565b50506001821b62000231565b5060208310610133831016604e8410600b841016171562000306575081810a62000231565b62000312838362000237565b805f190482111562000328576200032862000201565b029392505050565b5f620001fa60ff8416836200027f565b60805160a05160c051614162620003c65f395f818161074d0152818161244b015281816124bd015261276f01525f818161094801528181612a260152612aab01525f81816105f301528181610d2e0152818161175e01528181611ad801528181611f260152818161287801528181612ace01528181612afa0152612bf101526141625ff3fe6080604052600436106102e2575f3560e01c8063715018a611610186578063bb0b6a53116100dc578063d424388511610087578063f2fde38b11610062578063f2fde38b1461096a578063fc0c546a1461055d578063ff7bd03d14610989575f80fd5b8063d4243885146108a8578063dd62ed3e146108c7578063e1758bd814610937575f80fd5b8063c7c7f5b3116100b7578063c7c7f5b314610855578063ca5eb5e114610876578063d045a0dc14610895575f80fd5b8063bb0b6a53146107d3578063bc70b35414610823578063bd815db014610842575f80fd5b806395d89b411161013c578063a9059cbb11610117578063a9059cbb14610781578063b731ea0a146107a0578063b98bd070146107b4575f80fd5b806395d89b4114610728578063963efcaa1461073c5780639f68b9641461076f575f80fd5b806382413eac1161016c57806382413eac146106e2578063857749b0146107015780638da5cb5b14610714575f80fd5b8063715018a6146106945780637d25a05e146106a8575f80fd5b806323b872dd1161023b57806352ae2879116101f15780635e280f11116101cc5780635e280f11146105e25780636fc1b31e1461061557806370a0823114610634575f80fd5b806352ae28791461055d5780635535d4611461056f5780635a0dfe4d1461058e575f80fd5b80633400288b116102215780633400288b146104f35780633b6f743b1461051257806340c10f191461053e575f80fd5b806323b872dd146104b3578063313ce567146104d2575f80fd5b806313137d651161029b57806317442b701161027657806317442b701461044157806318160ddd146104625780631f5e13341461049f575f80fd5b806313137d65146103c7578063134d4f25146103da578063156a0d0f14610401575f80fd5b8063095ea7b3116102cb578063095ea7b3146103315780630d35b41514610360578063111ecdad1461038e575f80fd5b806306fdde03146102e6578063077f224a14610310575b5f80fd5b3480156102f1575f80fd5b506102fa6109a8565b6040516103079190612e5f565b60405180910390f35b34801561031b575f80fd5b5061032f61032a366004612fce565b610a7b565b005b34801561033c575f80fd5b5061035061034b366004613041565b610c06565b6040519015158152602001610307565b34801561036b575f80fd5b5061037f61037a366004613081565b610c1f565b604051610307939291906130b3565b348015610399575f80fd5b506103a2610ceb565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610307565b61032f6103d53660046131bd565b610d2c565b3480156103e5575f80fd5b506103ee600281565b60405161ffff9091168152602001610307565b34801561040c575f80fd5b50604080517f02e49c2c0000000000000000000000000000000000000000000000000000000081526001602082015201610307565b34801561044c575f80fd5b5060408051600181526002602082015201610307565b34801561046d575f80fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610307565b3480156104aa575f80fd5b506103ee600181565b3480156104be575f80fd5b506103506104cd366004613256565b610e2b565b3480156104dd575f80fd5b5060125b60405160ff9091168152602001610307565b3480156104fe575f80fd5b5061032f61050d3660046132ac565b610e50565b34801561051d575f80fd5b5061053161052c3660046132d3565b610ece565b6040516103079190613322565b348015610549575f80fd5b5061032f610558366004613041565b610f32565b348015610568575f80fd5b50306103a2565b34801561057a575f80fd5b506102fa61058936600461334a565b610f40565b348015610599575f80fd5b506103506105a83660046132ac565b63ffffffff919091165f9081527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f90060205260409020541490565b3480156105ed575f80fd5b506103a27f000000000000000000000000000000000000000000000000000000000000000081565b348015610620575f80fd5b5061032f61062f36600461337b565b611018565b34801561063f575f80fd5b5061049161064e36600461337b565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b34801561069f575f80fd5b5061032f6110b9565b3480156106b3575f80fd5b506106c96106c23660046132ac565b5f92915050565b60405167ffffffffffffffff9091168152602001610307565b3480156106ed575f80fd5b506103506106fc366004613396565b6110cc565b34801561070c575f80fd5b5060066104e1565b34801561071f575f80fd5b506103a26110ee565b348015610733575f80fd5b506102fa611116565b348015610747575f80fd5b506104917f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a575f80fd5b505f610350565b34801561078c575f80fd5b5061035061079b366004613041565b611167565b3480156107ab575f80fd5b506103a2611174565b3480156107bf575f80fd5b5061032f6107ce36600461343a565b61119c565b3480156107de575f80fd5b506104916107ed366004613479565b63ffffffff165f9081527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f900602052604090205490565b34801561082e575f80fd5b506102fa61083d366004613492565b611318565b61032f61085036600461343a565b6114c1565b6108686108633660046134ef565b6116a4565b60405161030792919061356b565b348015610881575f80fd5b5061032f61089036600461337b565b611711565b61032f6108a33660046131bd565b6117b8565b3480156108b3575f80fd5b5061032f6108c236600461337b565b611800565b3480156108d2575f80fd5b506104916108e13660046135bd565b73ffffffffffffffffffffffffffffffffffffffff9182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b348015610942575f80fd5b506103a27f000000000000000000000000000000000000000000000000000000000000000081565b348015610975575f80fd5b5061032f61098436600461337b565b611899565b348015610994575f80fd5b506103506109a33660046135e9565b6118fc565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916109f990613603565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2590613603565b8015610a705780601f10610a4757610100808354040283529160200191610a70565b820191905f5260205f20905b815481529060010190602001808311610a5357829003601f168201915b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610ac55750825b90505f8267ffffffffffffffff166001148015610ae15750303b155b905081158015610aef575080155b15610b26576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610b875784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610b92888888611919565b610b9b86611939565b8315610bfc5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f33610c1381858561194a565b60019150505b92915050565b604080518082019091525f80825260208201526060610c4f60405180604001604052805f81526020015f81525090565b6040805180820182525f80825267ffffffffffffffff602080840182905284518381529081019094529195509182610ca9565b604080518082019091525f815260606020820152815260200190600190039081610c825790505b5093505f80610ccd604089013560608a0135610cc860208c018c613479565b611957565b60408051808201909152918252602082015296989597505050505050565b5f807f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610da2576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610dbc90610db7908a613479565b6119ab565b14610e1357610dce6020880188613479565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610d99565b610e2287878787878787611a20565b50505050505050565b5f33610e38858285611bb1565b610e43858585611c9d565b60019150505b9392505050565b610e58611d46565b63ffffffff82165f8181527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f900602081815260409283902085905582519384528301849052917f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b91015b60405180910390a1505050565b604080518082019091525f80825260208201525f610efc60408501356060860135610cc86020880188613479565b9150505f80610f0b8684611d9e565b9092509050610f28610f206020880188613479565b838388611f11565b9695505050505050565b610f3c8282611ffc565b5050565b63ffffffff82165f9081527f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea00006020818152604080842061ffff8616855290915290912080546060929190610f9390613603565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbf90613603565b801561100a5780601f10610fe15761010080835404028352916020019161100a565b820191905f5260205f20905b815481529060010190602001808311610fed57829003601f168201915b505050505091505092915050565b611020611d46565b7f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811782556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a15050565b6110c1611d46565b6110ca5f612056565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300610d0f565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916109f990613603565b5f33610c13818585611c9d565b5f807fefb041d771d6daaa55702fff6eb740d63ba559a75d2d1d3e151c78ff2480b600610d0f565b6111a4611d46565b7f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea00005f5b828110156112e6576112098484838181106111e4576111e461364e565b90506020028101906111f6919061367b565b6112049060408101906136b7565b6120eb565b83838281811061121b5761121b61364e565b905060200281019061122d919061367b565b61123b9060408101906136b7565b835f87878681811061124f5761124f61364e565b9050602002810190611261919061367b565b61126f906020810190613479565b63ffffffff1663ffffffff1681526020019081526020015f205f87878681811061129b5761129b61364e565b90506020028101906112ad919061367b565b6112be906040810190602001613718565b61ffff16815260208101919091526040015f20916112dd919083613775565b506001016111c7565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b6748383604051610ec19291906138d2565b63ffffffff84165f9081527f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea00006020818152604080842061ffff8816855290915282208054606093919061136a90613603565b80601f016020809104026020016040519081016040528092919081815260200182805461139690613603565b80156113e15780601f106113b8576101008083540402835291602001916113e1565b820191905f5260205f20905b8154815290600101906020018083116113c457829003601f168201915b5050505050905080515f036114305784848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509295506110e6945050505050565b5f8490036114415791506110e69050565b6002841061148b5761145385856120eb565b806114618560028189613a0b565b60405160200161147393929190613a32565b604051602081830303815290604052925050506110e6565b84846040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610d99929190613a58565b5f5b818110156115e357368383838181106114de576114de61364e565b90506020028101906114f09190613a6b565b90506115416115026020830183613479565b602083013563ffffffff919091165f9081527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f90060205260409020541490565b61154b57506115db565b3063d045a0dc60c08301358360a081013561156a6101008301836136b7565b61157b610100890160e08a0161337b565b6115896101208a018a6136b7565b6040518963ffffffff1660e01b81526004016115ab9796959493929190613ab2565b5f604051808303818588803b1580156115c2575f80fd5b505af11580156115d4573d5f803e3d5ffd5b5050505050505b6001016114c3565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa15801561162c573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116719190810190613b45565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610d999190612e5f565b6116ac612db0565b604080518082019091525f808252602082015234156116f9576040517f8036d4a3000000000000000000000000000000000000000000000000000000008152346004820152602401610d99565b611704858585612145565b915091505b935093915050565b611719611d46565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b15801561179f575f80fd5b505af11580156117b1573d5f803e3d5ffd5b5050505050565b3330146117f1576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e2287878787878787610e13565b611808611d46565b7fefb041d771d6daaa55702fff6eb740d63ba559a75d2d1d3e151c78ff2480b60080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811782556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c2427760906020016110ad565b6118a1611d46565b73ffffffffffffffffffffffffffffffffffffffff81166118f0576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610d99565b6118f981612056565b50565b5f60208201803590611912906107ed9085613479565b1492915050565b61192161223d565b61192b83836122a4565b611934816122b6565b505050565b61194161223d565b6118f9816122d7565b61193483838360016122df565b5f8061196285612448565b915081905083811015611709576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610d99565b63ffffffff81165f9081527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f9006020819052604082205480610e49576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff85166004820152602401610d99565b5f611a31611a2e878761247e565b90565b90505f611a5c82611a4a611a458a8a612495565b6124b7565b611a5760208d018d613479565b6124ec565b90506028861115611b42575f611a98611a7b60608c0160408d01613bae565b611a8860208d018d613479565b84611a938c8c612520565b61256a565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb5901290611b139086908d905f908790600401613bc9565b5f604051808303815f87803b158015611b2a575f80fd5b505af1158015611b3c573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c611b8860208d018d613479565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c975781811015611c89576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610d99565b611c9784848484035f6122df565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611cec576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610d99565b73ffffffffffffffffffffffffffffffffffffffff8216611d3b576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610d99565b61193483838361259c565b33611d4f6110ee565b73ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610d99565b6060805f611df98560200135611db386612769565b611dc060a08901896136b7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061279492505050565b90935090505f81611e0b576001611e0e565b60025b9050611e2e611e206020880188613479565b8261083d60808a018a6136b7565b7f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c0080549194509073ffffffffffffffffffffffffffffffffffffffff168015611f06576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb90611ec59089908990600401613c07565b602060405180830381865afa158015611ee0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f049190613c2b565b505b505050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611f80896119ab565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611fb5929190613c46565b6040805180830381865afa158015611fcf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff39190613d17565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff821661204b576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610d99565b610f3c5f838361259c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6120f96002828486613a0b565b61210291613d31565b60f01c9050600381146119345782826040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610d99929190613a58565b61214d612db0565b604080518082019091525f80825260208201525f8061218233604089013560608a013561217d60208c018c613479565b612826565b915091505f806121928984611d9e565b90925090506121be6121a760208b018b613479565b83836121b8368d90038d018d613d79565b8b61284b565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a9061220c908d018d613479565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166110ca576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122ac61223d565b610f3c828261294d565b6122be61223d565b6122c7816129b0565b6122cf6129c1565b6118f96129c1565b6118a161223d565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0073ffffffffffffffffffffffffffffffffffffffff851661234f576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610d99565b73ffffffffffffffffffffffffffffffffffffffff841661239e576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610d99565b73ffffffffffffffffffffffffffffffffffffffff8086165f908152600183016020908152604080832093881683529290522083905581156117b1578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161243991815260200190565b60405180910390a35050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006124748184613dd6565b610c199190613e0e565b5f61248c6020828486613a0b565b610e4991613e25565b5f6124a4602860208486613a0b565b6124ad91613e61565b60c01c9392505050565b5f610c197f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff8416613e0e565b5f73ffffffffffffffffffffffffffffffffffffffff841661250e5761dead93505b6125188484611ffc565b509092915050565b606061252f8260288186613a0b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6060848484846040516020016125839493929190613ea7565b6040516020818303038152906040529050949350505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0073ffffffffffffffffffffffffffffffffffffffff84166125f65781816002015f8282546125eb9190613f24565b909155506126a69050565b73ffffffffffffffffffffffffffffffffffffffff84165f908152602082905260409020548281101561267b576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810182905260448101849052606401610d99565b73ffffffffffffffffffffffffffffffffffffffff85165f9081526020839052604090209083900390555b73ffffffffffffffffffffffffffffffffffffffff83166126d15760028101805483900390556126fc565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020829052604090208054830190555b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161275b91815260200190565b60405180910390a350505050565b5f610c197f000000000000000000000000000000000000000000000000000000000000000083613dd6565b80516060901515806127f55784846040516020016127e192919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b60405160208183030381529060405261281c565b8484338560405160200161280c9493929190613f37565b6040516020818303038152906040525b9150935093915050565b5f80612833858585611957565b909250905061284286836129c9565b94509492505050565b612853612db0565b825161285e90612a23565b50602083015115612876576128768360200151612af7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a4506040518060a001604052808963ffffffff1681526020016128d28a6119ab565b81526020018881526020018781526020015f8760200151111515815250846040518363ffffffff1660e01b815260040161290d929190613c46565b6080604051808303815f875af1158015612929573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f289190613f8f565b61295561223d565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036129a18482613ff5565b5060048101611c978382613ff5565b6129b861223d565b6122c781612c16565b6110ca61223d565b73ffffffffffffffffffffffffffffffffffffffff8216612a18576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610d99565b610f3c825f8361259c565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612a91576040517f8dce522700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612af373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016337f000000000000000000000000000000000000000000000000000000000000000085612c27565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b859190614111565b905073ffffffffffffffffffffffffffffffffffffffff8116612bd4576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3c73ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085612c27565b612c1e61223d565b6118f981612cbc565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611c97908590612d11565b612cc461223d565b73ffffffffffffffffffffffffffffffffffffffff8116611719576040517fb586360400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8060205f8451602086015f885af180612d30576040513d5f823e3d81fd5b50505f513d91508115612d47578060011415612d61565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611c97576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610d99565b60405180606001604052805f80191681526020015f67ffffffffffffffff168152602001612def60405180604001604052805f81526020015f81525090565b905290565b5f5b83811015612e0e578181015183820152602001612df6565b50505f910152565b5f8151808452612e2d816020860160208601612df4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610e496020830184612e16565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715612ec157612ec1612e71565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f0e57612f0e612e71565b604052919050565b5f67ffffffffffffffff821115612f2f57612f2f612e71565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112612f6a575f80fd5b8135612f7d612f7882612f16565b612ec7565b818152846020838601011115612f91575f80fd5b816020850160208301375f918101602001919091529392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f9575f80fd5b5f805f60608486031215612fe0575f80fd5b833567ffffffffffffffff80821115612ff7575f80fd5b61300387838801612f5b565b94506020860135915080821115613018575f80fd5b5061302586828701612f5b565b925050604084013561303681612fad565b809150509250925092565b5f8060408385031215613052575f80fd5b823561305d81612fad565b946020939093013593505050565b5f60e0828403121561307b575f80fd5b50919050565b5f60208284031215613091575f80fd5b813567ffffffffffffffff8111156130a7575f80fd5b6110e68482850161306b565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b8381101561314a578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261313787890182612e16565b97505093820193908201906001016130ed565b505087516060880152505050602085015160808501525090506110e6565b5f6060828403121561307b575f80fd5b5f8083601f840112613188575f80fd5b50813567ffffffffffffffff81111561319f575f80fd5b6020830191508360208285010111156131b6575f80fd5b9250929050565b5f805f805f805f60e0888a0312156131d3575f80fd5b6131dd8989613168565b965060608801359550608088013567ffffffffffffffff80821115613200575f80fd5b61320c8b838c01613178565b909750955060a08a0135915061322182612fad565b90935060c08901359080821115613236575f80fd5b506132438a828b01613178565b989b979a50959850939692959293505050565b5f805f60608486031215613268575f80fd5b833561327381612fad565b9250602084013561328381612fad565b929592945050506040919091013590565b803563ffffffff811681146132a7575f80fd5b919050565b5f80604083850312156132bd575f80fd5b61305d83613294565b80151581146118f9575f80fd5b5f80604083850312156132e4575f80fd5b823567ffffffffffffffff8111156132fa575f80fd5b6133068582860161306b565b9250506020830135613317816132c6565b809150509250929050565b815181526020808301519082015260408101610c19565b803561ffff811681146132a7575f80fd5b5f806040838503121561335b575f80fd5b61336483613294565b915061337260208401613339565b90509250929050565b5f6020828403121561338b575f80fd5b8135610e4981612fad565b5f805f8060a085870312156133a9575f80fd5b6133b38686613168565b9350606085013567ffffffffffffffff8111156133ce575f80fd5b6133da87828801613178565b90945092505060808501356133ee81612fad565b939692955090935050565b5f8083601f840112613409575f80fd5b50813567ffffffffffffffff811115613420575f80fd5b6020830191508360208260051b85010111156131b6575f80fd5b5f806020838503121561344b575f80fd5b823567ffffffffffffffff811115613461575f80fd5b61346d858286016133f9565b90969095509350505050565b5f60208284031215613489575f80fd5b610e4982613294565b5f805f80606085870312156134a5575f80fd5b6134ae85613294565b93506134bc60208601613339565b9250604085013567ffffffffffffffff8111156134d7575f80fd5b6134e387828801613178565b95989497509550505050565b5f805f8385036080811215613502575f80fd5b843567ffffffffffffffff811115613518575f80fd5b6135248782880161306b565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215613556575f80fd5b50602084019150606084013561303681612fad565b5f60c0820190508351825267ffffffffffffffff602085015116602083015260408401516135a6604084018280518252602090810151910152565b5082516080830152602083015160a0830152610e49565b5f80604083850312156135ce575f80fd5b82356135d981612fad565b9150602083013561331781612fad565b5f606082840312156135f9575f80fd5b610e498383613168565b600181811c9082168061361757607f821691505b60208210810361307b577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181126136ad575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136ea575f80fd5b83018035915067ffffffffffffffff821115613704575f80fd5b6020019150368190038213156131b6575f80fd5b5f60208284031215613728575f80fd5b610e4982613339565b601f82111561193457805f5260205f20601f840160051c810160208510156137565750805b601f840160051c820191505b818110156117b1575f8155600101613762565b67ffffffffffffffff83111561378d5761378d612e71565b6137a18361379b8354613603565b83613731565b5f601f8411600181146137f1575f85156137bb5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556117b1565b5f838152602081207fffffffffffff