0 txs
5.7k calls
constructor
constructor(address _dolomiteMargin, address _dolomiteRegistry, address _weth, address _arb)
functions
availableTokens
viewfunction availableTokens() view returns (uint256)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
baseURI
viewfunction baseURI() view returns (string)
closePositionWindow
viewfunction closePositionWindow() view returns (uint256)
DOLOMITE_MARGIN_OWNER
viewfunction DOLOMITE_MARGIN_OWNER() view returns (address)
DOLOMITE_MARGIN
viewfunction DOLOMITE_MARGIN() view returns (address)
emergencyWithdrawTax
viewfunction emergencyWithdrawTax() view returns (uint256)
forceClosePositionTax
viewfunction forceClosePositionTax() view returns (uint256)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getEffectiveLevelByUser
viewfunction getEffectiveLevelByUser(address _user) view returns (uint256)
getLevelByUser
viewfunction getLevelByUser(address _user) view returns (uint256)
getLevelExpirationTimestampByUser
viewfunction getLevelExpirationTimestampByUser(address _user) view returns (uint256)
getLevelRequestByUser
viewfunction getLevelRequestByUser(address _user) view returns (uint256)
grandfatheredIdCutoff
viewfunction grandfatheredIdCutoff() view returns (uint256)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
isHandler
viewfunction isHandler(address _handler) view returns (bool)
isVestingActive
viewfunction isVestingActive() view returns (bool)
levelBoostThreshold
viewfunction levelBoostThreshold() view returns (uint8)
levelExpirationWindow
viewfunction levelExpirationWindow() view returns (uint256)
levelRequestFee
viewfunction levelRequestFee() view returns (uint256)
name
viewfunction name() view returns (string)
oToken
viewfunction oToken() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
ownerSetOToken
purefunction ownerSetOToken(address) pure
promisedTokens
viewfunction promisedTokens() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenByIndex
viewfunction tokenByIndex(uint256 index) view returns (uint256)
tokenOfOwnerByIndex
viewfunction tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)
tokenURI
viewfunction tokenURI(uint256 _tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
vestingPositions
purefunction vestingPositions(uint256 _nftId) pure returns (tuple)
approve
nonpayablefunction approve(address to, uint256 tokenId)
closePositionAndBuyTokens
nonpayablefunction closePositionAndBuyTokens(uint256 _nftId, uint256 _fromAccountNumber, uint256 _toAccountNumber, uint256 _maxPaymentAmount)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(uint256 _nftId)
extendDurationForPosition
nonpayablefunction extendDurationForPosition(uint256 _nftId, uint256 _duration)
forceClosePosition
nonpayablefunction forceClosePosition(uint256 _nftId)
handlerUpdateLevel
nonpayablefunction handlerUpdateLevel(uint256 _requestId, address _user, uint256 _level)
handlerWithdrawETH
nonpayablefunction handlerWithdrawETH(address _to)
initialize
nonpayablefunction initialize(bytes _data)
initiateLevelRequest
payablefunction initiateLevelRequest(address _user) payable
ownerSetBaseURI
nonpayablefunction ownerSetBaseURI(string _baseUri)
ownerSetClosePositionWindow
nonpayablefunction ownerSetClosePositionWindow(uint256 _closePositionWindow)
ownerSetEmergencyWithdrawTax
nonpayablefunction ownerSetEmergencyWithdrawTax(uint256 _emergencyWithdrawTax)
ownerSetForceClosePositionTax
nonpayablefunction ownerSetForceClosePositionTax(uint256 _forceClosePositionTax)
ownerSetHandler
nonpayablefunction ownerSetHandler(address _handler, bool _isHandler)
ownerSetIsVestingActive
nonpayablefunction ownerSetIsVestingActive(bool _isVestingActive)
ownerSetLevelBoostThreshold
nonpayablefunction ownerSetLevelBoostThreshold(uint8 _levelBoostThreshold)
ownerSetLevelExpirationWindow
nonpayablefunction ownerSetLevelExpirationWindow(uint256 _levelExpirationWindow)
ownerSetLevelRequestFee
nonpayablefunction ownerSetLevelRequestFee(uint256 _fee)
ownerWithdrawToken
nonpayablefunction ownerWithdrawToken(address _to, uint256 _amount, bool _shouldBypassAvailableAmounts)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
vest
nonpayablefunction vest(uint256 _fromAccountNumber, uint256 _duration, uint256 _amount) returns (uint256)
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
BaseURISet
event BaseURISet(string baseURI)
ClosePositionWindowSet
event ClosePositionWindowSet(uint256 closePositionWindow)
EmergencyWithdraw
event EmergencyWithdraw(address indexed owner, uint256 vestingId, uint256 pairTax)
EmergencyWithdrawTaxSet
event EmergencyWithdrawTaxSet(uint256 emergencyWithdrawTax)
ForceClosePositionTaxSet
event ForceClosePositionTaxSet(uint256 forceClosePositionTax)
HandlerSet
event HandlerSet(address handler, bool isHandler)
Initialized
event Initialized(uint8 version)
LevelBoostThresholdSet
event LevelBoostThresholdSet(uint8 levelBoostThreshold)
LevelExpirationWindowSet
event LevelExpirationWindowSet(uint256 levelExpirationWindow)
LevelRequestFeeSet
event LevelRequestFeeSet(uint256 levelRequestFee)
LevelRequestFinalized
event LevelRequestFinalized(address user, uint256 requestId, uint256 level)
LevelRequestInitiated
event LevelRequestInitiated(address user, uint256 requestId)
OTokenSet
event OTokenSet(address oToken)
PositionClosed
event PositionClosed(address indexed owner, uint256 vestingId, uint256 ethCostPaid)
PositionDurationExtended
event PositionDurationExtended(uint256 indexed vestingId, uint256 newDuration)
PositionForceClosed
event PositionForceClosed(address indexed owner, uint256 vestingId, uint256 pairTax)
PromisedTokensSet
event PromisedTokensSet(uint256 promisedTokensSet)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
VestingActiveSet
event VestingActiveSet(bool vestingActive)
VestingPositionCleared
event VestingPositionCleared(uint256 id)
VestingPositionCreated
event VestingPositionCreated((address creator, uint256 id, uint256 startTime, uint256 duration, uint256 amount) vestingPosition)
VestingStarted
event VestingStarted(address indexed owner, uint256 duration, uint256 amount, uint256 vestingId)
errors
No errors.
creation bytecode
0x6101806040523480156200001257600080fd5b506040516200636d3803806200636d8339810160408190526200003591620002eb565b6001600160a01b03808516608052600160005583811660a052821660c0526200005d60805190565b6001600160a01b0316638fae3be1836040518263ffffffff1660e01b81526004016200008a91906200036a565b60206040518083038186803b158015620000a357600080fd5b505afa158015620000b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000de91906200038e565b60e0526001600160a01b0381811661010052608051604051638fae3be160e01b8152911690638fae3be190620001199084906004016200036a565b60206040518083038186803b1580156200013257600080fd5b505afa15801562000147573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016d91906200038e565b610120818152505073174860044994694943117b597486071df4833f166374e555b66040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ba57600080fd5b505af4158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f591906200038e565b610140818152505073174860044994694943117b597486071df4833f166380c339326040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024257600080fd5b505af415801562000257573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027d91906200038e565b6101605250620003bb92505050565b60006001600160a01b0382165b92915050565b620002aa816200028c565b8114620002b657600080fd5b50565b805162000299816200029f565b600062000299826200028c565b620002aa81620002c6565b80516200029981620002d3565b60008060008060808587031215620003065762000306600080fd5b6000620003148787620002b9565b94505060206200032787828801620002b9565b93505060406200033a87828801620002de565b92505060606200034d87828801620002de565b91505092959194509250565b62000364816200028c565b82525050565b6020810162000299828462000359565b80620002aa565b805162000299816200037a565b600060208284031215620003a557620003a5600080fd5b6000620003b3848462000381565b949350505050565b60805160a05160c05160e05161010051610120516101405161016051615ecd620004a0600039600061210e0152600081816120e30152818161213d01528181612aea0152613257015260008181610f7c01528181610fab0152818161140701528181611a5701528181611c0a0152818161223e01526130e801526000818161154a015281816117fc0152818161202201526130b0015260008181611b450152611d18015260005050600050506000818161045b01528181611b1601528181611bdb01528181611e69015281816126a001528181612832015261308c0152615ecd6000f3fe60806040526004361061036b5760003560e01c80636c0360eb116101c6578063b88d4fde116100f7578063cc5078d611610095578063d99283f21161006f578063d99283f2146109a8578063e985e9c5146109c8578063f3621c9014610a11578063f3a3211c14610a3157600080fd5b8063cc5078d61461095e578063cc75612514610973578063d165ecdd1461098857600080fd5b8063c1090fdd116100d1578063c1090fdd146108e9578063c87b56dd14610909578063c8e951fe14610929578063cbffd9211461094957600080fd5b8063b88d4fde14610889578063b9a87c09146108a9578063bfdcc620146108c957600080fd5b806395d89b4111610164578063a22cb4651161013e578063a22cb46514610814578063a32bcbb214610834578063a88f813914610849578063af6cd4861461086957600080fd5b806395d89b41146107bf578063971d911a146107d4578063a04d796d146107f457600080fd5b80637f09d23e116101a05780637f09d23e1461073057806383ec84141461075d578063887427451461077d5780638ac261461461079d57600080fd5b80636c0360eb146106db5780636c31bdcc146106f057806370a082311461071057600080fd5b80632c2cfd11116102a05780634f6ccce71161023e578063559bebe711610218578063559bebe7146106715780635e17b694146106915780636352211e146106a657806369bb4dc2146106c657600080fd5b80634f6ccce71461061c5780635312ea8e1461063c57806354c6185d1461065c57600080fd5b80632f745c591161027a5780632f745c591461059c57806342842e0e146105bc578063439fab91146105dc57806346ea87af146105fc57600080fd5b80632c2cfd111461053c5780632c4a1d081461055c5780632cacc0021461057c57600080fd5b806318160ddd1161030d5780632078e904116102e75780632078e904146104d257806323b872dd146104e757806325cfcab2146105075780632bc61ec41461051c57600080fd5b806318160ddd146104885780631a32aad61461049d5780631c2cc7d0146104b257600080fd5b8063081812fc11610349578063081812fc146103ea578063095ea7b31461041757806314cae8f21461043957806315c14a4a1461044c57600080fd5b806301ffc9a71461037057806304b92449146103a657806306fdde03146103c8575b600080fd5b34801561037c57600080fd5b5061039061038b366004614759565b610a51565b60405161039d9190614784565b60405180910390f35b3480156103b257600080fd5b506103bb610a7c565b60405161039d9190614798565b3480156103d457600080fd5b506103dd610ab5565b60405161039d9190614804565b3480156103f657600080fd5b5061040a610405366004614826565b610b47565b60405161039d9190614861565b34801561042357600080fd5b50610437610432366004614883565b610b6e565b005b6104376104473660046148c0565b610bfd565b34801561045857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405161039d9190614900565b34801561049457600080fd5b50609a546103bb565b3480156104a957600080fd5b5061047b610cd6565b3480156104be57600080fd5b506103bb6104cd3660046148c0565b610d06565b3480156104de57600080fd5b506103bb610d6d565b3480156104f357600080fd5b5061043761050236600461490e565b610d9d565b34801561051357600080fd5b506103bb610dce565b34801561052857600080fd5b50610437610537366004614826565b610dfe565b34801561054857600080fd5b50610437610557366004614826565b61101d565b34801561056857600080fd5b506103bb6105773660046148c0565b611034565b34801561058857600080fd5b50610437610597366004614826565b611065565b3480156105a857600080fd5b506103bb6105b7366004614883565b611078565b3480156105c857600080fd5b506104376105d736600461490e565b6110ca565b3480156105e857600080fd5b506104376105f73660046149b0565b6110e5565b34801561060857600080fd5b506103906106173660046148c0565b6111fb565b34801561062857600080fd5b506103bb610637366004614826565b611265565b34801561064857600080fd5b50610437610657366004614826565b6112b3565b34801561066857600080fd5b506103bb611481565b34801561067d57600080fd5b5061043761068c366004614826565b6114b1565b34801561069d57600080fd5b506103bb6114c4565b3480156106b257600080fd5b5061040a6106c1366004614826565b6114f4565b3480156106d257600080fd5b506103bb611529565b3480156106e757600080fd5b506103dd6115d9565b3480156106fc57600080fd5b506103bb61070b3660046148c0565b6115e3565b34801561071c57600080fd5b506103bb61072b3660046148c0565b611611565b34801561073c57600080fd5b5061075061074b366004614826565b611655565b60405161039d9190614a55565b34801561076957600080fd5b50610437610778366004614a63565b6116e1565b34801561078957600080fd5b50610437610798366004614a9a565b61179d565b3480156107a957600080fd5b506107b2611829565b60405161039d9190614ae9565b3480156107cb57600080fd5b506103dd611859565b3480156107e057600080fd5b506104376107ef366004614af7565b611868565b34801561080057600080fd5b5061043761080f3660046148c0565b61187c565b34801561082057600080fd5b5061043761082f366004614af7565b611899565b34801561084057600080fd5b506103bb6118a4565b34801561085557600080fd5b50610437610864366004614b2a565b6118d4565b34801561087557600080fd5b506103bb6108843660046148c0565b611da1565b34801561089557600080fd5b506104376108a4366004614c81565b611dcf565b3480156108b557600080fd5b506104376108c4366004614cf4565b611e01565b3480156108d557600080fd5b506104376108e4366004614d2f565b611e14565b3480156108f557600080fd5b50610437610904366004614826565b611e27565b34801561091557600080fd5b506103dd610924366004614826565b611e3a565b34801561093557600080fd5b506104376109443660046148c0565b611e4d565b34801561095557600080fd5b5061040a611e65565b34801561096a57600080fd5b50610390611ef8565b34801561097f57600080fd5b506103bb611f30565b34801561099457600080fd5b506104376109a3366004614d64565b611f60565b3480156109b457600080fd5b506104376109c3366004614d85565b611f73565b3480156109d457600080fd5b506103906109e3366004614da7565b6001600160a01b039182166000908152606b6020908152604080832093909416825291909152205460ff1690565b348015610a1d57600080fd5b506103bb610a2c366004614dda565b611fec565b348015610a3d57600080fd5b50610437610a4c366004614826565b6122b1565b60006001600160e01b0319821663780e9d6360e01b1480610a765750610a76826122c4565b92915050565b6000610ab0610aac60017f86f87fd3b25f63a00d463cd1226296f2f08e7e83c15714ce95cc235961e0b1c2614e25565b5490565b905090565b606060668054610ac490614e52565b80601f0160208091040260200160405190810160405280929190818152602001828054610af090614e52565b8015610b3d5780601f10610b1257610100808354040283529160200191610b3d565b820191906000526020600020905b815481529060010190602001808311610b2057829003601f168201915b5050505050905090565b6000610b5282612314565b506000908152606a60205260409020546001600160a01b031690565b6000610b79826114f4565b9050806001600160a01b0316836001600160a01b03161415610bb65760405162461bcd60e51b8152600401610bad90614ec0565b60405180910390fd5b336001600160a01b0382161480610bd25750610bd281336109e3565b610bee5760405162461bcd60e51b8152600401610bad90614f2a565b610bf8838361234b565b505050565b610c2d610c08611f30565b3414600080516020615e788339815191526a496e76616c69642066656560a81b6123b9565b610c6f610c3982611da1565b15600080516020615e788339815191527f5265717565737420616c726561647920696e69746961746564000000000000006123b9565b6000610c7961240e565b610c84906001614f3a565b9050610c90828261243e565b610c998161249e565b7f5aeeb2dffeaebee1f59908ba594f9f10f1d054a9129166bd1cf26b5d06a7cfaa8282604051610cca929190614f52565b60405180910390a15050565b6000610ab0610aac60017fbc51f2194eb7b7a31cb319ebe9bd18a91ab60309b98c7c8352ee8fa22f53458d614e25565b600080610d3460017f98754d9eb0c6d452c24f1baeb0e16ca34b71454d7b3a3d0cb42a95f5b4129ffd614e25565b604051610d4691908590602001614f95565b604051602081830303815290604052805190602001209050610d66815490565b9392505050565b6000610ab0610aac60017f8631fa347f9db059090eae2c40c37eb81a25398988ae5969720b5a990052617c614e25565b610da733826124d1565b610dc35760405162461bcd60e51b8152600401610bad90615005565b610bf8838383612550565b6000610ab0610aac60017fcb1c9c6ca133c2fb455acdf8f0d63d9dab5685df12f6675697a9339cf2daeacd614e25565b33610e0881612685565b6000610e1383612762565b6040805160a08101825282546001600160a01b031681526001830154602082015260028301549181019190915260038201546060820152600490910154608082015290506000610e62826127c1565b90506000610e6f856114f4565b9050610ec8610e7c611481565b84606001518560400151610e909190614f3a565b610e9a9190614f3a565b4211600080516020615e7883398151915273141bdcda5d1a5bdb881b9bdd08195e1c1a5c995960621b6123b9565b610ed1836127fc565b6000612710610ede6118a4565b8560800151610eed9190615015565b610ef7919061504a565b9050610f01610cd6565b6001600160a01b03166342966c6885608001516040518263ffffffff1660e01b8152600401610f309190614798565b600060405180830381600087803b158015610f4a57600080fd5b505af1158015610f5e573d6000803e3d6000fd5b505050506000811115610fa157610fa13084610f78611e65565b60007f000000000000000000000000000000000000000000000000000000000000000086612830565b610fd230848460007f0000000000000000000000000000000000000000000000000000000000000000600019612830565b816001600160a01b03167f6f4d54332796dcc952df0fdf09b5ef3f0c2004c1b6368263fa6e0c715d9fbc3e878360405161100d92919061505e565b60405180910390a2505050505050565b3361102781612914565b61103082612970565b5050565b600080611040836115e3565b905080158061104e57508042115b1561105c5750600092915050565b610d6683610d06565b3361106f81612914565b61103082612a1b565b600061108383611611565b82106110a15760405162461bcd60e51b8152600401610bad906150b4565b506001600160a01b03919091166000908152609860209081526040808320938352929052205490565b610bf883838360405180602001604052806000815250611dcf565b600154600290610100900460ff16158015611107575060015460ff8083169116105b6111235760405162461bcd60e51b8152600401610bad9061510f565b6001805461ffff191660ff8316176101001790556000611145838501856148c0565b905061118161117560017fcb1c9c6ca133c2fb455acdf8f0d63d9dab5685df12f6675697a9339cf2daeacd614e25565b61117d612ab5565b9055565b61118d6224ea00612ae5565b61119d660110d9316ec000612970565b6111a8816001612b9e565b6111b26004612c40565b506001805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906111ee908390614ae9565b60405180910390a1505050565b60008061122960017fe9b65fc01b61d0c86295fdb5bca7913e4d5d5332b0240051b54a3b4be7bb8c15614e25565b60405161123b91908590602001614f95565b60405160208183030381529060405280519060200120905061125b815490565b6001149392505050565b6000611270609a5490565b821061128e5760405162461bcd60e51b8152600401610bad90615168565b609a82815481106112a1576112a1615178565b90600052602060002001549050919050565b60006112be82612762565b6040805160a08101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260049091015460808201529050600061130d826127c1565b9050600061131a846114f4565b90506113596001600160a01b0382163314600080516020615e788339815191527524b73b30b634b2103837b9b4ba34b7b71037bbb732b960511b6123b9565b611361610cd6565b6001600160a01b03166342966c6884608001516040518263ffffffff1660e01b81526004016113909190614798565b600060405180830381600087803b1580156113aa57600080fd5b505af11580156113be573d6000803e3d6000fd5b5050505060006127106113cf610d6d565b85608001516113de9190615015565b6113e8919061504a565b905080156113fd576113fd3084610f78611e65565b61142e30848460007f0000000000000000000000000000000000000000000000000000000000000000600019612830565b611437846127fc565b816001600160a01b03167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595868360405161147292919061505e565b60405180910390a25050505050565b6000610ab0610aac60017fce55b0e0200b15eff39ffe66d15c18b73ddaa177f3ff64529ef2a400395fec67614e25565b336114bb81612914565b61103082612ca5565b6000610ab0610aac60017f63fab0e74dc2fdf215bfe275cf6a0bcab598cc46aa3155c218bad70fd6cb7a26614e25565b6000818152606860205260408120546001600160a01b031680610a765760405162461bcd60e51b8152600401610bad906151c5565b60006115336114c4565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061157f903090600401614861565b60206040518083038186803b15801561159757600080fd5b505afa1580156115ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cf91906151e0565b610ab09190614e25565b6060610ab0612d3f565b600080610d3460017fe587defe831ec1a331dc6dc06dc44942218e3b9cac8e67bed0e8f017168b8596614e25565b60006001600160a01b0382166116395760405162461bcd60e51b8152600401610bad90615247565b506001600160a01b031660009081526069602052604090205490565b6116906040518060a0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081525090565b61169982612762565b6040805160a08101825282546001600160a01b031681526001830154602082015260028301549181019190915260038201546060820152600490910154608082015292915050565b336116eb33612e05565b61172c84158061170257506116ff84611da1565b85145b600080516020615e7883398151915271125b9d985b1a59081c995c5d595cdd08125160721b6123b9565b61173783600061243e565b6117418383612e39565b61175c8361174d610a7c565b6117579042614f3a565b612e66565b7fd0e2e0b7a1c42e67f25b5e99413b39b28b887f9cbe69f67e85a198cf36f739a683858460405161178f93929190615257565b60405180910390a150505050565b336117a781612914565b816117ef576117ef6117b7611529565b841115600080516020615e788339815191527f496e73756666696369656e7420617661696c61626c6520746f6b656e730000006123b9565b6118236001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585612e93565b50505050565b6000610ab0610aac60017fe1e9efff7ce351d8acf328e0a75b766611bb0c2bbb82b3fba4805b00c51e3fb7614e25565b606060678054610ac490614e52565b3361187281612914565b610bf88383612b9e565b3361188633612e05565b6110306001600160a01b03831647612ee9565b611030338383612f85565b6000610ab0610aac60017fefa40fc42b7a3c841c933955a15e2dd453c69ee747ae4c4c27f9fd47152de8ad614e25565b6118dc613028565b60006118e785612762565b6040805160a08101825282546001600160a01b031681526001830154602082015260028301549181019190915260038201546060820152600490910154608082015290506000611936826127c1565b90506000611943876114f4565b90506119826001600160a01b0382163314600080516020615e788339815191527524b73b30b634b2103837b9b4ba34b7b71037bbb732b960511b6123b9565b600061198d82611034565b90506119dc6119a0856060015183613052565b85604001516119af9190614f3a565b4211600080516020615e7883398151915272141bdcda5d1a5bdb881b9bdd081d995cdd1959606a1b6123b9565b6119e5846127fc565b6119ed610cd6565b6001600160a01b03166342966c6885608001516040518263ffffffff1660e01b8152600401611a1c9190614798565b600060405180830381600087803b158015611a3657600080fd5b505af1158015611a4a573d6000803e3d6000fd5b50505050611a7e308484897f0000000000000000000000000000000000000000000000000000000000000000600019612830565b6060840151604051636c8cf36960e11b815260009173174860044994694943117b597486071df4833f169163d919e6d291611ac0913091908e9060040161527f565b60206040518083038186803b158015611ad857600080fd5b505af4158015611aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1091906151e0565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638928378e7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401611b809190614798565b60206040518083038186803b158015611b9857600080fd5b505afa158015611bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd091906152c3565b5190506000612710837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638928378e7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401611c459190614798565b60206040518083038186803b158015611c5d57600080fd5b505afa158015611c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9591906152c3565b51611ca09190615015565b611caa919061504a565b9050600082828960800151611cbf9190615015565b611cc9919061504a565b9050611d0789821115600080516020615e788339815191527f436f73742065786365656473206d6178207061796d656e7420616d6f756e74006123b9565b611d3d868c611d14611e65565b60007f000000000000000000000000000000000000000000000000000000000000000086612830565b611d4c868b8a6080015161308a565b856001600160a01b03167fc8469f8998427d0814b7efed804617bd8c43dfdfb3c6780d28a03ecf361fb6988d83604051611d8792919061505e565b60405180910390a250505050505050506118236001600055565b600080610d3460017f2eeb63dd18c07390f55de33417a8d98309d62730253053544423a71df0363d2a614e25565b611dd933836124d1565b611df55760405162461bcd60e51b8152600401610bad90615005565b61182384848484613142565b33611e0b81612914565b61103082613175565b33611e1e81612914565b611030826131e9565b33611e3181612914565b61103082613252565b6060611e4582612314565b610a766115d9565b60405162461bcd60e51b8152600401610bad906152fd565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ec057600080fd5b505afa158015611ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab09190615318565b6000611f28610aac60017fdfd3433bdb900c010beb7f4084740ffdf1c366d6ca9035b2895b3fca9481b842614e25565b600114905090565b6000610ab0610aac60017f634229aa821a3f83e13d567a1cbbde90974a059c3f26abd259fbbe0f66fe225b614e25565b33611f6a81612914565b61103082612c40565b73174860044994694943117b597486071df4833f16639229248430611f9785612762565b85856040518563ffffffff1660e01b8152600401611fb89493929190615339565b60006040518083038186803b158015611fd057600080fd5b505af4158015611fe4573d6000803e3d6000fd5b505050505050565b6000611ff661330b565b6120de6120016114c4565b61200b9084614f3a565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190612057903090600401614861565b60206040518083038186803b15801561206f57600080fd5b505afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a791906151e0565b1015600080516020615e788339815191527f4e6f7420656e6f7567682041524220746f6b656e7320617661696c61626c65006123b9565b61218c7f0000000000000000000000000000000000000000000000000000000000000000841015801561213157507f00000000000000000000000000000000000000000000000000000000000000008411155b801561216457506121627f00000000000000000000000000000000000000000000000000000000000000008561536d565b155b600080516020615e788339815191526f24b73b30b634b210323ab930ba34b7b760811b6123b9565b6000612196612ab5565b6121a1906001614f3a565b90506121ac81613342565b60006040518060a00160405280336001600160a01b031681526020018381526020014281526020018681526020018581525090506121e981613370565b612204846121f56114c4565b6121ff9190614f3a565b6133f5565b61220e3383613452565b61222d33308661221c610cd6565b6001600160a01b031692919061355b565b61226333873061223c856127c1565b7f000000000000000000000000000000000000000000000000000000000000000089612830565b336001600160a01b03167fdbac898e65d6e2eb500e4a2721266f81bbe66f2b88f851d052acf9cbe5828d388686856040516122a093929190615381565b60405180910390a250949350505050565b336122bb81612914565b61103082612ae5565b60006001600160e01b031982166380ac58cd60e01b14806122f557506001600160e01b03198216635b5e139f60e01b145b80610a7657506301ffc9a760e01b6001600160e01b0319831614610a76565b6000818152606860205260409020546001600160a01b03166123485760405162461bcd60e51b8152600401610bad906151c5565b50565b6000818152606a6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612380826114f4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b82610bf8576123c78261357c565b6101d160f51b6123d68361357c565b6040516020016123e8939291906153c1565b60408051601f198184030181529082905262461bcd60e51b8252610bad91600401614804565b6000610ab0610aac60017ff4c5664f8f836787111edfeafd25343276f6fea9525baac1ab96a8e5611cd8ef614e25565b600061246b60017f2eeb63dd18c07390f55de33417a8d98309d62730253053544423a71df0363d2a614e25565b60405161247d91908590602001614f95565b604051602081830303815290604052805190602001209050610bf881839055565b6123486124cc60017ff4c5664f8f836787111edfeafd25343276f6fea9525baac1ab96a8e5611cd8ef614e25565b829055565b6000806124dd836114f4565b9050806001600160a01b0316846001600160a01b0316148061252457506001600160a01b038082166000908152606b602090815260408083209388168352929052205460ff165b806125485750836001600160a01b031661253d84610b47565b6001600160a01b0316145b949350505050565b826001600160a01b0316612563826114f4565b6001600160a01b0316146125895760405162461bcd60e51b8152600401610bad9061542b565b6001600160a01b0382166125af5760405162461bcd60e51b8152600401610bad9061547c565b6125bc8383836001613617565b826001600160a01b03166125cf826114f4565b6001600160a01b0316146125f55760405162461bcd60e51b8152600401610bad9061542b565b6000818152606a6020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260698552838620805460001901905590871680865283862080546001019055868652606890945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60405163052f72d760e01b8152612348906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063052f72d7906126d5908590600401614861565b60206040518083038186803b1580156126ed57600080fd5b505afa158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190615497565b7127b7363ca237b637b6b4ba32a6b0b933b4b760711b7f43616c6c6572206973206e6f74206120676c6f62616c206f70657261746f7200846136fd565b60008061279060017f52c220bdcf4efd8688d9e64d897b696447b70c313b90c65dfe956d3ce2b3519c614e25565b6040516127a2919085906020016154b8565b60408051601f1981840301815291905280516020909101209392505050565b6000816000015182602001516040516020016127de9291906154de565b60408051601f19818403018152919052805160209091012092915050565b612816816080015161280c6114c4565b6121ff9190614e25565b6128238160200151613743565b61234881602001516137e6565b7f0000000000000000000000000000000000000000000000000000000000000000816000198114156128f7576040805180820182526001600160a01b03808b168252602082018a9052915163306430bb60e21b8152909184169063c190c2ec906128a0908490899060040161551e565b604080518083038186803b1580156128b757600080fd5b505afa1580156128cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ef9190615583565b602001519150505b61290a828989898989600088600061384e565b5050505050505050565b61234861291f611e65565b6001600160a01b0316826001600160a01b0316147127b7363ca237b637b6b4ba32a6b0b933b4b760711b7f43616c6c6572206973206e6f74206f776e6572206f6620446f6c6f6d69746500846136fd565b6129b367016345785d8a00008210600080516020615e788339815191527f4c6576656c20726571756573742066656520746f6f206c6172676500000000006123b9565b6129e16124cc60017f634229aa821a3f83e13d567a1cbbde90974a059c3f26abd259fbbe0f66fe225b614e25565b7f184fc14da47c7f225b83f8d8aa0804649b038209161f0afbb59052c3d876772581604051612a109190614798565b60405180910390a150565b612a586127108210600080516020615e788339815191527f496e76616c696420656d657267656e6379207769746864726177616c207461786123b9565b612a866124cc60017f8631fa347f9db059090eae2c40c37eb81a25398988ae5969720b5a990052617c614e25565b7f496a0fab4b6dbe07bf20ef7614af29beb32640a70383ca4e8962a17978b6e8b681604051612a109190614798565b6000610ab0610aac60017fecd93cc2fb052bb76ad5ef0bb7a6f19303cf0ee5b4778d40c1bf5fb8064a74cb614e25565b612b417f0000000000000000000000000000000000000000000000000000000000000000821015600080516020615e788339815191527f496e76616c6964206c6576656c2065787069726174696f6e2077696e646f77006123b9565b612b6f6124cc60017f86f87fd3b25f63a00d463cd1226296f2f08e7e83c15714ce95cc235961e0b1c2614e25565b7f0a9eb571c6ab4d71340671c3e993806c8dfc88ca8f3bf1bf240a8220daa07e2f81604051612a109190614798565b6000612bcb60017fe9b65fc01b61d0c86295fdb5bca7913e4d5d5332b0240051b54a3b4be7bb8c15614e25565b604051612bdd91908590602001614f95565b604051602081830303815290604052805190602001209050612c0f8183612c05576000612c08565b60015b60ff169055565b7f6cc67219f62a9e5d66cc9f2a62e16634cffcf48facd698a829bafcc1ad2c5c8383836040516111ee9291906155a4565b612c76612c6e60017fe1e9efff7ce351d8acf328e0a75b766611bb0c2bbb82b3fba4805b00c51e3fb7614e25565b60ff83169055565b7f71592c86cdf27fce6b52793c37d908c0dccfe0bcb8b3ba07248b9f5ece66322081604051612a109190614ae9565b612ce26127108210600080516020615e788339815191527f496e76616c696420666f72636520636c6f736520706f736974696f6e207461786123b9565b612d106124cc60017fefa40fc42b7a3c841c933955a15e2dd453c69ee747ae4c4c27f9fd47152de8ad614e25565b7fe8a3b3cd1cd1b9caef8b2da9236da18c1c18e1d936dabce63ee6bf3bf141659d81604051612a109190614798565b60606000612d6e60017fa3af931e7fba40f5b9d5316b495fe5d60824c62b2b878ab54427d9ff5644d8e7614e25565b805490915081908190612d8090614e52565b80601f0160208091040260200160405190810160405280929190818152602001828054612dac90614e52565b8015612df95780601f10612dce57610100808354040283529160200191612df9565b820191906000526020600020905b815481529060010190602001808311612ddc57829003601f168201915b50505050509250505090565b612348612e11826111fb565b600080516020615e788339815191526e24b73b30b634b2103430b7323632b960891b846136fd565b600061246b60017f98754d9eb0c6d452c24f1baeb0e16ca34b71454d7b3a3d0cb42a95f5b4129ffd614e25565b600061246b60017fe587defe831ec1a331dc6dc06dc44942218e3b9cac8e67bed0e8f017168b8596614e25565b610bf88363a9059cbb60e01b8484604051602401612eb2929190614f52565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613a60565b80471015612f095760405162461bcd60e51b8152600401610bad906155f3565b6000826001600160a01b031682604051612f2290615603565b60006040518083038185875af1925050503d8060008114612f5f576040519150601f19603f3d011682016040523d82523d6000602084013e612f64565b606091505b5050905080610bf85760405162461bcd60e51b8152600401610bad90615665565b816001600160a01b0316836001600160a01b03161415612fb75760405162461bcd60e51b8152600401610bad906156a9565b6001600160a01b038381166000818152606b602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319061301b908590614784565b60405180910390a3505050565b6002600054141561304b5760405162461bcd60e51b8152600401610bad906156ed565b6002600055565b600061305c611829565b60ff168210613083576003613072846002615015565b61307c919061504a565b9050610a76565b5081610a76565b7f00000000000000000000000000000000000000000000000000000000000000006130df7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168284613af2565b611823818530867f000000000000000000000000000000000000000000000000000000000000000060405180608001604052806001151581526020016000600181111561312e5761312e6156fd565b815260200160008152602001899052613bb5565b61314d848484612550565b61315984848484613cfa565b6118235760405162461bcd60e51b8152600401610bad90615762565b60006131a260017fa3af931e7fba40f5b9d5316b495fe5d60824c62b2b878ab54427d9ff5644d8e7614e25565b825190915081906131b99082906020860190614628565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f6836040516111ee9190614804565b61322361321760017fdfd3433bdb900c010beb7f4084740ffdf1c366d6ca9035b2895b3fca9481b842614e25565b82612c05576000612c08565b7fef62def4caa33a45ea3c5986a4b1863bce30d59665721b6bbf959cbadb7b957481604051612a109190614784565b6132ae7f0000000000000000000000000000000000000000000000000000000000000000821015600080516020615e788339815191527f496e76616c696420636c6f736520706f736974696f6e2077696e646f770000006123b9565b6132dc6124cc60017fce55b0e0200b15eff39ffe66d15c18b73ddaa177f3ff64529ef2a400395fec67614e25565b7f9c63da20dc11592caeecf364cf9e6ce9f74581c8fb6c8a8283defc77391b3a9a81604051612a109190614798565b613340613316611ef8565b600080516020615e788339815191527156657374696e67206e6f742061637469766560701b6123b9565b565b6123486124cc60017fecd93cc2fb052bb76ad5ef0bb7a6f19303cf0ee5b4778d40c1bf5fb8064a74cb614e25565b600061337f8260200151612762565b825181546001600160a01b0319166001600160a01b039091161781556020830151600182015560408084015160028301556060840151600383015560808401516004830155519091507f54831c1149b6ae700fc8eb991cf87d1b8078aef6637d59c807ad0e91ddad236c90610cca908490614a55565b6134236124cc60017f63fab0e74dc2fdf215bfe275cf6a0bcab598cc46aa3155c218bad70fd6cb7a26614e25565b7fcdb5e3f1115e26f77ac41d79a4a66c9a5ff8218837485c1a47a493d21d4c4f4581604051612a109190614798565b6001600160a01b0382166134785760405162461bcd60e51b8152600401610bad906157a4565b6000818152606860205260409020546001600160a01b0316156134ad5760405162461bcd60e51b8152600401610bad906157e8565b6134bb600083836001613617565b6000818152606860205260409020546001600160a01b0316156134f05760405162461bcd60e51b8152600401610bad906157e8565b6001600160a01b038216600081815260696020908152604080832080546001019055848352606890915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611823846323b872dd60e01b858585604051602401612eb2939291906157f8565b60606000826040516020016135919190615813565b60408051601f19818403018152919052905060205b80156135fc57806135b681615828565b9150508181815181106135cb576135cb615178565b01602001516001600160f81b031916156135f75760006135ec826001614f3a565b835250909392505050565b6135a6565b5060408051600080825260208201909252905b509392505050565b60018111156136385760405162461bcd60e51b8152600401610bad90615891565b816001600160a01b0385166136945761368f81609a80546000838152609b60205260408120829055600182018355919091527f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be40155565b6136b7565b836001600160a01b0316856001600160a01b0316146136b7576136b78582613e07565b6001600160a01b0384166136d3576136ce81613ea4565b6136f6565b846001600160a01b0316846001600160a01b0316146136f6576136f68482613f53565b5050505050565b836118235761370b8361357c565b6101d160f51b61371a8461357c565b61080f60f21b61372985613f97565b6040516123e8959493929190601f60f91b906020016158b1565b600061374e826114f4565b905061375e816000846001613617565b613767826114f4565b6000838152606a6020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526069845282852080546000190190558785526068909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006137f182612762565b80546001600160a01b0319168155600060018201819055600282018190556003820181905560048201556040519091507fbe188d2cc9224a6d93246ec39f6fdab39f7d7c0550e9a492ef5dbb0bb1d224f290610cca908490614798565b60408051600280825260608201909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161386657905050905060405180604001604052808a6001600160a01b0316815260200189815250816000815181106138c0576138c0615178565b60200260200101819052506040518060400160405280886001600160a01b0316815260200187815250816001815181106138fc576138fc615178565b6020908102919091010152604080516001808252818301909252600091816020015b6139266146ac565b81526020019060019003908161391e57905050905061394a600060018888886140dd565b8160008151811061395d5761395d615178565b602090810291909101015260405163a67a6a4560e01b81526001600160a01b038c169063a67a6a45906139969085908590600401615b26565b600060405180830381600087803b1580156139b057600080fd5b505af11580156139c4573d6000803e3d6000fd5b50600092506139d1915050565b8360038111156139e3576139e36156fd565b1480613a00575060018360038111156139fe576139fe6156fd565b145b15613a1157613a118b8b8b896141f4565b6000836003811115613a2557613a256156fd565b1480613a4257506002836003811115613a4057613a406156fd565b145b15613a5357613a538b8989896141f4565b5050505050505050505050565b6000613ab5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166142ed9092919063ffffffff16565b9050805160001480613ad6575080806020019051810190613ad69190615497565b610bf85760405162461bcd60e51b8152600401610bad90615b92565b801580613b7a5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90613b289030908690600401615ba2565b60206040518083038186803b158015613b4057600080fd5b505afa158015613b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7891906151e0565b155b613b965760405162461bcd60e51b8152600401610bad90615c10565b610bf88363095ea7b360e01b8484604051602401612eb2929190614f52565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081613bcc5790505090506040518060400160405280876001600160a01b031681526020018581525081600081518110613c2657613c26615178565b6020908102919091010152604080516001808252818301909252600091816020015b613c506146ac565b815260200190600190039081613c48579050509050613c7260008585896142fc565b81600081518110613c8557613c85615178565b602090810291909101015260405163a67a6a4560e01b81526001600160a01b0389169063a67a6a4590613cbe9085908590600401615b26565b600060405180830381600087803b158015613cd857600080fd5b505af1158015613cec573d6000803e3d6000fd5b505050505050505050505050565b60006001600160a01b0384163b15613dfc57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613d3e903390899088908890600401615c20565b602060405180830381600087803b158015613d5857600080fd5b505af1925050508015613d88575060408051601f3d908101601f19168201909252613d8591810190615c6f565b60015b613de2573d808015613db6576040519150601f19603f3d011682016040523d82523d6000602084013e613dbb565b606091505b508051613dda5760405162461bcd60e51b8152600401610bad90615762565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612548565b506001949350505050565b60006001613e1484611611565b613e1e9190614e25565b600083815260996020526040902054909150808214613e71576001600160a01b03841660009081526098602090815260408083208584528252808320548484528184208190558352609990915290208190555b5060009182526099602090815260408084208490556001600160a01b039094168352609881528383209183525290812055565b609a54600090613eb690600190614e25565b6000838152609b6020526040812054609a8054939450909284908110613ede57613ede615178565b9060005260206000200154905080609a8381548110613eff57613eff615178565b6000918252602080832090910192909255828152609b9091526040808220849055858252812055609a805480613f3757613f37615c90565b6001900381819060005260206000200160009055905550505050565b6000613f5e83611611565b6001600160a01b039093166000908152609860209081526040808320868452825280832085905593825260999052919091209190915550565b60408051602a80825260608281019093526001600160a01b03841691600091602082018180368337019050509050603060f81b81600081518110613fdd57613fdd615178565b60200101906001600160f81b031916908160001a905350607860f81b8160018151811061400c5761400c615178565b60200101906001600160f81b031916908160001a90535060005b601481101561360f57600061403c826002615015565b905061404a600f8516614364565b83614056836029614e25565b8151811061406657614066615178565b60200101906001600160f81b031916908160001a905350600484901c9350614090600f8516614364565b8361409c836028614e25565b815181106140ac576140ac615178565b60200101906001600160f81b031916908160001a9053505060049290921c91806140d581615ca6565b915050614026565b6140e56146ac565b614111604080516080810190915260008082526020820190815260200160008152602001600081525090565b600019831415614159576040518060800160405280600015158152602001856001811115614141576141416156fd565b81526020016001815260200160008152509050614191565b604051806080016040528060001515815260200185600181111561417f5761417f6156fd565b81526020016000815260200184905290505b60408051610100810190915280600281526020018881526020018281526020018681526020016000815260200160006001600160a01b03168152602001878152602001604051806020016040528060008152508152509150505b95945050505050565b6040805180820182526001600160a01b0380861682526020820185905291516311f46d4f60e21b81529091600091908716906347d1b53c9061423c908590879060040161551e565b604080518083038186803b15801561425357600080fd5b505afa158015614267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428b9190615d19565b9050611fe46142998261438e565b806142af575060208201516001600160801b0316155b7020b1b1b7bab73a2130b630b731b2a634b160791b7f6163636f756e742063616e6e6f7420676f206e656761746976650000000000008888886143ad565b60606125488484600085614415565b6143046146ac565b604080516101008101909152806000815260200186815260200184815260200185815260200160008152602001836001600160a01b0316815260200160008152602001604051806020016040528060008152508152509050949350505050565b6000600a8210156143835761437a603083614f3a565b60f81b92915050565b61437a605783614f3a565b80516000908015610a76575050602001516001600160801b0316151590565b85611fe4576143bb8561357c565b6101d160f51b6143ca8661357c565b61080f60f21b6143d987613f97565b61016160f51b6143e8886144b1565b61016160f51b6143f7896144b1565b6040516123e899989796959493929190601f60f91b90602001615d3a565b6060824710156144375760405162461bcd60e51b8152600401610bad90615e17565b600080866001600160a01b031685876040516144539190615e27565b60006040518083038185875af1925050503d8060008114614490576040519150601f19603f3d011682016040523d82523d6000602084013e614495565b606091505b50915091506144a6878383876145bd565b979650505050505050565b6060816144d55750506040805180820190915260018152600360fc1b602082015290565b8160005b81156144ff57806144e981615ca6565b91506144f89050600a8361504a565b91506144d9565b60008167ffffffffffffffff81111561451a5761451a614b8e565b6040519080825280601f01601f191660200182016040528015614544576020820181803683370190505b508593509050815b80156145b4578061455c81615828565b915061456b9050600a8561536d565b614576906030614f3a565b60f81b82828151811061458b5761458b615178565b60200101906001600160f81b031916908160001a9053506145ad600a8561504a565b935061454c565b50949350505050565b606083156145f95782516145f2576001600160a01b0385163b6145f25760405162461bcd60e51b8152600401610bad90615e67565b5081612548565b612548838381511561460e5781518083602001fd5b8060405162461bcd60e51b8152600401610bad9190614804565b82805461463490614e52565b90600052602060002090601f016020900481019282614656576000855561469c565b82601f1061466f57805160ff191683800117855561469c565b8280016001018555821561469c579182015b8281111561469c578251825591602001919060010190614681565b506146a8929150614722565b5090565b6040805161010081018252600080825260208201529081016146f0604080516080810190915260008082526020820190815260200160008152602001600081525090565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b5b808211156146a85760008155600101614723565b6001600160e01b031981165b811461234857600080fd5b8035610a7681614737565b60006020828403121561476e5761476e600080fd5b6000612548848461474e565b8015155b82525050565b60208101610a76828461477a565b8061477e565b60208101610a768284614792565b60005b838110156147c15781810151838201526020016147a9565b838111156118235750506000910152565b60006147dc825190565b8084526020840193506147f38185602086016147a6565b601f01601f19169290920192915050565b60208082528101610d6681846147d2565b80614743565b8035610a7681614815565b60006020828403121561483b5761483b600080fd5b6000612548848461481b565b60006001600160a01b038216610a76565b61477e81614847565b60208101610a768284614858565b61474381614847565b8035610a768161486f565b6000806040838503121561489957614899600080fd5b60006148a58585614878565b92505060206148b68582860161481b565b9150509250929050565b6000602082840312156148d5576148d5600080fd5b60006125488484614878565b6000610a7682614847565b6000610a76826148e1565b61477e816148ec565b60208101610a7682846148f7565b60008060006060848603121561492657614926600080fd5b60006149328686614878565b935050602061494386828701614878565b92505060406149548682870161481b565b9150509250925092565b60008083601f84011261497357614973600080fd5b50813567ffffffffffffffff81111561498e5761498e600080fd5b6020830191508360018202830111156149a9576149a9600080fd5b9250929050565b600080602083850312156149c6576149c6600080fd5b823567ffffffffffffffff8111156149e0576149e0600080fd5b6149ec8582860161495e565b92509250509250929050565b805160a0830190614a098482614858565b506020820151614a1c6020850182614792565b506040820151614a2f6040850182614792565b506060820151614a426060850182614792565b5060808201516118236080850182614792565b60a08101610a7682846149f8565b600080600060608486031215614a7b57614a7b600080fd5b6000614932868661481b565b801515614743565b8035610a7681614a87565b600080600060608486031215614ab257614ab2600080fd5b6000614abe8686614878565b9350506020614acf8682870161481b565b925050604061495486828701614a8f565b60ff811661477e565b60208101610a768284614ae0565b60008060408385031215614b0d57614b0d600080fd5b6000614b198585614878565b92505060206148b685828601614a8f565b60008060008060808587031215614b4357614b43600080fd5b6000614b4f878761481b565b9450506020614b608782880161481b565b9350506040614b718782880161481b565b9250506060614b828782880161481b565b91505092959194509250565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715614bca57614bca614b8e565b6040525050565b6000614bdc60405190565b9050614be88282614ba4565b919050565b600067ffffffffffffffff821115614c0757614c07614b8e565b601f19601f83011660200192915050565b82818337506000910152565b6000614c37614c3284614bed565b614bd1565b905082815260208101848484011115614c5257614c52600080fd5b61360f848285614c18565b600082601f830112614c7157614c71600080fd5b8135612548848260208601614c24565b60008060008060808587031215614c9a57614c9a600080fd5b6000614ca68787614878565b9450506020614cb787828801614878565b9350506040614cc88782880161481b565b925050606085013567ffffffffffffffff811115614ce857614ce8600080fd5b614b8287828801614c5d565b600060208284031215614d0957614d09600080fd5b813567ffffffffffffffff811115614d2357614d23600080fd5b61254884828501614c5d565b600060208284031215614d4457614d44600080fd5b60006125488484614a8f565b60ff8116614743565b8035610a7681614d50565b600060208284031215614d7957614d79600080fd5b60006125488484614d59565b60008060408385031215614d9b57614d9b600080fd5b60006148a5858561481b565b60008060408385031215614dbd57614dbd600080fd5b6000614dc98585614878565b92505060206148b685828601614878565b600080600060608486031215614df257614df2600080fd5b6000614dfe868661481b565b93505060206149438682870161481b565b634e487b7160e01b600052601160045260246000fd5b600082821015614e3757614e37614e0f565b500390565b634e487b7160e01b600052602260045260246000fd5b600281046001821680614e6657607f821691505b60208210811415614e7957614e79614e3c565b50919050565b602181526000602082017f4552433732313a20617070726f76616c20746f2063757272656e74206f776e658152603960f91b602082015291505b5060400190565b60208082528101610a7681614e7f565b603d81526000602082017f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f81527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060208201529150614eb9565b60208082528101610a7681614ed0565b60008219821115614f4d57614f4d614e0f565b500190565b60408101614f608285614858565b610d666020830184614792565b6000610a768260601b90565b6000610a7682614f6d565b61477e614f9082614847565b614f79565b6000614fa18285614792565b602082019150614fb18284614f84565b5060140192915050565b602d81526000602082017f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6581526c1c881bdc88185c1c1c9bdd9959609a1b60208201529150614eb9565b60208082528101610a7681614fbb565b600081600019048311821515161561502f5761502f614e0f565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261505957615059615034565b500490565b60408101614f608285614792565b602b81526000602082017f455243373231456e756d657261626c653a206f776e657220696e646578206f7581526a74206f6620626f756e647360a81b60208201529150614eb9565b60208082528101610a768161506c565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150614eb9565b60208082528101610a76816150c4565b602c81526000602082017f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f81526b7574206f6620626f756e647360a01b60208201529150614eb9565b60208082528101610a768161511f565b634e487b7160e01b600052603260045260246000fd5b601881526000602082017f4552433732313a20696e76616c696420746f6b656e2049440000000000000000815291505b5060200190565b60208082528101610a768161518e565b8051610a7681614815565b6000602082840312156151f5576151f5600080fd5b600061254884846151d5565b602981526000602082017f4552433732313a2061646472657373207a65726f206973206e6f7420612076618152683634b21037bbb732b960b91b60208201529150614eb9565b60208082528101610a7681615201565b606081016152658286614858565b6152726020830185614792565b6125486040830184614792565b6060810161526582866148f7565b6000602082840312156152a2576152a2600080fd5b6152ac6020614bd1565b905060006152ba84846151d5565b82525092915050565b6000602082840312156152d8576152d8600080fd5b6000612548848461528d565b60028152600060208201614e4160f01b815291506151be565b60208082528101610a76816152e4565b8051610a768161486f565b60006020828403121561532d5761532d600080fd5b6000612548848461530d565b6080810161534782876148f7565b61535360208301869052565b6153606040830185614792565b6141eb6060830184614792565b60008261537c5761537c615034565b500690565b606081016152658286614792565b6000615399825190565b6153a78185602086016147a6565b9290920192915050565b6001600160f01b0319811661477e565b60006153cd828661538f565b91506153d982856153b1565b6002820191506141eb828461538f565b602581526000602082017f4552433732313a207472616e736665722066726f6d20696e636f72726563742081526437bbb732b960d91b60208201529150614eb9565b60208082528101610a76816153e9565b602481526000602082017f4552433732313a207472616e7366657220746f20746865207a65726f206164648152637265737360e01b60208201529150614eb9565b60208082528101610a768161543b565b8051610a7681614a87565b6000602082840312156154ac576154ac600080fd5b6000612548848461548c565b60006154c48285614792565b6020820191506154d48284614792565b5060200192915050565b60006154ea8285614f84565b6014820191506154d48284614792565b8051604083019061550b8482614858565b5060208201516118236020850182614792565b6060810161552c82856154fa565b610d666040830184614792565b60006040828403121561554e5761554e600080fd5b6155586040614bd1565b90506000615566848461548c565b8252506020615577848483016151d5565b60208301525092915050565b60006040828403121561559857615598600080fd5b60006125488484615539565b604081016155b28285614858565b610d66602083018461477a565b601d81526000602082017f416464726573733a20696e73756666696369656e742062616c616e6365000000815291506151be565b60208082528101610a76816155bf565b600081610a76565b603a81526000602082017f416464726573733a20756e61626c6520746f2073656e642076616c75652c207281527f6563697069656e74206d6179206861766520726576657274656400000000000060208201529150614eb9565b60208082528101610a768161560b565b601981526000602082017f4552433732313a20617070726f766520746f2063616c6c657200000000000000815291506151be565b60208082528101610a7681615675565b601f81526000602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815291506151be565b60208082528101610a76816156b9565b634e487b7160e01b600052602160045260246000fd5b603281526000602082017f4552433732313a207472616e7366657220746f206e6f6e20455243373231526581527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60208201529150614eb9565b60208082528101610a7681615713565b60208082527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373910190815260006151be565b60208082528101610a7681615772565b601c81526000602082017f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000815291506151be565b60208082528101610a76816157b4565b606081016158068286614858565b6152726020830185614858565b600061581f8284614792565b50602001919050565b60008161583757615837614e0f565b506000190190565b603581526000602082017f455243373231456e756d657261626c653a20636f6e7365637574697665207472815274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60208201529150614eb9565b60208082528101610a768161583f565b6001600160f81b0319811661477e565b60006158bd828961538f565b91506158c982886153b1565b6002820191506158d9828761538f565b91506158e582866153b1565b6002820191506158f5828561538f565b915061590182846158a1565b506001019695505050505050565b600061591b83836154fa565b505060400190565b600061592d825190565b80845260209384019383018060005b83811015615961578151615950888261590f565b97506020830192505060010161593c565b509495945050505050565b60098110612348576123486156fd565b80614be88161596c565b6000610a768261597c565b61477e81615986565b60028110612348576123486156fd565b80614be88161599a565b6000610a76826159aa565b61477e816159b4565b805160808301906159d9848261477a565b5060208201516159ec60208501826159bf565b5060408201516159ff60408501826159bf565b5060608201516118236060850182614792565b8051600090610160840190615a278582615991565b506020830151615a3a6020860182614792565b506040830151615a4d60408601826159c8565b506060830151615a6060c0860182614792565b506080830151615a7360e0860182614792565b5060a0830151615a87610100860182614858565b5060c0830151615a9b610120860182614792565b5060e08301518482036101408601526141eb82826147d2565b6000610d668383615a12565b6000615aca825190565b80845260208401935083602082028501615ae48560200190565b8060005b85811015615b195784840389528151615b018582615ab4565b94506020830160209a909a0199925050600101615ae8565b5091979650505050505050565b60408082528101615b378185615923565b905081810360208301526125488184615ac0565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b60208201529150614eb9565b60208082528101610a7681615b4b565b60408101615bb08285614858565b610d666020830184614858565b603681526000602082017f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60208201529150614eb9565b60208082528101610a7681615bbd565b60808101615c2e8287614858565b615c3b6020830186614858565b615c486040830185614792565b8181036060830152615c5a81846147d2565b9695505050505050565b8051610a7681614737565b600060208284031215615c8457615c84600080fd5b60006125488484615c64565b634e487b7160e01b600052603160045260246000fd5b6000600019821415615cba57615cba614e0f565b5060010190565b6001600160801b038116614743565b8051610a7681615cc1565b600060408284031215615cf057615cf0600080fd5b615cfa6040614bd1565b90506000615d08848461548c565b825250602061557784848301615cd0565b600060408284031215615d2e57615d2e600080fd5b60006125488484615cdb565b6000615d46828d61538f565b9150615d52828c6153b1565b600282019150615d62828b61538f565b9150615d6e828a6153b1565b600282019150615d7e828961538f565b9150615d8a82886153b1565b600282019150615d9a828761538f565b9150615da682866153b1565b600282019150615db6828561538f565b9150615dc282846158a1565b506001019a9950505050505050505050565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b60208201529150614eb9565b60208082528101610a7681615dd4565b6000610d66828461538f565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000815291506151be565b60208082528101610a7681615e3356fe566573746572496d706c656d656e746174696f6e563200000000000000000000a26469706673582212200e434a5c3fc9596835fce4fc8ed8ae17905db48c85588ad854a59c0923ba993c64736f6c634300080900330000000000000000000000006bd780e7fdf01d77e4d475c821f1e7ae054090720000000000000000000000002a059d6d682e5fb1226eb8bc2977b512698c240400000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000912ce59144191c1204e64559fe8253a0e49e6548