42 txs
9.7k calls
constructor
constructor((string name, string symbol, uint256 amplificationParameter, string version) params, address vault)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
computeBalance
viewfunction computeBalance(uint256[] balancesLiveScaled18, uint256 tokenInIndex, uint256 invariantRatio) view returns (uint256 newBalance)
computeInvariant
viewfunction computeInvariant(uint256[] balancesLiveScaled18, uint8 rounding) view returns (uint256)
decimals
purefunction decimals() pure returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getActionId
viewfunction getActionId(bytes4 selector) view returns (bytes32)
getAggregateFeePercentages
viewfunction getAggregateFeePercentages() view returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage)
getAmplificationParameter
viewfunction getAmplificationParameter() view returns (uint256 value, bool isUpdating, uint256 precision)
getAmplificationState
viewfunction getAmplificationState() view returns (tuple amplificationState, uint256 precision)
getCurrentLiveBalances
viewfunction getCurrentLiveBalances() view returns (uint256[] balancesLiveScaled18)
getMaximumInvariantRatio
purefunction getMaximumInvariantRatio() pure returns (uint256)
getMaximumSwapFeePercentage
purefunction getMaximumSwapFeePercentage() pure returns (uint256)
getMinimumInvariantRatio
purefunction getMinimumInvariantRatio() pure returns (uint256)
getMinimumSwapFeePercentage
purefunction getMinimumSwapFeePercentage() pure returns (uint256)
getRate
viewfunction getRate() view returns (uint256)
getStablePoolDynamicData
viewfunction getStablePoolDynamicData() view returns (tuple data)
getStablePoolImmutableData
viewfunction getStablePoolImmutableData() view returns (tuple data)
getStaticSwapFeePercentage
viewfunction getStaticSwapFeePercentage() view returns (uint256)
getTokenInfo
viewfunction getTokenInfo() view returns (address[] tokens, tuple[] tokenInfo, uint256[] balancesRaw, uint256[] lastBalancesLiveScaled18)
getTokens
viewfunction getTokens() view returns (address[] tokens)
getVault
viewfunction getVault() view returns (address)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
onSwap
viewfunction onSwap(tuple request) view returns (uint256)
PERMIT_TYPEHASH
viewfunction PERMIT_TYPEHASH() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
version
viewfunction version() view returns (string)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
emitApproval
nonpayablefunction emitApproval(address owner, address spender, uint256 amount)
emitTransfer
nonpayablefunction emitTransfer(address from, address to, uint256 amount)
incrementNonce
nonpayablefunction incrementNonce()
permit
nonpayablefunction permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
startAmplificationParameterUpdate
nonpayablefunction startAmplificationParameterUpdate(uint256 rawEndValue, uint256 endTime)
stopAmplificationParameterUpdate
nonpayablefunction stopAmplificationParameterUpdate()
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
events
AmpUpdateStarted
event AmpUpdateStarted(uint256 startValue, uint256 endValue, uint256 startTime, uint256 endTime)
AmpUpdateStopped
event AmpUpdateStopped(uint256 currentValue)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
EIP712DomainChanged
event EIP712DomainChanged()
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
errors
AmplificationFactorTooHigh
error AmplificationFactorTooHigh()
AmplificationFactorTooLow
error AmplificationFactorTooLow()
AmpUpdateAlreadyStarted
error AmpUpdateAlreadyStarted()
AmpUpdateDurationTooShort
error AmpUpdateDurationTooShort()
AmpUpdateNotStarted
error AmpUpdateNotStarted()
AmpUpdateRateTooFast
error AmpUpdateRateTooFast()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC2612ExpiredSignature
error ERC2612ExpiredSignature(uint256 deadline)
ERC2612InvalidSigner
error ERC2612InvalidSigner(address signer, address owner)
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidShortString
error InvalidShortString()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SenderIsNotVault
error SenderIsNotVault(address sender)
SenderNotAllowed
error SenderNotAllowed()
StableComputeBalanceDidNotConverge
error StableComputeBalanceDidNotConverge()
StableInvariantDidNotConverge
error StableInvariantDidNotConverge()
StringTooLong
error StringTooLong(string str)
ZeroDivision
error ZeroDivision()
creation bytecode
0x6101e0806040523461082a576143e3803803809161001d828561082e565b8339810160408282031261082a5781516001600160401b03811161082a57820190608092838383031261082a57604051918483016001600160401b038111848210176106035760405283516001600160401b03811161082a5781610082918601610851565b835260208401516001600160401b03811161082a57816100a3918601610851565b60208401908152604080860151908501526060850151909490916001600160401b03831161082a576020926100d89201610851565b60608401819052910151916001600160a01b038316830361082a578051935160408051959086016001600160401b03811187821017610603576040526001865260208601603160f81b815261012c826108a6565b6101205261013987610a29565b6101405281516020830120968760e05251902095610100968088524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84526040830152606082015246898201523060a082015260a0815260c0810181811060018060401b038211176106035760405251902087523060c0526101608590528051906001600160401b0382116106035760035490600182811c92168015610820575b60208310146105e55781601f8493116107b2575b50602090601f831160011461072a575f9261071f575b50508160011b915f199060031b1c1916176003555b8051906001600160401b0382116106035760045490600182811c92168015610715575b60208310146105e55781601f8493116106aa575b50602090601f8311600114610622575f92610617575b50508160011b915f199060031b1c1916176004555b610180903382526101a0928484526101c0948552805160018060401b03811161060357600591825490600182811c921680156105f9575b60208310146105e55781601f849311610597575b50602090601f8311600114610533575f92610528575b50508160011b915f199060031b1c19161790555b60016040820151106105195761138860408201511161050a57604001516103e8908181029181830414901517156104f6576001600160401b0381116104df57600654906001600160401b03811663ffffffff42116104c7574280891b63ffffffff60801b16604093841b6fffffffffffffffff0000000000000000166001600160c01b03199095168317949094179390931760a09390931b63ffffffff60a01b1692909217600655519081527fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a023390602090a1604051936138839586610b60873951856132b8015260a05185613384015260c05185613289015260e051856133070152518461332d0152610120518461146d015261014051846114960152610160518481816102d90152818161045b0152818161068f015281816109090152818161098401528181610a0301528181610afc01528181611187015281816113e1015281816117fb0152818161194601528181611ddc015281816120c40152818161231401528181612766015281816129c20152612fa301525183612c6b015251826130690152518181816107e001528181610d5b01528181610e1f0152818161108201526115ab0152f35b6306dfcc6560e41b5f5260206004524260245260445ffd5b6306dfcc6560e41b5f52604060045260245260445ffd5b634e487b7160e01b5f52601160045260245ffd5b6309b80d3960e41b5f5260045ffd5b63ab92332360e01b5f5260045ffd5b015190505f806102e9565b5f858152602081209350601f198516905b81811061057f5750908460019594939210610567575b505050811b0190556102fd565b01515f1960f88460031b161c191690555f808061055a565b92936020600181928786015181550195019301610544565b909150835f5260205f20601f8401851c810191602085106105db575b90601f8594939201861c01905b8181106105cd57506102d3565b5f81558493506001016105c0565b90915081906105b3565b634e487b7160e01b5f52602260045260245ffd5b91607f16916102bf565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610273565b60045f90815293507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b91905b601f198416851061068f576001945083601f19811610610677575b505050811b01600455610288565b01515f1960f88460031b161c191690555f8080610669565b8181015183556020948501946001909301929091019061064e565b60045f529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c81016020851061070e575b90849392915b601f830160051c8201811061070057505061025d565b5f81558594506001016106ea565b50806106e4565b91607f1691610249565b015190505f80610211565b60035f90815293507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b91905b601f1984168510610797576001945083601f1981161061077f575b505050811b01600355610226565b01515f1960f88460031b161c191690555f8080610771565b81810151835560209485019460019093019290910190610756565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c81019160208510610816575b90601f859493920160051c01905b81811061080857506101fb565b5f81558493506001016107fb565b90915081906107ed565b91607f16916101e7565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761060357604052565b81601f8201121561082a578051906001600160401b0382116106035760405192610885601f8401601f19166020018561082e565b8284526020838301011161082a57815f9260208093018386015e8301015290565b80516020908181101561091c5750601f8251116108de57808251920151908083106108d057501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610603575f54926001938481811c91168015610a1f575b838210146105e557601f81116109ec575b5081601f841160011461098a57509282939183925f9461097f575b50501b915f199060031b1c1916175f5560ff90565b015192505f8061096a565b919083601f1981165f8052845f20945f905b888383106109d257505050106109ba575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f80806109ad565b85870151885590960195948501948793509081019061099c565b5f805284601f845f20920160051c820191601f860160051c015b828110610a1457505061094f565b5f8155018590610a06565b90607f169061093e565b805160209081811015610a535750601f8251116108de57808251920151908083106108d057501790565b9192916001600160401b0381116106035760019182548381811c91168015610b55575b828210146105e557601f8111610b22575b5080601f8311600114610ac25750819293945f92610ab7575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610aa0565b90601f19831695845f52825f20925f905b888210610b0b5750508385969710610af3575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610ae6565b808785968294968601518155019501930190610ad3565b835f5283601f835f20920160051c820191601f850160051c015b828110610b4a575050610a87565b5f8155018490610b3c565b90607f1690610a7656fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146123f45750806306fdde031461234b578063095ea7b31461227d57806316a0b3e0146121cb57806318160ddd146121b157806321da5e191461213257806323b872dd1461205357806323de665114611ff2578063273c1adf14611fd05780632f1a0bc914611c2d57806330adf81f14611bf2578063313ce56714611bd65780633644e51514611bbb57806354fd4d5014611b115780635687f2b814611aae5780635c1e6259146118f9578063627cdcb9146118d0578063654cf15d146118ad578063679aefce146118925780636daccffa1461186057806370a082311461178c57806372c98186146116565780637ecebe001461161157806381fa807c1461154e57806384b0196e14611457578063851c1bb3146114055780638d928af8146113b457806395d89b41146112b7578063984de9e8146111f8578063a9059cbb146110ef578063aa6ca80814611029578063abb1dc4414610dc4578063b156aa0a14610d02578063b677fa5614610cdf578063cbd4e28014610839578063ce20ece714610819578063d335b0cf14610785578063d505accf146104d8578063dd62ed3e146103dc5763eb0f24d6146101d6575f80fd5b346103a257806003193601126103a2576101ee612ff7565b6101f6612d0f565b156103b457807fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233602061022985946131ec565b60065467ffffffffffffffff82169173ffffffff0000000000000000000000000000000061025642613231565b916fffffffffffffffff0000000000000000857fffffffffffffffff00000000000000000000000000000000000000000000000077ffffffff00000000000000000000000000000000000000008660a01b169616179160401b16179160801b161717600655604051908152a173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040519160208301526020825261030f82612513565b803b156103b05761038183929183926040519485809481937fc80882470000000000000000000000000000000000000000000000000000000083527f416d7055706461746553746f7070656400000000000000000000000000000000600484015260406024840152604483019061245c565b03925af180156103a5576103925750f35b61039b906124e3565b6103a25780f35b80fd5b6040513d84823e3d90fd5b5050fd5b6004827f4673a675000000000000000000000000000000000000000000000000000000008152fd5b50346103a25760406003193601126103a2576103f6612481565b9060206104016124a4565b92606473ffffffffffffffffffffffffffffffffffffffff91828060405197889586947f927da1050000000000000000000000000000000000000000000000000000000086523060048701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104cc5790610495575b602090604051908152f35b506020813d6020116104c4575b816104af6020938361252f565b810103126104c0576020905161048a565b5f80fd5b3d91506104a2565b604051903d90823e3d90fd5b50346103a25760e06003193601126103a2576104f2612481565b6104fa6124a4565b90604435916064359160843560ff8116810361078157834211610755576105488273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b9060405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff9687861694856040850152888816606085015289608085015260a084015260c083015260c0825260e082019082821067ffffffffffffffff83111761072857879361062b93610622936040525190206105e0613272565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220613713565b909291926137a2565b168181036106fa576040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015285166024820152604481018790528790602081606481857f00000000000000000000000000000000000000000000000000000000000000008c165af180156103a5576106c0575080f35b6020813d6020116106f2575b816106d96020938361252f565b810103126106ee576106ea90612710565b5080f35b5080fd5b3d91506106cc565b7f4b800e46000000000000000000000000000000000000000000000000000000008752600452602452604485fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b602486857f62791302000000000000000000000000000000000000000000000000000000008252600452fd5b8580fd5b50346103a257806003193601126103a257604051907fb45090f900000000000000000000000000000000000000000000000000000000825230600483015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104cc579061049557602090604051908152f35b50346103a257806003193601126103a257602060405164e8d4a510008152f35b50346103a257806003193601126103a2576040516101c0810181811067ffffffffffffffff8211176107285760405260608152606060208201528160408201528160608201528160808201528160a08201528160c08201528160e08201528161010082015281610120820152816101408201528161016082015281610180820152816101a08201526040517f535cfd8a000000000000000000000000000000000000000000000000000000008152306004820152828160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c578391610cbd575b5081526040517f7e361bde000000000000000000000000000000000000000000000000000000008152306004820152828160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c578391610c99575b5060208201526040517fb45090f900000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c578391610c67575b506040820152610a4161271d565b6060820152610a4e612979565b6080820152610a5b612d0f565b151561014083015260a082015263ffffffff6060610a776127c8565b67ffffffffffffffff81511660c085015267ffffffffffffffff60208201511660e0850152826040820151166101008501520151166101208201526040517ff29486a10000000000000000000000000000000000000000000000000000000081523060048201526101a08160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c57610120929391610c2b575b5060e081015115156101608401526101008101511515610180840152015115156101a08201526040518091602082526101a0610b93610b7d83516101c060208701526101e086019061260c565b6020840151601f1986830301604087015261260c565b916040810151606085015260608101516080850152608081015160a085015260a081015160c085015260c081015160e085015260e081015161010085015263ffffffff6101008201511661012085015263ffffffff6101208201511661014085015261014081015115156101608501526101608101511515610180850152610180810151151582850152015115156101c08301520390f35b610c4f91506101a03d6101a011610c55575b610c47818361252f565b810190612b25565b5f610b30565b503d610c3d565b6040513d85823e3d90fd5b90506020813d602011610c91575b81610c826020938361252f565b810103126104c057515f610a33565b3d9150610c75565b610cb591503d8085833e610cad818361252f565b810190612935565b90505f6109b4565b610cd991503d8085833e610cd1818361252f565b810190612cb2565b5f610939565b50346103a257806003193601126103a2576020604051670853a0d2313c00008152f35b50346103a257806003193601126103a2576040517f535cfd8a000000000000000000000000000000000000000000000000000000008152306004820152818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103a55782610da59392610da9575b505060405191829160208352602083019061260c565b0390f35b610dbd92503d8091833e610cd1818361252f565b5f80610d8f565b50346103a257806003193601126103a25773ffffffffffffffffffffffffffffffffffffffff906040517f67e0e0760000000000000000000000000000000000000000000000000000000081523060048201528181602481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103a55782809481928294610eec575b50610e6a6040519560808752608087019061263f565b9060209086830382880152818089519485815201980193905b838210610eb0578780610da589610ea28d8b858203604087015261260c565b90838203606085015261260c565b909192939783606060019260408c518051610eca81612688565b8352808501518716858401520151151560408201520199019493920190610e83565b955092509250503d8083853e610f02818561252f565b83016080848203126110255783519267ffffffffffffffff938481116106ee5782610f2e91870161282d565b9160209485870151818111610fc657870182601f82011215610fc657805190610f5682612552565b97610f64604051998a61252f565b82895280890181606080950284010192868411611021578201905b838210610fca5750505050506040870151818111610fc65782610fa39189016128d4565b966060810151918211610fc657610fbb9291016128d4565b91939491925f610e54565b8380fd5b848288031261102157604051610fdf816124f7565b8251600281101561101d578152838301518b8116810361101d57848201528591849161100d60408601612710565b6040820152815201910190610f7f565b8980fd5b8780fd5b8280fd5b50346103a257806003193601126103a2576040517fca4f2803000000000000000000000000000000000000000000000000000000008152306004820152818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103a55782610da593926110cc575b505060405191829160208352602083019061263f565b6110e892503d8091833e6110e0818361252f565b8101906128ab565b5f806110b6565b50346103a25760406003193601126103a25761116d602061110e612481565b6040517fbeabacc800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b03818573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af180156103a5576111bf575b602060405160018152f35b6020813d6020116111f0575b816111d86020938361252f565b810103126106ee576111ea9150612710565b5f6111b4565b3d91506111cb565b50346103a25760406003193601126103a25760043567ffffffffffffffff81116106ee5761122a90369060040161256a565b6024359160028310156103a2575061124a90611244612d0f565b506133aa565b908161125c575b602082604051908152f35b80611268600192612688565b03611277576020905b90611251565b6001810180911161128a57602090611271565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50346103a257806003193601126103a2576040516004545f826112d9836126bf565b91828252602093600190856001821691825f1461137657505060011461131b575b506113079250038361252f565b610da560405192828493845283019061245c565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b85831061135e5750506113079350820101856112fa565b80548389018501528794508693909201918101611347565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261130795151560051b85010192508791506112fa9050565b50346103a257806003193601126103a257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103a25760206003193601126103a257600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036103a257602061144f83612c40565b604051908152f35b50346103a257806003193601126103a2576114917f0000000000000000000000000000000000000000000000000000000000000000613523565b6114ba7f0000000000000000000000000000000000000000000000000000000000000000613655565b60405192602084019380851067ffffffffffffffff8611176107285761152f610da593611521966040528383526040519687967f0f00000000000000000000000000000000000000000000000000000000000000885260e0602089015260e088019061245c565b90868203604088015261245c565b9146606086015230608086015260a085015283820360c085015261260c565b50346103a257806003193601126103a2576040517ff29486a10000000000000000000000000000000000000000000000000000000081523060048201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c5c57604093926115f4575b505060608282015191015182519182526020820152f35b61160a9250803d10610c5557610c47818361252f565b5f806115dd565b50346103a25760206003193601126103a257604060209173ffffffffffffffffffffffffffffffffffffffff611645612481565b168152600283522054604051908152f35b50346103a25760206003198181360112611025576004359067ffffffffffffffff908183116117885760e0908336030112610fc6576040519160e083018381108382111761072857604052806004013560028110156107815783526024810135848401526044810135828111610781576116d6906004369184010161256a565b6040840152606481013560608401526084810135608084015260a481013573ffffffffffffffffffffffffffffffffffffffff811681036104c05760a084015260c48101359082821161078157019036602383011215611788576004820135908111610728576040519161175385601f19601f850116018461252f565b8183523660248383010111610781579381819692602461144f9701838601378301015260c0820152611783612f8c565b6129f5565b8480fd5b50346103a257602090816003193601126103a2576044826117ab612481565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa9182156104cc5791611833575b50604051908152f35b90508181813d8311611859575b61184a818361252f565b810103126104c057515f61182a565b503d611840565b50346103a257806003193601126103a257606061187b612d0f565b604051918252151560208201526103e86040820152f35b50346103a257806003193601126103a257602061144f612979565b50346103a257806003193601126103a257602060405167016345785d8a00008152f35b50346103a257806003193601126103a257335f9081526002602052604090208054600101905580f35b50346103a257806003193601126103a25760405190611917826124f7565b6060825260209182810160608152604082019183835273ffffffffffffffffffffffffffffffffffffffff94857f0000000000000000000000000000000000000000000000000000000000000000166040517fca4f28030000000000000000000000000000000000000000000000000000000081523060048201528681602481855afa908115611aa3579187916024938391611a89575b508552604051928380927f7e361bde0000000000000000000000000000000000000000000000000000000082523060048301525afa908115611a7e578691611a65575b508395929195526103e88452604051948086526080860191519660608288015287518093528160a08801980193905b838210611a4c57878088611a418c8a51601f1985830301604086015261260c565b905160608301520390f35b8451811689529782019793820193600190910190611a20565b611a7991503d8088833e610cad818361252f565b6119f1565b6040513d88823e3d90fd5b611a9d91503d8085833e6110e0818361252f565b5f6119ae565b6040513d89823e3d90fd5b50346103a25760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925611ae0366125ca565b92919390611aec612f8c565b73ffffffffffffffffffffffffffffffffffffffff809160405195865216941692a380f35b50346103a257806003193601126103a2576040516005545f82611b33836126bf565b91828252602093600190856001821691825f14611376575050600114611b6057506113079250038361252f565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b858310611ba35750506113079350820101856112fa565b80548389018501528794508693909201918101611b8c565b50346103a257806003193601126103a257602061144f613272565b50346103a257806003193601126103a257602060405160128152f35b50346103a257806003193601126103a25760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b50346104c05760406003193601126104c057600435602435611c4d612ff7565b60018210611fa8576113888211611f8057611c68428261280d565b62015180808210611f5857611c7b612d0f565b929092611f30576103e89485810295818704148115171561128a5783861115611f0a576305265c000291858304148515171561128a57600291611cc1611cc7928561281a565b9061318f565b11611ee257611cd8611cde916131ec565b926131ec565b611cf0611cea42613231565b92613231565b67ffffffffffffffff809416916006548582169473ffffffff0000000000000000000000000000000063ffffffff936fffffffffffffffff0000000000000000877fffffffffffffffff00000000000000000000000000000000000000000000000077ffffffff0000000000000000000000000000000000000000888716988a169960a01b169616179160401b16179160801b1617176006557f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf26080604051858152866020820152836040820152846060820152a173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016936040519360208501526040840152606083015260808201526080815260a0810192818410908411176107285782604052813b156104c0575f9183837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6082947fc80882470000000000000000000000000000000000000000000000000000000084527f416d70557064617465537461727465640000000000000000000000000000000060a4820152604060c4820152611eb860e482018261245c565b0301925af18015611ed757611ecb575080f35b611ed591506124e3565b005b6040513d5f823e3d90fd5b7f1c708b92000000000000000000000000000000000000000000000000000000005f5260045ffd5b5081830291838304148315171561128a57600291611cc1611f2b928761281a565b611cc7565b7f2f301e7e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd6b022a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f9b80d390000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fab923323000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104c0575f6003193601126104c0576020604051674563918244f400008152f35b346104c05760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612023366125ca565b9291939061202f612f8c565b73ffffffffffffffffffffffffffffffffffffffff809160405195865216941692a3005b346104c05760846020612065366125ca565b6040517f15dacbea00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff93841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af18015611ed7576120fb57602060405160018152f35b6020813d60201161212a575b816121146020938361252f565b810103126104c05761212590612710565b6111b4565b3d9150612107565b346104c0575f6003193601126104c0575f6060604051612151816124c7565b828152826020820152826040820152015260a061216c6127c8565b6040519067ffffffffffffffff8082511683526020820151166020830152606060408201519163ffffffff809316604085015201511660608201526103e86080820152f35b346104c0575f6003193601126104c057602061144f61271d565b346104c05760606003193601126104c05760043567ffffffffffffffff81116104c0576121fc90369060040161256a565b612204612d0f565b509061221281611244612d0f565b8061226b575b9060209261222c61144f936044359061281a565b91602435926001670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150291612dd7565b906001820180921161128a5790612218565b346104c05760406003193601126104c0576122fa602061229b612481565b6040517fe1f21c6700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015611ed7576120fb57602060405160018152f35b346104c0575f6003193601126104c0576040516003545f8261236c836126bf565b91828252602093600190856001821691825f1461137657505060011461239957506113079250038361252f565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8583106123dc5750506113079350820101856112fa565b805483890185015287945086939092019181016123c5565b346104c05760206003193601126104c057600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036104c0577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036104c057565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036104c057565b6080810190811067ffffffffffffffff82111761072857604052565b67ffffffffffffffff811161072857604052565b6060810190811067ffffffffffffffff82111761072857604052565b6040810190811067ffffffffffffffff82111761072857604052565b90601f601f19910116810190811067ffffffffffffffff82111761072857604052565b67ffffffffffffffff81116107285760051b60200190565b9080601f830112156104c057602090823561258481612552565b93612592604051958661252f565b81855260208086019260051b8201019283116104c057602001905b8282106125bb575050505090565b813581529083019083016125ad565b60031960609101126104c05773ffffffffffffffffffffffffffffffffffffffff9060043582811681036104c0579160243590811681036104c0579060443590565b9081518082526020808093019301915f5b82811061262b575050505090565b83518552938101939281019260010161261d565b9081518082526020808093019301915f5b82811061265e575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101612650565b6002111561269257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90600182811c92168015612706575b60208310146126d957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916126ce565b519081151582036104c057565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611ed7575f91612799575090565b90506020813d6020116127c0575b816127b46020938361252f565b810103126104c0575190565b3d91506127a7565b604051906127d5826124c7565b81606060065467ffffffffffffffff80821684528160401c16602084015263ffffffff90818160801c16604085015260a01c16910152565b9190820391821161128a57565b8181029291811591840414171561128a57565b9080601f830112156104c05781519060209161284881612552565b93612856604051958661252f565b81855260208086019260051b8201019283116104c057602001905b82821061287f575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036104c0578152908301908301612871565b906020828203126104c057815167ffffffffffffffff81116104c0576128d1920161282d565b90565b9080601f830112156104c0578151906020916128ef81612552565b936128fd604051958661252f565b81855260208086019260051b8201019283116104c057602001905b828210612926575050505090565b81518152908301908301612918565b9190916040818403126104c05780519267ffffffffffffffff938481116104c057816129629184016128d4565b9360208301519081116104c0576128d192016128d4565b6040517f4f037ee700000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611ed7575f91612799575090565b6040810190612a078251611244612d0f565b9081612b20575b612a16612d0f565b50918151612a2381612688565b612a2c81612688565b612ac657612a9391602091612a8d612a79612a99975193606081015193856080830151978893015199612a698b612a638985612dc3565b51612ca5565b612a738884612dc3565b52612dd7565b95612a848385612dc3565b51039183612dc3565b52612dc3565b5161280d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161128a5790565b612b0b91612b12945190612a8d612af760608301518095856020608087015196015199612a698b612a938985612dc3565b95612b028385612dc3565b51019183612dc3565b519061280d565b6001810180911161128a5790565b612a0e565b6101a0918190038281126104c05760405192610140928385019285841067ffffffffffffffff8511176107285760809084604052126104c057612b67836124c7565b612b7081612710565b8352612b7e60208201612710565b926101609384870152612b9360408301612710565b926101809384880152612ba860608401612710565b9087015285526080810151602086015260a0810151604086015260c0810151606086015260e081015164ffffffffff811681036104c05760808601526101008082015163ffffffff811681036104c057612c3994612c2f9160a0890152612c2361012097612c17898701612710565b60c08b01528501612710565b60e08901528301612710565b9086015201612710565b9082015290565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152612c9f816124f7565b51902090565b9190820180921161128a57565b906020828203126104c057815167ffffffffffffffff81116104c0576128d192016128d4565b8115612ce2570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b612d176127c8565b67ffffffffffffffff80825116906020830151169163ffffffff60608160408401511692015116908142105f14612d81576001938380821115612d695782612d659403924203910302612cd8565b0191565b5081612d7c930391420390840302612cd8565b900391565b5050505f9091565b805115612d965760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051821015612d965760209160051b010190565b92919092612de78451809261281a565b90612df185612d89565b51612e0582612dff88612d89565b5161281a565b916001905b8588828410612f4a57612e26949350612b0b9250889150612dc3565b90612e31848061281a565b956103e8958688029088820488148915171561128a57612e5b612e6192611cc1612e68968961281a565b92612dc3565b519061281a565b9380840290848204148415171561128a57612e94612e9a92612e8e612ea4958894612cd8565b90612ca5565b95612ca5565b611cc18584612ca5565b5f5b60ff8110612ed6577fdcbda05c000000000000000000000000000000000000000000000000000000005f5260045ffd5b81612eea85612ee5838061281a565b612ca5565b908060011b908082046002149015171561128a57600191611cc186612f128a612f1795612ca5565b61280d565b928381811115612f3a57031115612f32576001905b01612ea6565b509250505090565b90031115612f3257600190612f2c565b612f8491612f6d84612f68879899612e6160019899612f7297612dc3565b61281a565b612cd8565b94612f7d858b612dc3565b5190612ca5565b920190612e0a565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303612fcb57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6130237fffffffff000000000000000000000000000000000000000000000000000000005f3516612c40565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115611ed75784925f92613153575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215611ed7575f9261311d575b5050156130f557565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d831161314c575b613134818361252f565b810103126104c05761314590612710565b5f806130ec565b503d61312a565b8092508391933d8311613188575b61316b818361252f565b810103126104c057519082821682036104c057839190606461309b565b503d613161565b9080156131c4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201046001019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b67ffffffffffffffff90818111613201571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b63ffffffff90818111613242571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52602060045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480613381575b156132da577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176107285760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146132b1565b90915f9183515f5b81811061350b575083156135025792906133cd84839261281a565b915f907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18840196848811916001986001890194858a11965b60ff8210613435577f010ca320000000000000000000000000000000000000000000000000000000005f5260045ffd5b805f5b8d8d82106134d45750509081878661346c8f95612f688f9897612e8e839a6134646103e897889261281a565b04918961281a565b9161128a5761347c8c938861281a565b049161128a576134958f9392612e8e61349b948d61281a565b90612cd8565b9283818111156134c5570311156134b6578b905b0190613405565b50985050505050505050915090565b900311156134b6578b906134af565b909691939c926134e7856134f59261281a565b61349585612dff8b87612dc3565b96019b929095919b613438565b50509150505f90565b9361351c600191612f7d8789612dc3565b94016133b2565b60ff81146135775760ff811690601f821161354f576040519161354583612513565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491613589836126bf565b8083529260209060019081811690811561361257506001146135b4575b50506128d19250038261252f565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b8284106135fa57506128d19450505081016020015f806135a6565b855487850183015294850194869450928101926135df565b9050602093506128d19592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f806135a6565b60ff81146136775760ff811690601f821161354f576040519161354583612513565b506040515f8160019160015461368c816126bf565b808452936020916001811690811561361257506001146136b45750506128d19250038261252f565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b8284106136fb57506128d19450505081016020015f806135a6565b855487850183015294850194869450928101926136e0565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613797579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611ed7575f5173ffffffffffffffffffffffffffffffffffffffff81161561378d57905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561269257806137b4575050565b600181036137e4577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361381857507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146138225750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea26469706673582212205f0545cd780f72372cb3a41777cfaea685cd547404869d46a606879390daf1da64736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001e42616c616e6365722041617665204c69646f20774554482d7773744554480000000000000000000000000000000000000000000000000000000000000000001541617665204c69646f20774554482d777374455448000000000000000000000000000000000000000000000000000000000000000000000000000000000000487b226e616d65223a22537461626c65506f6f6c222c2276657273696f6e223a312c226465706c6f796d656e74223a2232303234313230352d76332d737461626c652d706f6f6c227d000000000000000000000000000000000000000000000000