0 txs
0 calls
constructor
constructor((address asset, uint256 decimals, address ammStorage, address ammTreasury, address assetManagement, address spread, uint256 unwindingFeeRate, uint256 unwindingFeeTreasuryPortionRate, uint256 maxLengthOfLiquidatedSwapsPerLeg, uint256 timeBeforeMaturityAllowedToCloseSwapByCommunity, uint256 timeBeforeMaturityAllowedToCloseSwapByBuyerTenor28days, uint256 timeBeforeMaturityAllowedToCloseSwapByBuyerTenor60days, uint256 timeBeforeMaturityAllowedToCloseSwapByBuyerTenor90days, uint256 minLiquidationThresholdToCloseBeforeMaturityByCommunity, uint256 minLiquidationThresholdToCloseBeforeMaturityByBuyer, uint256 minLeverage, uint256 timeAfterOpenAllowedToCloseSwapWithUnwindingTenor28days, uint256 timeAfterOpenAllowedToCloseSwapWithUnwindingTenor60days, uint256 timeAfterOpenAllowedToCloseSwapWithUnwindingTenor90days) poolCfg, address iporOracle_)
functions
ammAssetManagement
viewfunction ammAssetManagement() view returns (address)
ammStorage
viewfunction ammStorage() view returns (address)
ammTreasury
viewfunction ammTreasury() view returns (address)
asset
viewfunction asset() view returns (address)
decimals
viewfunction decimals() view returns (uint256)
getPoolConfiguration
viewfunction getPoolConfiguration() view returns (tuple)
iporOracle
viewfunction iporOracle() view returns (address)
liquidationLegLimit
viewfunction liquidationLegLimit() view returns (uint256)
minLeverage
viewfunction minLeverage() view returns (uint256)
minLiquidationThresholdToCloseBeforeMaturityByBuyer
viewfunction minLiquidationThresholdToCloseBeforeMaturityByBuyer() view returns (uint256)
minLiquidationThresholdToCloseBeforeMaturityByCommunity
viewfunction minLiquidationThresholdToCloseBeforeMaturityByCommunity() view returns (uint256)
spread
viewfunction spread() view returns (address)
timeAfterOpenAllowedToCloseSwapWithUnwindingTenor28days
viewfunction timeAfterOpenAllowedToCloseSwapWithUnwindingTenor28days() view returns (uint256)
timeAfterOpenAllowedToCloseSwapWithUnwindingTenor60days
viewfunction timeAfterOpenAllowedToCloseSwapWithUnwindingTenor60days() view returns (uint256)
timeAfterOpenAllowedToCloseSwapWithUnwindingTenor90days
viewfunction timeAfterOpenAllowedToCloseSwapWithUnwindingTenor90days() view returns (uint256)
timeBeforeMaturityAllowedToCloseSwapByBuyerTenor28days
viewfunction timeBeforeMaturityAllowedToCloseSwapByBuyerTenor28days() view returns (uint256)
timeBeforeMaturityAllowedToCloseSwapByBuyerTenor60days
viewfunction timeBeforeMaturityAllowedToCloseSwapByBuyerTenor60days() view returns (uint256)
timeBeforeMaturityAllowedToCloseSwapByBuyerTenor90days
viewfunction timeBeforeMaturityAllowedToCloseSwapByBuyerTenor90days() view returns (uint256)
timeBeforeMaturityAllowedToCloseSwapByCommunity
viewfunction timeBeforeMaturityAllowedToCloseSwapByCommunity() view returns (uint256)
unwindingFeeRate
viewfunction unwindingFeeRate() view returns (uint256)
unwindingFeeTreasuryPortionRate
viewfunction unwindingFeeTreasuryPortionRate() view returns (uint256)
version
purefunction version() pure returns (uint256)
closeSwapsWstEth
nonpayablefunction closeSwapsWstEth(address beneficiary, uint256[] payFixedSwapIds, uint256[] receiveFixedSwapIds, tuple riskIndicatorsInput) returns (tuple[] closedPayFixedSwaps, tuple[] closedReceiveFixedSwaps)
emergencyCloseSwapsWstEth
nonpayablefunction emergencyCloseSwapsWstEth(uint256[] payFixedSwapIds, uint256[] receiveFixedSwapIds, tuple riskIndicatorsInput) returns (tuple[] closedPayFixedSwaps, tuple[] closedReceiveFixedSwaps)
events
CloseSwap
event CloseSwap(uint256 indexed swapId, address asset, uint256 closeTimestamp, address liquidator, uint256 transferredToBuyer, uint256 transferredToLiquidator)
SwapUnwind
event SwapUnwind(address asset, uint256 indexed swapId, int256 swapPnlValueToDate, int256 swapUnwindAmount, uint256 unwindFeeLPAmount, uint256 unwindFeeTreasuryAmount)
errors
AssetMismatch
error AssetMismatch(address assetOne, address assetTwo)
creation bytecode
0x610300604052348015610010575f80fd5b5060405161631d38038061631d83398101604081905261002f916102d0565b8181818161004e825f01516001600160a01b031661023160201b60201c565b6001600160a01b03908116608052602083015160a05261006f908216610231565b6001600160a01b0390811660c05260a083015161008c9116610231565b6001600160a01b0390811660e05260408301516100a99116610231565b6001600160a01b039081166101005260608301516100c79116610231565b6001600160a01b03908116610120908152608080850151831661014090815260c086015161016090815260e08701516101809081526101008801516101a0908152948801516101c0908152928801516101e0908152918801516102009081529088015161022090815294880151610240908152928801516102605290870151610280528601516102a052918501516102c0529301516102e0529184015161017092169050610231565b505f610140516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d591906103f8565b90506080516001600160a01b0316816001600160a01b03161461022757608051604051634e83a9b960e01b81526001600160a01b03808416600483015290911660248201526044015b60405180910390fd5b505050505061044d565b604080518082019091526008815267049504f525f3030360c41b60208201525f906001600160a01b0383166102795760405162461bcd60e51b815260040161021e9190610418565b5090919050565b60405161026081016001600160401b03811182821017156102af57634e487b7160e01b5f52604160045260245ffd5b60405290565b80516001600160a01b03811681146102cb575f80fd5b919050565b5f808284036102808112156102e3575f80fd5b6102608112156102f1575f80fd5b506102fa610280565b610303846102b5565b81526020848101519082015261031b604085016102b5565b604082015261032c606085016102b5565b606082015261033d608085016102b5565b608082015261034e60a085016102b5565b60a082015260c0848101519082015260e08085015190820152610100808501519082015261012080850151908201526101408085015190820152610160808501519082015261018080850151908201526101a080850151908201526101c080850151908201526101e0808501519082015261020080850151908201526102208085015190820152610240808501519082015291506103ef61026084016102b5565b90509250929050565b5f60208284031215610408575f80fd5b610411826102b5565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c0516102e051615c2f6106ee5f395f81816102a00152818161082801526119e501525f81816102710152818161080201526119a501525f81816102ee015281816107dc015261196501525f818161019601526107b601525f818161036301528181610790015261136f01525f81816104bd0152818161076a015261134901525f818161046f0152818161074401526118ea01525f818161015c0152818161071e01526118aa01525f8181610223015281816106f8015261186a01525f81816103ab015281816106d2015261139501525f81816103f9015281816106ac0152818161085401528181610880015261095601525f81816103d201528181610686015261152001525f81816103150152818161066001526114fa01525f818161024a01528181610602015261218601525f8181610448015281816105d301528181610cf7015281816114b30152818161204a0152818161215a01528181612253015281816122e901526123f201525f8181610496015281816105a401528181610b3001528181610e0501528181610ea4015281816110f6015261148401525f81816102c70152818161063101528181610db6015281816110a7015261145501525f818161033c0152610a4401525f81816101bd0152818161057e01528181610d1d01528181611fd8015281816120050152818161211f015281816121f3015261241e01525f81816101e40152818161054f01528181610a1a01528181610d4b01528181610f7b01528181610fe8015281816112b00152818161141001528181612077015281816120ef0152818161231101526123d00152615c2f5ff3fe608060405234801561000f575f80fd5b5060043610610153575f3560e01c80637761022f116100bf578063b80945e911610079578063b80945e91461041b578063b9d281f314610430578063bf93f99114610443578063c44a67311461046a578063e96b181c14610491578063f5a36ac9146104b8575f80fd5b80637761022f146103375780637a6ddbd71461035e5780637a793b6f1461038557806399a8e87c146103a65780639ca77d25146103cd578063b444f9d2146103f4575f80fd5b806353b415bc1161011057806353b415bc1461026c57806354fd4d50146102935780635b9e9d001461029b5780635c25c76c146102c2578063612da241146102e957806365f8667514610310575f80fd5b80631dbc14ca1461015757806320f6f76f14610191578063313ce567146101b857806338d52e0f146101df5780633fcc99381461021e5780635019005a14610245575b5f80fd5b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b6102067f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610188565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b6102067f000000000000000000000000000000000000000000000000000000000000000081565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b6107d361017e565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b6102067f000000000000000000000000000000000000000000000000000000000000000081565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b6102067f000000000000000000000000000000000000000000000000000000000000000081565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b61039861039336600461510e565b6104df565b6040516101889291906151e1565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b6104236104f9565b6040516101889190615205565b61039861043e36600461533f565b61050e565b6102067f000000000000000000000000000000000000000000000000000000000000000081565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b6102067f000000000000000000000000000000000000000000000000000000000000000081565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b6060806104ed85858561052a565b90969095509350505050565b610501614e9b565b610509610539565b905090565b60608061051d8686868661084f565b9097909650945050505050565b6060806104ed3386868661084f565b610541614e9b565b6040518061026001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000815250905090565b6060807f00000000000000000000000000000000000000000000000000000000000000008551111580156108a457507f0000000000000000000000000000000000000000000000000000000000000000845111155b6040518060400160405280600881526020016749504f525f33313560c01b815250906108ec5760405162461bcd60e51b81526004016108e391906153dd565b60405180910390fd5b505f806108fb885f898861092e565b9450915061090c886001888861092e565b935090506109238861091e8385615426565b610cec565b505094509492505050565b815160408051808201909152600881526749504f525f33313560c01b60208201525f916060917f00000000000000000000000000000000000000000000000000000000000000008211156109955760405162461bcd60e51b81526004016108e391906153dd565b50806001600160401b038111156109ae576109ae614faf565b6040519080825280602002602001820160405280156109f257816020015b604080518082019091525f80825260208201528152602001906001900390816109cc5790505b5091506109fd614f47565b604051635491ab6f60e01b81524260048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301525f917f000000000000000000000000000000000000000000000000000000000000000090911690635491ab6f906044016040805180830381865afa158015610a8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aae9190615439565b90505f805b848114610cde57888181518110610acc57610acc61546a565b602002602001015191505f82116040518060400160405280600881526020016724a827a92f99981b60c11b81525090610b185760405162461bcd60e51b81526004016108e391906153dd565b506040516378d1e31d60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f1a3c63a90610b67908d9086906004016154af565b61018060405180830381865afa158015610b83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba791906154ed565b935060018461016001516001811115610bc257610bc261547e565b03610ca1575f8a6001811115610bda57610bda61547e565b03610c0457610bf38b845f01518560200151878c610d77565b610bfd9088615426565b9650610c67565b60018a6001811115610c1857610c1861547e565b03610c3157610bf38b845f01518560200151878c611068565b6040805180820182526008815267125413d497cccccd60c21b6020820152905162461bcd60e51b81526108e391906004016153dd565b604051806040016040528083815260200160011515815250868281518110610c9157610c9161546a565b6020026020010181905250610cd6565b60405180604001604052808381526020015f1515815250868281518110610cca57610cca61546a565b60200260200101819052505b600101610ab3565b505050505094509492505050565b8015610d7357610d737f000000000000000000000000000000000000000000000000000000000000000083610d41847f0000000000000000000000000000000000000000000000000000000000000000611153565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906111b8565b5050565b5f804290505f610da285604001518660c001518760e00151886101200151896101000151878c611218565b90505f610db283838a8989611260565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166329d8c3a887608001516001811115610df957610df961547e565b88606001518960e001517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663722810898c885f015189606001518a608001518d6040518663ffffffff1660e01b8152600401610e629594939291906155b2565b6080604051808303815f875af1158015610e7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea29190615697565b7f00000000000000000000000000000000000000000000000000000000000000006040518663ffffffff1660e01b8152600401610ee39594939291906156f6565b5f604051808303815f87803b158015610efa575f80fd5b505af1158015610f0c573d5f803e3d5ffd5b505050505f610f4b8a610f22846080015161157a565b610f2f856060015161157a565b8551610f3b9190615766565b610f459190615766565b896115e7565b602084015190965090915015610fe057865160408084015160608086015160808088015185516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152602081018b905295860194909452918401528201527fa9b0ec2cc51e5de0842e7860ced772c2d6f9426f0b72841595548d3557aeabf89060a00160405180910390a25b8651604080517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168252602082018890528d1681830152606081018490526080810188905290517fce32d7ddca5b1d67776de259bd551dd18ed3ae4da75b77b8374e63d371fd01a09181900360a00190a25050505095945050505050565b5f804290505f61109385604001518660c001518760e00151886101200151896101000151878c611659565b90505f6110a383838a8989611260565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166329d8c3a8876080015160018111156110ea576110ea61547e565b88606001518960e001517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fec80ba48c885f015189606001518a608001518d6040518663ffffffff1660e01b8152600401610e629594939291906155b2565b5f816012036111635750816111b2565b601282111561119357611177601283615785565b61118290600a61587b565b61118c9084615886565b90506111b2565b61118c836111a2846012615785565b6111ad90600a61587b565b611684565b92915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526112129085906116ac565b50505050565b5f805f6112298a8989898989611784565b915091506112528961123a8461157a565b6112438461157a565b61124d9190615766565b6117f7565b9a9950505050505050505050565b61128f6040518060a001604052805f81526020015f151581526020015f81526020015f81526020015f81525090565b5f6113df604051806101c00160405280336001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200189815260200186602001516001600160a01b03168152602001866040015181526020018660c001518152602001866060015160028111156113205761132061547e565b8152602001866101600151600181111561133c5761133c61547e565b81526020018881526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020016113c6876060015161184e565b81526020016113d88760600151611949565b9052611a09565b1515602084015290506113f181611c4a565b6020820151151560010361156c576115556040518061018001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001611445611d89565b6001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018981526020018881526020018781526020018681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020018561154e90615993565b9052611da1565b865260808601526060850152506040830152611570565b8582525b5095945050505050565b5f6001600160ff1b038211156115e35760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016108e3565b5090565b5f805f6115f385611f7a565b90505f85131561162b57611621868560200151866101400151848860c0015161161c9190615426565b611f91565b9093509150611650565b61164a868560200151866101400151848860c0015161161c9190615785565b90935091505b50935093915050565b5f805f61166a8a8989898989611784565b915091506112528961167b8361157a565b6112438561157a565b5f81611691600282615a13565b61169b9085615426565b6116a59190615a13565b9392505050565b5f611700826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124519092919063ffffffff16565b905080515f14806117205750808060200190518101906117209190615a26565b61177f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108e3565b505050565b5f80878410156040518060400160405280600881526020016749504f525f33313960c01b815250906117c95760405162461bcd60e51b81526004016108e391906153dd565b506117de87876117d98b88615785565b612467565b91506117ea858461247c565b9050965096945050505050565b5f806118028461157a565b90505f83131561181d578083121561118c57829150506111b2565b61182681615a45565b83121561183e5761183681615a45565b9150506111b2565b829150506111b2565b5092915050565b5f808260028111156118625761186261547e565b0361188e57507f0000000000000000000000000000000000000000000000000000000000000000919050565b60018260028111156118a2576118a261547e565b036118ce57507f0000000000000000000000000000000000000000000000000000000000000000919050565b60028260028111156118e2576118e261547e565b0361190e57507f0000000000000000000000000000000000000000000000000000000000000000919050565b6040805180820182526008815267049504f525f3333360c41b6020820152905162461bcd60e51b81526108e391906004016153dd565b919050565b5f8082600281111561195d5761195d61547e565b0361198957507f0000000000000000000000000000000000000000000000000000000000000000919050565b600182600281111561199d5761199d61547e565b036119c957507f0000000000000000000000000000000000000000000000000000000000000000919050565b60028260028111156119dd576119dd61547e565b0361190e57507f0000000000000000000000000000000000000000000000000000000000000000919050565b5f8060018360e001516001811115611a2357611a2361547e565b14611a3357506001925f92509050565b611a3b612498565b6001600160a01b0316835f01516001600160a01b031614611c40575f611a65846101000151611f7a565b90505f611a7b8560a0015186610120015161247c565b90505f611a9086608001518760c001516124a1565b905080866040015110611b075781831080611aae57508560a0015183145b15611b0257611ac48660200151875f0151612513565b1515600114801590611aef575085606001516001600160a01b0316865f01516001600160a01b031614155b15611b0257506002955f95509350505050565b611c3c565b5f611b1b8760a0015188610140015161247c565b9050808410158015611b2c57508284105b80611b3a57508660a0015184145b15611b8f57611b508760200151885f0151612513565b1515600114801590611b7b575086606001516001600160a01b0316875f01516001600160a01b031614155b15611b8f57506002965f9650945050505050565b80841015611c3a5786606001516001600160a01b0316875f01516001600160a01b031603611c10576040870151610180880151611bcc9084615785565b1115611c0b576101a08701516080880151611be79042615785565b11611bfc575060049660019650945050505050565b505f9660019650945050505050565b611c3a565b6040870151610160880151611c259084615785565b1115611c3a57506003965f9650945050505050565b505b5050505b505f928392509050565b6001816004811115611c5e57611c5e61547e565b03611c9957604080518082018252600881526749504f525f33303760c01b6020820152905162461bcd60e51b81526108e391906004016153dd565b6002816004811115611cad57611cad61547e565b03611ce8576040805180820182526008815267049504f525f3332360c41b6020820152905162461bcd60e51b81526108e391906004016153dd565b6003816004811115611cfc57611cfc61547e565b03611d3757604080518082018252600881526749504f525f33323760c01b6020820152905162461bcd60e51b81526108e391906004016153dd565b6004816004811115611d4b57611d4b61547e565b03611d8657604080518082018252600881526749504f525f33343160c01b6020820152905162461bcd60e51b81526108e391906004016153dd565b50565b5f611d92612549565b546001600160a01b0316919050565b5f805f805f611dd96040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f876101000151608001516001811115611df557611df561547e565b03611e5357611e3e875f0151886101000151606001516002811115611e1c57611e1c61547e565b60018a602001518b61016001516020015161255590949392919063ffffffff16565b9050611e4c87600183612699565b9550611eba565b6001876101000151608001516001811115611e7057611e7061547e565b03610c3157611ead875f0151886101000151606001516002811115611e9757611e9761547e565b5f60208b01516101608c01515193929190612555565b9050611e4c875f83612699565b611ed787610100015160c00151878960c0015161124d9190615a5f565b9150611ef28761010001518860a0015189610120015161288e565b9450611efd8561157a565b82611f1089610100015160c0015161157a565b611f1a9190615a5f565b136040518060400160405280600881526020016749504f525f33333960c01b81525090611f5a5760405162461bcd60e51b81526004016108e391906153dd565b50611f6a85886101400151612945565b9698959750959491935090915050565b5f808212611f8857816111b2565b6111b282615a45565b5f80846001600160a01b0316866001600160a01b031603611fbd57611fb68484615426565b9250611fc0565b50825b5f611fcb8285615426565b1115612448575f611ffc847f0000000000000000000000000000000000000000000000000000000000000000611153565b90505f612029837f0000000000000000000000000000000000000000000000000000000000000000611153565b6120339083615426565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529192505f917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156120bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e09190615a7e565b90508181116123c3575f6121137f0000000000000000000000000000000000000000000000000000000000000000612969565b90505f61223f612143847f00000000000000000000000000000000000000000000000000000000000000006129e0565b60405163ce96cb7760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152612217917f00000000000000000000000000000000000000000000000000000000000000009091169063ce96cb7790602401602060405180830381865afa1580156121cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121f19190615a7e565b7f00000000000000000000000000000000000000000000000000000000000000006129e0565b612221898c615426565b604086015161223a9061ffff16655af3107a4000615886565b612a20565b90505f8112156123c0576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663666ffbe561228961228484615a45565b612ab0565b6040518263ffffffff1660e01b81526004016122a791815260200190565b5f604051808303815f87803b1580156122be575f80fd5b505af11580156122d0573d5f803e3d5ffd5b50506040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001692506370a082319150602401602060405180830381865afa158015612358573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061237c9190615a7e565b84111560405180604001604052806008815260200167049504f525f3334360c41b815250906123be5760405162461bcd60e51b81526004016108e391906153dd565b505b50505b6124186001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008a866111b8565b612442837f00000000000000000000000000000000000000000000000000000000000000006129e0565b94505050505b94509492505050565b606061245f84845f85612b01565b949350505050565b5f61245f6124758385615886565b8590612bd8565b5f6116a561248a8385615886565b670de0b6b3a7640000611684565b5f611d92612c32565b5f808260028111156124b5576124b561547e565b036124c75761118c836224ea00615426565b60018260028111156124db576124db61547e565b036124ed5761118c83624f1a00615426565b60028260028111156125015761250161547e565b0361190e5761118c836276a700615426565b5f8061251d612c3d565b6001600160a01b039485165f908152602091825260408082209590961681529390525050205460ff1690565b5f806111b26009612c49565b6125886040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f61259587878787612c6a565b9050826001600160a01b03166125b88860e0015183612d1890919063ffffffff16565b6001600160a01b03161460405180604001604052806008815260200167049504f525f3032360c41b815250906126015760405162461bcd60e51b81526004016108e391906153dd565b50428760c00151116040518060400160405280600881526020016749504f525f30313960c01b815250906126485760405162461bcd60e51b81526004016108e391906153dd565b506040518060c00160405280885f01518152602001886020015181526020018860400151815260200188606001518152602001886080015181526020018860a0015181525091505095945050505050565b5f8084606001516001600160a01b0316636c2c986e6040518163ffffffff1660e01b8152600401608060405180830381865afa1580156126db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ff9190615a95565b90505f85608001516001600160a01b0316634fcf9f716040518163ffffffff1660e01b8152600401602060405180830381865afa158015612742573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127669190615a7e565b905061288486610100015160c0015161124d8861010001518960a001518a604001516001600160a01b031663cd98d2d18b6040518061014001604052808f5f01516001600160a01b031681526020018f610100015160e0015181526020018d60a0015181526020018d6060015181526020018b5f015181526020018b6040015181526020018a81526020018f60e0015181526020018d6080015181526020018f61010001516060015160028111156128205761282061547e565b8152506040518363ffffffff1660e01b8152600401612840929190615ada565b602060405180830381865afa15801561285b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287f9190615a7e565b612d3a565b9695505050505050565b5f83604001518310156040518060400160405280600881526020016749504f525f33313960c01b815250906128d65760405162461bcd60e51b81526004016108e391906153dd565b5061245f612916846128f0876040015188606001516124a1565b6128fa9190615785565b61290c90670de0b6b3a7640000615886565b6301e13380611684565b838660e001516129269190615886565b6129309190615886565b6ec097ce7bc90715b34b9f1000000000611684565b5f8061295461248a8486615886565b90506129608185615785565b91509250929050565b604080516060810182525f808252602082018190529181019190915261298d612e67565b6001600160a01b03929092165f90815260209283526040908190208151606081018352905463ffffffff808216835264010000000082041694820194909452600160401b90930461ffff16908301525090565b5f8215612a1957816012036129f65750816111b2565b6012821115612a0e5761118c836111a2601285615785565b611177826012615785565b50816111b2565b5f815f03612a2f57505f61245f565b612a388461157a565b612a9d612a448461157a565b612a5690670de0b6b3a7640000615766565b612a5f8661157a565b612a688861157a565b612a718a61157a565b612a7b9190615a5f565b612a859190615766565b612a8f9190615b62565b670de0b6b3a7640000612e73565b612aa79190615766565b95945050505050565b5f808212156115e35760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f73697469766560448201526064016108e3565b606082471015612b625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108e3565b5f80866001600160a01b03168587604051612b7d9190615b91565b5f6040518083038185875af1925050503d805f8114612bb7576040519150601f19603f3d011682016040523d82523d5f602084013e612bbc565b606091505b5091509150612bcd87838387612f1e565b979650505050505050565b5f80612be8836301e13380611684565b90505f612bfd85670de0b6b3a7640000612f96565b90505f612c1283670de0b6b3a7640000612f96565b90505f612c2783612c2284612fd9565b612fff565b9050612bcd81613286565b5f806111b25f6132b1565b5f806111b260066132b1565b5f620f424082600c811115612c6057612c6061547e565b6111b29190615426565b8351602080860151604080880151606089015160808a015160a08b015160c08c015194515f98612cf898909796918d918d918d9101998a5260208a01989098526040890196909652606080890195909552608088019390935260a087019190915260c0860152901b6bffffffffffffffffffffffff191660e084015260f48301526101148201526101340190565b604051602081830303815290604052805190602001209050949350505050565b5f805f612d2585856132c8565b91509150612d328161330a565b509392505050565b5f80612d4e856040015186606001516124a1565b9050808411156040518060400160405280600881526020016749504f525f33323960c01b81525090612d935760405162461bcd60e51b81526004016108e391906153dd565b505f612d9f8583615785565b90505f86608001516001811115612db857612db861547e565b03612e1a57612dec612dd982886101200151612dd49190615886565b61157a565b612de68860e0015161157a565b90613453565b612e09612dfc612dd48488615886565b612de68960e0015161157a565b612e139190615766565b9250612e5e565b600186608001516001811115612e3257612e3261547e565b03610c3157612e47612dd9612dd48387615886565b612e09612dfc83896101200151612dd49190615886565b50509392505050565b5f806111b260086132b1565b5f805f8412612e825783612e8b565b612e8b84615a45565b90505f808412612e9b5783612ea4565b612ea484615a45565b905084841860ff1d5f80838581612ebd57612ebd6159ff565b049150838581612ecf57612ecf6159ff565b0690505f831215612ef75783600182901b1115612ef257612eef82615ba7565b91505b612f0e565b83600182901b10612f0e57612f0b82615ba7565b91505b5060019091170295945050505050565b60608315612f8c5782515f03612f85576001600160a01b0385163b612f855760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e3565b508161245f565b61245f8383613469565b5f80612fa28385615bbf565b1115612fb657612fb3600184615426565b92505b5f612fc084613493565b90505f612fcc84613493565b90505f61288483836134f6565b5f6111b2612ffa836f1fffb8aa3b295c17f0bbbe87fed0691d60811b612fff565b61378e565b5f617fff60f084811c8216919084901c8116908290036130ad5780617fff03613079576001600160801b03198085169086160361304757505050600160ff1b811682186111b2565b6001600160801b031985851816600160ff1b03613069575050508181176111b2565b5061ffff60ef1b91506111b29050565b600160801b600160ff1b0384165f0361309c575061ffff60ef1b91506111b29050565b505050600160ff1b811682186111b2565b80617fff036130ea57600160801b600160ff1b0385165f036130d9575061ffff60ef1b91506111b29050565b505050600160ff1b821681186111b2565b6001600160701b03608086901c165f8390036131095760019250613110565b600160701b175b6001600160701b03608086901c165f83900361312f5760019250613136565b600160701b175b8082029150815f0361316657600160ff1b87871816613155575f61315b565b600160ff1b5b9450505050506111b2565b928201925f600160e11b83101561319857600160e01b8310156131915761318c83614ade565b61319b565b60e061319b565b60e15b905061407081860110156131b4575f94505f925061324f565b6140e081860110156131f6576140708510156131d957846140700383901c92506131ee565b6140708511156131ee57614070850383901b92505b5f945061324f565b61c0dd818601111561320f57617fff94505f925061324f565b6070811115613226576070810383901c9250613239565b6070811015613239578060700383901b92505b6001600160701b03831692506140df8186010394505b82607086901b888a186001607f1b60801b1660801c6001600160801b0316171760801b955050505050506111b2565b505092915050565b5f80613299670de0b6b3a7640000613493565b90505f6132a68483612fff565b905061245f81614b79565b5f620f4240826008811115612c6057612c6061547e565b5f8082516041036132fc576020830151604084015160608501515f1a6132f087828585614bf8565b94509450505050613303565b505f905060025b9250929050565b5f81600481111561331d5761331d61547e565b036133255750565b60018160048111156133395761333961547e565b036133865760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108e3565b600281600481111561339a5761339a61547e565b036133e75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108e3565b60038160048111156133fb576133fb61547e565b03611d865760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016108e3565b5f8261345f8484614cb2565b6116a59190615766565b8151156134795781518083602001fd5b8060405162461bcd60e51b81526004016108e391906153dd565b5f815f036134a257505f919050565b815f6134ad82614ade565b905060708110156134c6578060700382901b91506134d9565b60708111156134d9576070810382901c91505b613fff0160701b6001600160701b03919091161760801b92915050565b5f617fff60f084811c8216919084901c8116908290036135295780617fff0361309c575061ffff60ef1b91506111b29050565b80617fff0361356c576dffffffffffffffffffffffffffff60801b84161561355b575061ffff60ef1b91506111b29050565b505050808218600160ff1b166111b2565b600160801b600160ff1b0384165f036135ba57600160801b600160ff1b0385165f036135a2575061ffff60ef1b91506111b29050565b505050808218600160ff1b16617fff60f01b176111b2565b6001600160701b03608085901c165f8290036135d957600191506135e0565b600160701b175b6001600160701b03608087901c165f84900361362157801561361c575f61360682614ade565b6001955060e20393840160711901939190911b90505b61362b565b600160701b1760721b5b81818161363a5761363a6159ff565b049050805f0361365757600160ff1b87871816613155575f61315b565b6001606c1b81101561366b5761366b615bd2565b5f600160731b8210156136a957600160721b82101561369e57600160711b8210156136975760706136a1565b60716136a1565b60725b60ff166136b2565b6136b282614ade565b9050836140710181860111156136cf57617fff94505f915061375f565b83818601613ffc0110156136e8575f94505f915061375f565b83818601613f8c011015613734578385613ffc011115613713578385613ffc010382901b915061372c565b8385613ffc01101561372c57613ffc8585030382901c91505b5f945061375f565b6070811115613747576070810382901c91505b6001600160701b038216915083818601613f8d010394505b81607086901b888a186001607f1b60801b1660801c6001600160801b0316171760801b955050505050506111b2565b5f6001607f1b608083901c90811190617fff60f085901c8116916001600160701b031690821480156137bf57508015155b156137d3575061ffff60ef1b949350505050565b61400d8211156137f757826137ed57617fff60f01b612aa7565b5f95945050505050565b613f7f8210156138105750613fff60f01b949350505050565b815f036138205760019150613827565b600160701b175b613fef82111561383d57613fee1982011b61384f565b613fef82101561384f57613fef8290031c5b828015613860575061203760811b81115b1561386f57505f949350505050565b8215801561388e5750713fffffffffffffffffffffffffffffffffff81115b156138a25750617fff60f01b949350505050565b6001600160801b0381169060801c8380156138bc57508115155b156138c8579019906001015b6001607f1b828116156138ec5770016a09e667f3bcc908b2fb1366ea957d3e0260801c5b6001607e1b83161561390f577001306fe0a31b7152de8d5a46305c85edec0260801c5b6001607d1b831615613932577001172b83c7d517adcdf7c8c50eb14a791f0260801c5b6001607c1b8316156139555770010b5586cf9890f6298b92b71842a983630260801c5b6001607b1b831615613978577001059b0d31585743ae7c548eb68ca417fd0260801c5b6001607a1b83161561399b57700102c9a3e778060ee6f7caca4f7a29bde80260801c5b600160791b8316156139be5770010163da9fb33356d84a66ae336dcdfa3f0260801c5b600160781b8316156139e157700100b1afa5abcbed6129ab13ec11dc95430260801c5b600160771b831615613a045770010058c86da1c09ea1ff19d294cf2f679b0260801c5b600160761b831615613a27577001002c605e2e8cec506d21bfc89a23a00f0260801c5b600160751b831615613a4a57700100162f3904051fa128bca9c55c31e5df0260801c5b600160741b831615613a6d577001000b175effdc76ba38e31671ca9397250260801c5b600160731b831615613a9057700100058ba01fb9f96d6cacd4b180917c3d0260801c5b600160721b831615613ab35770010002c5cc37da9491d0985c348c68e7b30260801c5b600160711b831615613ad6577001000162e525ee054754457d59952920260260801c5b600160701b831615613af95770010000b17255775c040618bf4a4ade83fc0260801c5b6001606f1b831615613b1c577001000058b91b5bc9ae2eed81e9b7d4cfab0260801c5b6001606e1b831615613b3f57700100002c5c89d5ec6ca4d7c8acc017b7c90260801c5b6001606d1b831615613b625770010000162e43f4f831060e02d839a9d16d0260801c5b6001606c1b831615613b8557700100000b1721bcfc99d9f890ea069117630260801c5b6001606b1b831615613ba85770010000058b90cf1e6d97f9ca14dbcc16280260801c5b6001606a1b831615613bcb577001000002c5c863b73f016468f6bac5ca2b0260801c5b600160691b831615613bee57700100000162e430e5a18f6119e3c02282a50260801c5b600160681b831615613c11577001000000b1721835514b86e6d96efd1bfe0260801c5b600160671b831615613c3457700100000058b90c0b48c6be5df846c5b2ef0260801c5b600160661b831615613c575770010000002c5c8601cc6b9e94213c72737a0260801c5b600160651b831615613c7a577001000000162e42fff037df38aa2b219f060260801c5b600160641b831615613c9d5770010000000b17217fba9c739aa5819f44f90260801c5b600160631b831615613cc0577001000000058b90bfcdee5acd3c1cedc8230260801c5b600160621b831615613ce357700100000002c5c85fe31f35a6a30da1be500260801c5b600160611b831615613d065770010000000162e42ff0999ce3541b9fffcf0260801c5b600160601b831615613d2957700100000000b17217f80f4ef5aadda455540260801c5b6001605f1b831615613d4c5770010000000058b90bfbf8479bd5a81b51ad0260801c5b6001605e1b831615613d6f577001000000002c5c85fdf84bd62ae30a74cc0260801c5b6001605d1b831615613d9257700100000000162e42fefb2fed257559bdaa0260801c5b6001605c1b831615613db5577001000000000b17217f7d5a7716bba4a9ae0260801c5b6001605b1b831615613dd857700100000000058b90bfbe9ddbac5e109cce0260801c5b6001605a1b831615613dfb5770010000000002c5c85fdf4b15de6f17eb0d0260801c5b600160591b831615613e1e577001000000000162e42fefa494f1478fde050260801c5b600160581b831615613e415770010000000000b17217f7d20cf927c8e94c0260801c5b600160571b831615613e64577001000000000058b90bfbe8f71cb4e4b33d0260801c5b600160561b831615613e8757700100000000002c5c85fdf477b662b269450260801c5b600160551b831615613eaa5770010000000000162e42fefa3ae53369388c0260801c5b600160541b831615613ecd57700100000000000b17217f7d1d351a389d400260801c5b600160531b831615613ef05770010000000000058b90bfbe8e8b2d3d4ede0260801c5b600160521b831615613f13577001000000000002c5c85fdf4741bea6e77e0260801c5b600160511b831615613f3657700100000000000162e42fefa39fe95583c20260801c5b600160501b831615613f59577001000000000000b17217f7d1cfb72b45e10260801c5b6980000000000000000000831615613f8257700100000000000058b90bfbe8e7cc35c3f00260801c5b6940000000000000000000831615613fab5770010000000000002c5c85fdf473e242ea380260801c5b6920000000000000000000831615613fd4577001000000000000162e42fefa39f02b772c0260801c5b6910000000000000000000831615613ffd5770010000000000000b17217f7d1cf7d83c1a0260801c5b6908000000000000000000831615614026577001000000000000058b90bfbe8e7bdcbe2e0260801c5b690400000000000000000083161561404f57700100000000000002c5c85fdf473dea871f0260801c5b69020000000000000000008316156140785770010000000000000162e42fefa39ef44d910260801c5b69010000000000000000008316156140a157700100000000000000b17217f7d1cf79e9490260801c5b688000000000000000008316156140c95770010000000000000058b90bfbe8e7bce5440260801c5b684000000000000000008316156140f1577001000000000000002c5c85fdf473de6eca0260801c5b6820000000000000000083161561411957700100000000000000162e42fefa39ef366f0260801c5b68100000000000000000831615614141577001000000000000000b17217f7d1cf79afa0260801c5b6808000000000000000083161561416957700100000000000000058b90bfbe8e7bcd6d0260801c5b680400000000000000008316156141915770010000000000000002c5c85fdf473de6b20260801c5b680200000000000000008316156141b9577001000000000000000162e42fefa39ef3580260801c5b600160401b8316156141dc5770010000000000000000b17217f7d1cf79ab0260801c5b678000000000000000831615614203577001000000000000000058b90bfbe8e7bcd50260801c5b67400000000000000083161561422a57700100000000000000002c5c85fdf473de6a0260801c5b6720000000000000008316156142515770010000000000000000162e42fefa39ef340260801c5b67100000000000000083161561427857700100000000000000000b17217f7d1cf7990260801c5b67080000000000000083161561429f5770010000000000000000058b90bfbe8e7bcc0260801c5b6704000000000000008316156142c6577001000000000000000002c5c85fdf473de50260801c5b6702000000000000008316156142ed57700100000000000000000162e42fefa39ef20260801c5b670100000000000000831615614314577001000000000000000000b17217f7d1cf780260801c5b668000000000000083161561433a57700100000000000000000058b90bfbe8e7bb0260801c5b66400000000000008316156143605770010000000000000000002c5c85fdf473dd0260801c5b6620000000000000831615614386577001000000000000000000162e42fefa39ee0260801c5b66100000000000008316156143ac5770010000000000000000000b17217f7d1cf60260801c5b66080000000000008316156143d2577001000000000000000000058b90bfbe8e7a0260801c5b66040000000000008316156143f857700100000000000000000002c5c85fdf473c0260801c5b660200000000000083161561441e5770010000000000000000000162e42fefa39d0260801c5b660100000000000083161561444457700100000000000000000000b17217f7d1ce0260801c5b658000000000008316156144695770010000000000000000000058b90bfbe8e60260801c5b6540000000000083161561448e577001000000000000000000002c5c85fdf4720260801c5b652000000000008316156144b357700100000000000000000000162e42fefa380260801c5b651000000000008316156144d8577001000000000000000000000b17217f7d1b0260801c5b650800000000008316156144fd57700100000000000000000000058b90bfbe8d0260801c5b650400000000008316156145225770010000000000000000000002c5c85fdf460260801c5b65020000000000831615614547577001000000000000000000000162e42fefa20260801c5b6501000000000083161561456c5770010000000000000000000000b17217f7d00260801c5b648000000000831615614590577001000000000000000000000058b90bfbe70260801c5b6440000000008316156145b457700100000000000000000000002c5c85fdf30260801c5b6420000000008316156145d85770010000000000000000000000162e42fef90260801c5b6410000000008316156145fc57700100000000000000000000000b17217f7c0260801c5b6408000000008316156146205770010000000000000000000000058b90bfbd0260801c5b640400000000831615614644577001000000000000000000000002c5c85fde0260801c5b64020000000083161561466857700100000000000000000000000162e42fee0260801c5b64010000000083161561468c577001000000000000000000000000b17217f60260801c5b63800000008316156146af57700100000000000000000000000058b90bfa0260801c5b63400000008316156146d25770010000000000000000000000002c5c85fc0260801c5b63200000008316156146f5577001000000000000000000000000162e42fd0260801c5b63100000008316156147185770010000000000000000000000000b17217e0260801c5b630800000083161561473b577001000000000000000000000000058b90be0260801c5b630400000083161561475e57700100000000000000000000000002c5c85e0260801c5b63020000008316156147815770010000000000000000000000000162e42e0260801c5b63010000008316156147a457700100000000000000000000000000b172160260801c5b628000008316156147c65770010000000000000000000000000058b90a0260801c5b624000008316156147e8577001000000000000000000000000002c5c840260801c5b6220000083161561480a57700100000000000000000000000000162e410260801c5b6210000083161561482c577001000000000000000000000000000b17200260801c5b6208000083161561484e57700100000000000000000000000000058b8f0260801c5b620400008316156148705770010000000000000000000000000002c5c70260801c5b62020000831615614892577001000000000000000000000000000162e30260801c5b620100008316156148b45770010000000000000000000000000000b1710260801c5b6180008316156148d5577001000000000000000000000000000058b80260801c5b6140008316156148f657700100000000000000000000000000002c5b0260801c5b6120008316156149175770010000000000000000000000000000162d0260801c5b61100083161561493857700100000000000000000000000000000b160260801c5b6108008316156149595770010000000000000000000000000000058a0260801c5b61040083161561497a577001000000000000000000000000000002c40260801c5b61020083161561499b577001000000000000000000000000000001610260801c5b6101008316156149bc577001000000000000000000000000000000b00260801c5b60808316156149dc577001000000000000000000000000000000570260801c5b60408316156149fc5770010000000000000000000000000000002b0260801c5b6020831615614a1c577001000000000000000000000000000000150260801c5b6010831615614a3c5770010000000000000000000000000000000a0260801c5b6008831615614a5c577001000000000000000000000000000000040260801c5b6004831615614a7c577001000000000000000000000000000000010260801c5b84614a9d57600f81901c6001600160701b03169050613fff82019150614acb565b613ffe8211614ac257600f81901c6001600160701b0316905081613fff039150614acb565b5f91613fee19011c5b60709190911b1760801b95945050505050565b5f808211614aea575f80fd5b5f600160801b8310614afe57608092831c92015b600160401b8310614b1157604092831c92015b6401000000008310614b2557602092831c92015b620100008310614b3757601092831c92015b6101008310614b4857600892831c92015b60108310614b5857600492831c92015b60048310614b6857600292831c92015b600283106111b25760010192915050565b5f617fff60f083901c16613fff811015614b9557505f92915050565b6001607f1b608084901c10614ba8575f80fd5b6140fe811115614bb6575f80fd5b600160701b6001600160701b03608085901c161761406f821015614be05761406f8290031c6116a5565b61406f8211156116a55761406e1982011b9392505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115614c2d57505f90506003612448565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614c7e573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116614ca6575f60019250925050612448565b965f9650945050505050565b5f80614cca83614cc56301e1338061157a565b612e73565b90505f614cdf85670de0b6b3a7640000614d0f565b90505f614cf483670de0b6b3a7640000614d0f565b90505f614d0483612c2284612fd9565b9050612bcd81614d45565b5f80614d1b8385615be6565b1315614d2f57614d2c600184615a5f565b92505b5f614d3984614d70565b90505f612fcc84614d70565b5f80614d58670de0b6b3a7640000613493565b90505f614d658483612fff565b905061245f81614dfa565b5f815f03614d7f57505f919050565b5f808313614d8f57825f03614d91565b825b90505f614d9d82614ade565b90506070811015614db6578060700382901b9150614dc9565b6070811115614dc9576070810382901c91505b6001600160701b03909116613fff820160701b17905f841215614df0576001607f1b821791505b5060801b92915050565b5f617fff60f083901c166140fe811115614e12575f80fd5b613fff811015614e2457505f92915050565b600160701b6001600160701b03608085901c161761406f821015614e4e5761406f8290031c614e60565b61406f821115614e605761406e1982011b5b6001607f1b608085901c10614e8857600160ff1b811115614e7f575f80fd5b5f039392505050565b6001600160ff1b038111156116a5575f80fd5b6040518061026001604052805f6001600160a01b031681526020015f81526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b60408051610180810182525f8082526020820181905291810182905290606082019081526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001811115614faa57614faa61547e565b905290565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715614fe557614fe5614faf565b60405290565b60405161018081016001600160401b0381118282101715614fe557614fe5614faf565b604051608081016001600160401b0381118282101715614fe557614fe5614faf565b60405161010081016001600160401b0381118282101715614fe557614fe5614faf565b604051601f8201601f191681016001600160401b038111828210171561507b5761507b614faf565b604052919050565b5f82601f830112615092575f80fd5b81356001600160401b038111156150ab576150ab614faf565b8060051b6150bb60208201615053565b918252602081850181019290810190868411156150d6575f80fd5b6020860192505b838310156128845782358252602092830192909101906150dd565b5f60408284031215615108575f80fd5b50919050565b5f805f60608486031215615120575f80fd5b83356001600160401b03811115615135575f80fd5b61514186828701615083565b93505060208401356001600160401b0381111561515c575f80fd5b61516886828701615083565b92505060408401356001600160401b03811115615183575f80fd5b61518f868287016150f8565b9150509250925092565b5f8151808452602084019350602083015f5b828110156151d757815180518752602090810151151581880152604090960195909101906001016151ab565b5093949350505050565b604081525f6151f36040830185615199565b8281036020840152612aa78185615199565b81516001600160a01b03168152610260810160208301516020830152604083015161523b60408401826001600160a01b03169052565b50606083015161525660608401826001600160a01b03169052565b50608083015161527160808401826001600160a01b03169052565b5060a083015161528c60a08401826001600160a01b03169052565b5060c083015160c083015260e083015160e08301526101008301516101008301526101208301516101208301526101408301516101408301526101608301516101608301526101808301516101808301526101a08301516101a08301526101c08301516101c08301526101e08301516101e083015261020083015161020083015261022083015161022083015261024083015161024083015292915050565b6001600160a01b0381168114611d86575f80fd5b5f805f8060808587031215615352575f80fd5b843561535d8161532b565b935060208501356001600160401b03811115615377575f80fd5b61538387828801615083565b93505060408501356001600160401b0381111561539e575f80fd5b6153aa87828801615083565b92505060608501356001600160401b038111156153c5575f80fd5b6153d1878288016150f8565b91505092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156111b2576111b2615412565b5f604082840312801561544a575f80fd5b50615453614fc3565b825181526020928301519281019290925250919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b60028110611d8657611d8661547e565b6154ab81615492565b9052565b604081016154bc84615492565b9281526020015290565b80516119448161532b565b805160038110611944575f80fd5b805160028110611944575f80fd5b5f6101808284031280156154ff575f80fd5b50615508614feb565b82518152615518602084016154c6565b602082015260408381015190820152615533606084016154d1565b6060820152615544608084016154df565b608082015260a0838101519082015260c0808401519082015260e0808401519082015261010080840151908201526101208084015190820152610140808401519082015261559561016084016154df565b6101608201529392505050565b600381106154ab576154ab61547e565b855181526020808701516102008301916155d6908401826001600160a01b03169052565b506040870151604083015260608701516155f360608401826155a2565b50608087015161560660808401826154a2565b5060a087015160a083015260c087015160c083015260e087015160e083015261010087015161010083015261012087015161012083015261014087015161014083015261016087015161565d6101608401826154a2565b5085610180830152846101a0830152836101c0830152826101e08301529695505050505050565b805163ffffffff81168114611944575f80fd5b5f60808284031280156156a8575f80fd5b506156b161500e565b6156ba83615684565b81526156c860208401615684565b60208201526156d960408401615684565b60408201526156ea60608401615684565b60608201529392505050565b858152610100810161570b60208301876155a2565b84604083015263ffffffff845116606083015263ffffffff602085015116608083015263ffffffff60408501511660a083015263ffffffff60608501511660c083015260018060a01b03831660e08301529695505050505050565b8181035f83128015838313168383128216171561184757611847615412565b818103818111156111b2576111b2615412565b6001815b60018411156157d3578085048111156157b7576157b7615412565b60018416156157c557908102905b60019390931c92800261579c565b935093915050565b5f826157e9575060016111b2565b816157f557505f6111b2565b816001811461580b576002811461581557615831565b60019150506111b2565b60ff84111561582657615826615412565b50506001821b6111b2565b5060208310610133831016604e8410600b8410161715615854575081810a6111b2565b6158605f198484615798565b805f190482111561587357615873615412565b029392505050565b5f6116a583836157db565b80820281158282048414176111b2576111b2615412565b5f82601f8301126158ac575f80fd5b81356001600160401b038111156158c5576158c5614faf565b6158d8601f8201601f1916602001615053565b8181528460208386010111156158ec575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6101008284031215615919575f80fd5b615921615030565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c08084013590820152905060e08201356001600160401b0381111561597b575f80fd5b6159878482850161589d565b60e08301525092915050565b5f604082360312156159a3575f80fd5b6159ab614fc3565b82356001600160401b038111156159c0575f80fd5b6159cc36828601615908565b82525060208301356001600160401b038111156159e7575f80fd5b6159f336828601615908565b60208301525092915050565b634e487b7160e01b5f52601260045260245ffd5b5f82615a2157615a216159ff565b500490565b5f60208284031215615a36575f80fd5b815180151581146116a5575f80fd5b5f600160ff1b8201615a5957615a59615412565b505f0390565b8082018281125f83128015821682158216171561327e5761327e615412565b5f60208284031215615a8e575f80fd5b5051919050565b5f6080828403128015615aa6575f80fd5b50615aaf61500e565b8251815260208084015190820152604080840151908201526060928301519281019290925250919050565b6101608101615ae884615492565b83825282516001600160a01b03166020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015160e083015260e0830151610100830152610100830151610120830152610120830151612d326101408401826155a2565b8082025f8212600160ff1b84141615615b7d57615b7d615412565b81810583148215176111b2576111b2615412565b5f82518060208501845e5f920191825250919050565b5f60018201615bb857615bb8615412565b5060010190565b5f82615bcd57615bcd6159ff565b500690565b634e487b7160e01b5f52600160045260245ffd5b5f82615bf457615bf46159ff565b50079056fea264697066735822122091f367d1fb902afd492fbf5a1cd3fdb9fc50d0a15e5be158db0fe8eb6a6ffa6564736f6c634300081a0033000000000000000000000000c1cba3fcea344f92d9239c08c0568f6f2f0ee452000000000000000000000000000000000000000000000000000000000000001200000000000000000000000029399d76921e23314ae259cf5e17116f48ae65b700000000000000000000000009388e18d5c331449c6ef636726dd1fd007b8ddf000000000000000000000000c4c00d8b323f37527eeda27c87412378be9f68ec0000000000000000000000003d21adf3b0ff5b3fdffc8d5ffa6634bd6594992400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000003f480000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000dcef33a6f8380000000000000000000000000000000000000000000000000000dbd2fc137a300000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000000000000000093a8000000000000000000000000000000000000000000000000000000000004f1a00000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000085564fb392e18a84a64343a3fb65839206936c0f