0 txs
27 calls
constructor
constructor(address _yelayOwner)
functions
allowance
purefunction allowance(address, address) pure returns (uint256)
approve
purefunction approve(address, uint256) pure returns (bool)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
firstTrancheStartTime
viewfunction firstTrancheStartTime() view returns (uint256)
FULL_POWER_TIME
viewfunction FULL_POWER_TIME() view returns (uint256)
FULL_POWER_TRANCHES_COUNT
viewfunction FULL_POWER_TRANCHES_COUNT() view returns (uint256)
getCurrentTrancheIndex
viewfunction getCurrentTrancheIndex() view returns (uint16)
getGlobalGradual
viewfunction getGlobalGradual() view returns (tuple)
getLastFinishedTrancheIndex
viewfunction getLastFinishedTrancheIndex() view returns (uint16)
getNextTrancheEndTime
viewfunction getNextTrancheEndTime() view returns (uint256)
getNotUpdatedGlobalGradual
viewfunction getNotUpdatedGlobalGradual() view returns (tuple)
getNotUpdatedUserGradual
viewfunction getNotUpdatedUserGradual(address user) view returns (tuple)
getTotalGradualVotingPower
viewfunction getTotalGradualVotingPower() view returns (uint256)
getTrancheEndTime
viewfunction getTrancheEndTime(uint256 trancheIndex) view returns (uint256)
getTrancheIndex
viewfunction getTrancheIndex(uint256 time) view returns (uint256)
getUserGradual
viewfunction getUserGradual(address user) view returns (tuple)
getUserGradualVotingPower
viewfunction getUserGradualVotingPower(address user) view returns (uint256)
gradualMinters
viewfunction gradualMinters(address) view returns (bool)
indexedGlobalTranches
viewfunction indexedGlobalTranches(uint256) view returns (tuple zero, tuple one, tuple two, tuple three, tuple four)
minters
viewfunction minters(address) view returns (bool)
name
viewfunction name() view returns (string)
symbol
viewfunction symbol() view returns (string)
totalInstantPower
viewfunction totalInstantPower() view returns (uint256)
totalLockupPower
viewfunction totalLockupPower() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
TRANCHE_TIME
viewfunction TRANCHE_TIME() view returns (uint256)
transfer
purefunction transfer(address, uint256) pure returns (bool)
transferFrom
purefunction transferFrom(address, address, uint256) pure returns (bool)
updatedUserTranches
viewfunction updatedUserTranches(address account) view returns (tuple[] positions, tuple[] tranches)
userInstantPower
viewfunction userInstantPower(address) view returns (uint256)
userLockupIndexes
viewfunction userLockupIndexes(address, uint256) view returns (uint16)
userLockupPower
viewfunction userLockupPower(address) view returns (uint256)
userLockups
viewfunction userLockups(address account) view returns (tuple[] lockups)
userToTrancheIndexToLockup
viewfunction userToTrancheIndexToLockup(address, uint256) view returns (uint48 amount, uint56 power, uint64 start, uint64 deadline)
userTranches
viewfunction userTranches(address, uint256) view returns (tuple zero, tuple one, tuple two, tuple three)
burn
nonpayablefunction burn(address from, uint256 amount)
burnGradual
nonpayablefunction burnGradual(address from, uint256 amount, bool burnAll)
burnLockups
nonpayablefunction burnLockups(address to) returns (uint256 amount)
continueLockup
nonpayablefunction continueLockup(uint256 start, uint256 deadline)
migrateToLockup
nonpayablefunction migrateToLockup(address to, tuple userTranchePosition, uint256 deadline) returns (uint256)
mint
nonpayablefunction mint(address to, uint256 amount)
mintGradual
nonpayablefunction mintGradual(address to, uint256 amount)
mintLockup
nonpayablefunction mintLockup(address to, uint256 amount, uint256 deadline) returns (uint256)
setGradualMinter
nonpayablefunction setGradualMinter(address _gradualMinter, bool _set)
setMinter
nonpayablefunction setMinter(address _minter, bool _set)
updateUserVotingPower
nonpayablefunction updateUserVotingPower(address user)
updateVotingPower
nonpayablefunction updateVotingPower()
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Burned
event Burned(address indexed source, uint256 amount)
GlobalGradualUpdated
event GlobalGradualUpdated(uint16 indexed lastUpdatedTrancheIndex, uint48 totalMaturedVotingPower, uint48 totalMaturingAmount, uint56 totalRawUnmaturedVotingPower)
GradualBurned
event GradualBurned(address indexed source, uint256 amount, bool burnAll)
GradualMinted
event GradualMinted(address indexed recipient, uint256 amount)
GradualMinterSet
event GradualMinterSet(address indexed minter, bool set)
LockupBurned
event LockupBurned(address indexed to, uint256 lockTranche)
LockupContinued
event LockupContinued(address indexed to, uint256 lockTranche, uint256 addedPower, uint256 endTranche)
LockupMinted
event LockupMinted(address indexed to, uint256 amount, uint256 power, uint256 startTranche, uint256 endTranche)
Minted
event Minted(address indexed recipient, uint256 amount)
MinterSet
event MinterSet(address indexed minter, bool set)
TrancheMigration
event TrancheMigration(address indexed user, uint256 amount, uint256 index, uint256 rawUnmaturedVotingPower)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
UserGradualUpdated
event UserGradualUpdated(address indexed user, uint16 indexed lastUpdatedTrancheIndex, uint48 maturedVotingPower, uint48 maturingAmount, uint56 rawUnmaturedVotingPower)
errors
No errors.
creation bytecode
0x60a06040523480156200001157600080fd5b5060405162005135380380620051358339810160408190526200003491620000d5565b806001600160a01b038116620000c25760405162461bcd60e51b815260206004820152604360248201527f59656c61794f776e61626c653a3a636f6e7374727563746f723a2059656c617960448201527f206f776e657220636f6e747261637420616464726573732063616e6e6f74206260648201526206520360ec1b608482015260a40160405180910390fd5b6001600160a01b03166080525062000107565b600060208284031215620000e857600080fd5b81516001600160a01b03811681146200010057600080fd5b9392505050565b60805161501262000123600039600061393d01526150126000f3fe608060405234801561001057600080fd5b50600436106103205760003560e01c806388278207116101a7578063cbfd3a43116100ee578063d7febbca11610097578063e4c4949511610071578063e4c4949514610a00578063edcd508a14610a13578063f46eccc414610a3657600080fd5b8063d7febbca146109c5578063dd62ed3e146109cd578063e42084df146109e057600080fd5b8063d131ef57116100c8578063d131ef571461090a578063d4f54eae1461091d578063d6a182b3146109b257600080fd5b8063cbfd3a43146108cf578063cf456ae7146108d7578063d09f88b5146108ea57600080fd5b8063a04d804311610150578063ab95e67e1161012a578063ab95e67e146108a1578063c8800d1c146108b4578063c8a168ef146108c757600080fd5b8063a04d804314610873578063a5ef7fab14610886578063a9059cbb1461088e57600080fd5b806395d89b411161018157806395d89b41146108115780639dc29fac1461084d5780639e52c7521461086057600080fd5b8063882782071461067f5780638afd9bc4146106d85780638c2a8034146106fe57600080fd5b806344b066f51161026b5780635eb5164d116102145780637a1957ca116101ee5780637a1957ca1461065c5780637a81cf261461066457806385cf95ac1461066c57600080fd5b80635eb5164d1461063857806370a082311461064057806378362cd61461065357600080fd5b80635b1534cb116102455780635b1534cb1461054e5780635b4653441461060f5780635df0f4b61461062f57600080fd5b806344b066f514610510578063468682c01461051a5780635638f3dd1461053b57600080fd5b80632d43b867116102cd5780633f9a6020116102a75780633f9a6020146104e157806340c10f19146104f457806343481a181461050757600080fd5b80632d43b867146103f65780632e638b5f146104b2578063313ce567146104c757600080fd5b806316349cff116102fe57806316349cff146103ba57806318160ddd146103db57806323b872dd146103e357600080fd5b806306fdde0314610325578063095ea7b31461037757806312fb31751461039a575b600080fd5b6103616040518060400160405280600c81526020017f5374616b65642059656c6179000000000000000000000000000000000000000081525081565b60405161036e919061473b565b60405180910390f35b61038a6103853660046147d2565b610a59565b604051901515815260200161036e565b6103ad6103a83660046147fc565b610ae9565b60405161036e9190614817565b6103cd6103c83660046147fc565b610d25565b60405190815260200161036e565b6103cd610d44565b61038a6103f1366004614899565b610d83565b6104756104043660046148d5565b60066020908152600091825260409182902082518083018452815465ffffffffffff9081168252845180850186526001840154821681528551808601875260028501548316815286518087018852600386015484168152875196870190975260049094015490911684529093909285565b60408051955165ffffffffffff9081168752945185166020870152925184169285019290925251821660608401525116608082015260a00161036e565b6104c56104c03660046147fc565b610e0e565b005b6104cf601281565b60405160ff909116815260200161036e565b6104c56104ef3660046147d2565b610e2a565b6104c56105023660046147d2565b610eb1565b6103cd60035481565b6103cd62093a8081565b61052d6105283660046147fc565b610f5a565b60405161036e9291906148ee565b6104c56105493660046149ae565b6110c5565b6105ce61055c3660046147d2565b600b60209081526000928352604080842090915290825290205465ffffffffffff81169066ffffffffffffff66010000000000008204169067ffffffffffffffff6d01000000000000000000000000008204811691750100000000000000000000000000000000000000000090041684565b6040805165ffffffffffff909516855266ffffffffffffff909316602085015267ffffffffffffffff9182169284019290925216606082015260800161036e565b61062261061d3660046147fc565b6112a5565b60405161036e91906149e5565b6103cd60005481565b6103cd6113c8565b6103cd61064e3660046147fc565b6113d9565b6103cd60095481565b6104c561145b565b6103cd60d081565b6103cd61067a3660046148d5565b61146d565b61068761148f565b60405161036e9190600060808201905065ffffffffffff8084511683528060208501511660208401525066ffffffffffffff604084015116604083015261ffff606084015116606083015292915050565b6106eb6106e63660046147d2565b6114c2565b60405161ffff909116815260200161036e565b6107a861070c3660046147d2565b600860209081526000928352604080842082529183529181902081518083018352815465ffffffffffff808216835261ffff660100000000000092839004811684880152855180870187526001860154808416825284900482168189015286518088018852600287015480851682528590048316818a015287518089019098526003909601549283168752929091041694840194909452929184565b60408051855165ffffffffffff908116825260209687015161ffff908116888401528651821693830193909352948601518216606082015283518516608082015292850151811660a0840152815190931660c0830152909201511660e08201526101000161036e565b6103616040518060400160405280600581526020017f73594c415900000000000000000000000000000000000000000000000000000081525081565b6104c561085b3660046147d2565b611509565b6103cd61086e366004614a71565b611661565b6103cd6108813660046148d5565b6116b1565b6106eb61177d565b61038a61089c3660046147d2565b611798565b6103cd6108af3660046147fc565b611823565b6104c56108c2366004614aa4565b611a8d565b6106eb611def565b6103cd611dfa565b6104c56108e53660046149ae565b611e10565b6103cd6108f83660046147fc565b60046020526000908152604090205481565b6103cd610918366004614ac6565b611fca565b610687604080516080810182526000808252602082018190529181018290526060810191909152506040805160808101825260055465ffffffffffff8082168352660100000000000082041660208301526c01000000000000000000000000810466ffffffffffffff169282019290925273010000000000000000000000000000000000000090910461ffff16606082015290565b6106226109c03660046147fc565b612443565b6103cd6124ac565b6103cd6109db366004614b2c565b6124c3565b6103cd6109ee3660046147fc565b600a6020526000908152604090205481565b6104c5610a0e366004614b5f565b61254e565b61038a610a213660046147fc565b60026020526000908152604090205460ff1681565b61038a610a443660046147fc565b60016020526000908152604090205460ff1681565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f73594c41593a3a617070726f76653a2050726f6869626974656420416374696f60448201527f6e0000000000000000000000000000000000000000000000000000000000000060648201526000906084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600c60209081526040808320805482518185028101850190935280835260609493830182828015610b7d57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610b445790505b50505050509050805167ffffffffffffffff811115610b9e57610b9e614b9f565b604051908082528060200260200182016040528015610c0e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610bbc5790505b50915060005b8151811015610d1e5773ffffffffffffffffffffffffffffffffffffffff84166000908152600b602052604081208351909190849084908110610c5957610c59614bce565b60209081029190910181015161ffff1682528181019290925260409081016000208151608081018352905465ffffffffffff8116825266ffffffffffffff66010000000000008204169382019390935267ffffffffffffffff6d0100000000000000000000000000840481169282019290925275010000000000000000000000000000000000000000009092041660608201528351849083908110610d0057610d00614bce565b60200260200101819052508080610d1690614c2c565b915050610c14565b5050919050565b600080610d3183612b94565b509050610d3d81612ddd565b9392505050565b600080610d4f612e1a565b509050610d5d600954612ef6565b610d6682612ddd565b600354610d739190614c64565b610d7d9190614c64565b91505090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f73594c41593a3a7472616e7366657246726f6d3a2050726f686962697465642060448201527f416374696f6e00000000000000000000000000000000000000000000000000006064820152600090608401610ae0565b610e16612f08565b610e1e612fa7565b610e27816130d6565b50565b610e32612f08565b610e3a612fa7565b81610e44816130d6565b6000610e4f83613293565b9050610e5b84826132a5565b8373ffffffffffffffffffffffffffffffffffffffff167fe24fb5918dfdd34ee115de98f0d2960d0ce30d6169a74367fd256ff3b5048b7484604051610ea391815260200190565b60405180910390a250505050565b610eb9613629565b8060036000828254610ecb9190614c64565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081208054839290610f05908490614c64565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316907f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe906020015b60405180910390a25050565b6060806000610f6884612b94565b509050610f74816136c8565b156110bf5760608101516000610f89836136e2565b90508067ffffffffffffffff811115610fa457610fa4614b9f565b604051908082528060200260200182016040528015610fe957816020015b6040805180820190915260008082526020820152815260200190600190039081610fc25790505b5093508067ffffffffffffffff81111561100557611005614b9f565b60405190808252806020026020018201604052801561104a57816020015b60408051808201909152600080825260208201528152602001906001900390816110235790505b50945060005b84518110156110bb576110638784613755565b85828151811061107557611075614bce565b60200260200101819052508286828151811061109357611093614bce565b60200260200101819052506110a783613895565b9250806110b381614c2c565b915050611050565b5050505b50915091565b6110cd61390c565b611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f59656c61794f776e61626c653a3a6f6e6c794f776e65723a2043616c6c65722060448201527f6973206e6f74207468652059656c6179206f776e6572000000000000000000006064820152608401610ae0565b73ffffffffffffffffffffffffffffffffffffffff8216611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f73594c41593a3a7365744772616475616c4d696e7465723a206772616475616c60448201527f206d696e7465722063616e6e6f7420626520746865207a65726f20616464726560648201527f7373000000000000000000000000000000000000000000000000000000000000608482015260a401610ae0565b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fd066a75103af5bd5a100de58375e7cf390671150ac63a9f845137e25042bf1589101610f4e565b6112fb6040805160c0810182526000808252602080830182905282840182905283518085018552828152808201839052606084015283518085019094528184528301529060808201908152600060209091015290565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260076020908152604091829020825160c081018452815465ffffffffffff808216835266010000000000008204168285015266ffffffffffffff6c01000000000000000000000000909104168185015283518085018552600183015461ffff808216835260ff6201000092839004811684880152606085019390935286518088019097526002850154808216885291909104909116938501939093526080810193909352600301541660a082015290565b6113d660d062093a80614c7c565b81565b6000806113e583612b94565b5073ffffffffffffffffffffffffffffffffffffffff84166000908152600a602052604090205490915061141890612ef6565b61142182612ddd565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600460205260409020546114519190614c64565b610d3d9190614c64565b611463612f08565b61146b612fa7565b565b600061147c62093a8083614c7c565b6000546114899190614c64565b92915050565b6040805160808101825260008082526020820181905291810182905260608101829052906114bb612e1a565b5092915050565b600c60205281600052604060002081815481106114de57600080fd5b9060005260206000209060109182820401919006600202915091509054906101000a900461ffff1681565b611511613629565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020548111156115c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f73594c41593a6275726e3a205573657220696e7374616e7420706f776572206260448201527f616c616e636520746f6f206c6f770000000000000000000000000000000000006064820152608401610ae0565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906115fb908490614cb9565b9250508190555080600360008282546116149190614cb9565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df790602001610f4e565b600061166b612f08565b600061167684613293565b9050611697858265ffffffffffff1661168d611def565b61ffff16866139bd565b6116a88165ffffffffffff16612ef6565b95945050505050565b6000805482101561176a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f73594c41593a3a6765745472616e636865496e6465783a2054696d65206d757360448201527f74206265206d6f7265206f7220657175616c20746f207468652066697273742060648201527f7472616e6368652074696d650000000000000000000000000000000000000000608482015260a401610ae0565b61177382613dd1565b61ffff1692915050565b60006001611789611def565b6117939190614cd0565b905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f73594c41593a3a7472616e736665723a2050726f68696269746564204163746960448201527f6f6e0000000000000000000000000000000000000000000000000000000000006064820152600090608401610ae0565b600061182d612f08565b6000611837611def565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600c60205260408120805461ffff93909316935091905b81811015611a7857600083828154811061188657611886614bce565b6000918252602080832060108304015473ffffffffffffffffffffffffffffffffffffffff8b168452600b82526040808520600f9094166002026101000a90910461ffff16808552928252928390208351608081018552905465ffffffffffff811682526601000000000000810466ffffffffffffff16928201929092526d0100000000000000000000000000820467ffffffffffffffff908116948201949094527501000000000000000000000000000000000000000000909104909216606083015291506119568682613dfa565b15611a635761196a81898461ffff16613e24565b6119749088614c64565b965084611982600186614cb9565b8154811061199257611992614bce565b90600052602060002090601091828204019190066002029054906101000a900461ffff168584815481106119c8576119c8614bce565b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555084805480611a0757611a07614cf3565b60008281526020902060107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191820401805461ffff6002600f8516026101000a0219169055905583611a5b81614d22565b945050611a71565b82611a6d81614c2c565b9350505b505061186a565b50611a8284612ef6565b93505050505b919050565b336000908152600b602090815260408083208584529091529020805465ffffffffffff16611b3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f73594c41593a3a636f6e74696e75654c6f636b75703a204e6f206c6f636b757060448201527f20706f736974696f6e20666f756e6400000000000000000000000000000000006064820152608401610ae0565b80547501000000000000000000000000000000000000000000900467ffffffffffffffff168211611bf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f73594c41593a3a636f6e74696e75654c6f636b75703a204c6f636b757020646560448201527f61646c696e652073686f756c6420626520696e207468652066757475726500006064820152608401610ae0565b60d0611bfc8484614cb9565b1115611c8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f73594c41593a3a636f6e74696e75654c6f636b75703a204c6f636b757020706560448201527f72696f642065786365656473206120746f74616c206f662034207965617273006064820152608401610ae0565b805460009060d090611cbf907501000000000000000000000000000000000000000000900467ffffffffffffffff1685614cb9565b8354611cd3919065ffffffffffff16614c7c565b611cdd9190614d86565b90508060096000828254611cf19190614c64565b9091555050336000908152600a602052604081208054839290611d15908490614c64565b9091555050815481908390600690611d419084906601000000000000900466ffffffffffffff16614d9a565b82546101009290920a66ffffffffffffff8181021990931691909216919091021790555081547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000067ffffffffffffffff851602178255604080518581526020810183905290810184905233907ff105efae42c9c08d5eafed7135b77068bb81a1845393b4473ae79e86c94e97f190606001610ea3565b600061179342613dd1565b6000611793611e07611def565b61ffff1661146d565b611e1861390c565b611ea4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f59656c61794f776e61626c653a3a6f6e6c794f776e65723a2043616c6c65722060448201527f6973206e6f74207468652059656c6179206f776e6572000000000000000000006064820152608401610ae0565b73ffffffffffffffffffffffffffffffffffffffff8216611f47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f73594c41593a3a7365744d696e7465723a206d696e7465722063616e6e6f742060448201527f626520746865207a65726f2061646472657373000000000000000000000000006064820152608401610ae0565b73ffffffffffffffffffffffffffffffffffffffff821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f583b0aa0e528532caf4b907c11d7a8158a122fe2a6fb80cd9b09776ebea8d92d9101610f4e565b6000611fd4612f08565b611fdc612fa7565b83611fe6816130d6565b600061200086611ffb36889003880188614dc5565b613f49565b805490915060009061201f906601000000000000900461ffff16613fd0565b825490915065ffffffffffff16806120b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f73594c41593a3a6d696772617465546f4c6f636b75703a205472616e6368652060448201527f616c7265616479206c6f636b65640000000000000000000000000000000000006064820152608401610ae0565b60006120c3614050565b905061ffff811615806120e75750835461ffff808316660100000000000090920416115b612173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f73594c41593a3a6d696772617465546f4c6f636b75703a205472616e6368652060448201527f6d617475726564000000000000000000000000000000000000000000000000006064820152608401610ae0565b83546000906601000000000000900461ffff1661218e611def565b6121989190614cd0565b6121a69061ffff1684614e58565b73ffffffffffffffffffffffffffffffffffffffff8b166000908152600760205260409020805465ffffffffffff928316935085926006916121f49185916601000000000000900416614e86565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555082600560000160068282829054906101000a900465ffffffffffff1661223c9190614e86565b825465ffffffffffff9182166101009390930a92830291909202199091161790555073ffffffffffffffffffffffffffffffffffffffff8a1660009081526007602052604090208054829190600c906122b090849066ffffffffffffff6c0100000000000000000000000090910416614ea5565b92506101000a81548166ffffffffffffff021916908366ffffffffffffff160217905550806005600001600c8282829054906101000a900466ffffffffffffff166122fb9190614ea5565b825466ffffffffffffff9182166101009390930a92830291909202199091161790555084547fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000016855583548390859060009061236090849065ffffffffffff16614e86565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055506123ac8a8465ffffffffffff168760000160069054906101000a900461ffff1661ffff168b6139bd565b84546040805165ffffffffffff86168152660100000000000090920461ffff16602083015266ffffffffffffff83169082015273ffffffffffffffffffffffffffffffffffffffff8b16907ff6028e08bd4265711d36773ee2b3ab6b15824a3938c53ce8022919564a1b8d049060600160405180910390a26124358365ffffffffffff16612ef6565b9a9950505050505050505050565b6124996040805160c0810182526000808252602080830182905282840182905283518085018552828152808201839052606084015283518085019094528184528301529060808201908152600060209091015290565b60006124a483612b94565b509392505050565b6000806124b7612e1a565b509050610d7d81612ddd565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f73594c41593a3a616c6c6f77616e63653a2050726f686962697465642041637460448201527f696f6e00000000000000000000000000000000000000000000000000000000006064820152600090608401610ae0565b612556612f08565b61255e612fa7565b82612568816130d6565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600760209081526040808320815160c081018352815465ffffffffffff80821683526601000000000000808304821684880190815266ffffffffffffff6c010000000000000000000000009485900481168689015287518089018952600188015461ffff808216835260ff62010000928390048116848e01526060808b01949094528b51808d018d5260028c015480841682529390930416828d01526080808a0192909252600390990154891660a089015289519081018a526005548087168252948504909516998501999099529382049093169582019590955273010000000000000000000000000000000000000090940490921693830193909352518251929391926126929190614ec5565b835190915065ffffffffffff16156126b7576126b2828460000151614079565b600083525b602083015165ffffffffffff16156126df576126d78284602001516140b5565b600060208401525b604083015166ffffffffffffff1615612708576127008284604001516140ee565b600060408401525b612711836136c8565b156128915760608301515160808401515161ffff9182169116815b81811161288d5773ffffffffffffffffffffffffffffffffffffffff8a166000908152600860209081526040808320848452825291829020825160c081018452815465ffffffffffff8082166080840190815261ffff660100000000000093849004811660a0860152908452865180880188526001860154808416825284900482168188015284870152865180880188526002860154808416825284900482168188015284880152865180880190975260039094015490811686520490911691830191909152606081019190915261280390614139565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152600860209081526040808320848452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000908116825560018201805482169055600282018054821690556003909101805490911690558061288581614c2c565b91505061272c565b5050505b6040518060400160405280600061ffff168152602001600060ff16815250836060018190525082600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548166ffffffffffffff021916908366ffffffffffffff16021790555060608201518160010160008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548160ff021916908360ff160217905550505060808201518160020160008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548160ff021916908360ff160217905550505060a08201518160030160006101000a81548161ffff021916908361ffff16021790555090505081600560008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548166ffffffffffffff021916908366ffffffffffffff16021790555060608201518160000160136101000a81548161ffff021916908361ffff1602179055509050508673ffffffffffffffffffffffffffffffffffffffff167f828d875bb1fd38ee261c0c069e9bc63df13bf8e7e59acc2385ea66b86c8351378787604051612b3d9291909182521515602082015260400190565b60405180910390a284612b8b576000612b558761416b565b90508065ffffffffffff168265ffffffffffff161115612b89576000612b7b8284614e86565b9050612b8789826132a5565b505b505b50505050505050565b612bea6040805160c0810182526000808252602080830182905282840182905283518085018552828152808201839052606084015283518085019094528184528301529060808201908152600060209091015290565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600760209081526040808320815160c081018352815465ffffffffffff808216835266010000000000008204168286015266ffffffffffffff6c01000000000000000000000000909104168184015282518084018452600183015461ffff808216835260ff62010000928390048116848901526060850193909352855180870190965260028501548082168752919091049091169484019490945260808101929092526003015490911660a082015281612cbe61177d565b90508061ffff168260a0015161ffff1603612cde57509360009350915050565b612ce7826136c8565b15612dca576000612cf6614050565b905061ffff811615612d5c576000612d12878560600151613755565b90505b612d1e846136c8565b8015612d3657508161ffff16816020015161ffff1611155b15612d5a57612d45848261419a565b612d53878560600151613755565b9050612d15565b505b612d6a838361ffff1661425a565b15612dc85760008360a0015183612d819190614cd0565b61ffff16905080846020015165ffffffffffff16612d9f9190614ee6565b84604001818151612db09190614d9a565b66ffffffffffffff169052505061ffff821660a08401525b505b61ffff1660a08201529360019350915050565b6000612dfd612df8836040015166ffffffffffffff16612ef6565b614277565b8251612e109065ffffffffffff16612ef6565b6114899190614c64565b60408051608081018252600080825260208201819052918101829052606081018290529080612e4761177d565b6040805160808101825260055465ffffffffffff8082168352660100000000000082041660208301526c01000000000000000000000000810466ffffffffffffff169282019290925261ffff7301000000000000000000000000000000000000009092048216606082015294501690505b80836060015161ffff161015612ef15760608301805190612ed882614f0c565b61ffff16905250612ee883614284565b60019150612eb8565b509091565b60006114896509184e72a00083614c7c565b3360009081526002602052604090205460ff1661146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f73594c41593a3a5f6f6e6c794772616475616c4d696e7465723a20496e73756660448201527f66696369656e742050726976696c6567657300000000000000000000000000006064820152608401610ae0565b600080612fb2612e1a565b9150915080156130d2578151600580546020808601516040808801516060808a015165ffffffffffff9889167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009097168717660100000000000099909516988902949094177fffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff166c0100000000000000000000000066ffffffffffffff9093169283027fffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff161773010000000000000000000000000000000000000061ffff90951694850217909655815194855292840195909552938201527fb968421445b12044d4cf86ecc7f3f9589111c9efab4b7561360aea60f3e832eb9101610f4e565b5050565b6000806130e283612b94565b91509150801561328e5773ffffffffffffffffffffffffffffffffffffffff831660008181526007602090815260409182902085518154878401518886015165ffffffffffff9384167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009093168317660100000000000094909216938402919091177fffffffffffffffffffffffffff00000000000000ffffffffffffffffffffffff166c0100000000000000000000000066ffffffffffffff9092169182021784556060808a015180516001870180549289015161ffff9283167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000948516176201000060ff92831681029190911790925560808e0151805160028b018054928d0151918616929096169190911791169091021790915560a08b0151600390960180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169690911695861790558651928352948201929092529384015292917febc99566369f3a0bb7856de228673359eed87e744e506850f424863304607709910160405180910390a35b505050565b60006114896509184e72a00083614d86565b8065ffffffffffff166000036132b9575050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260076020908152604091829020825160c081018452815465ffffffffffff808216835266010000000000008204168285019081526c0100000000000000000000000090910466ffffffffffffff168286015284518086018652600184015461ffff8082168352620100009182900460ff9081168489015260608601939093528751808901909852600286015480821689529190910490911694860194909452608082019490945260039091015490911660a082015281519091839161339b908390614ec5565b65ffffffffffff9081169091526005805485935090916006916133ca9185916601000000000000900416614ec5565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555060006133fc848360800151613755565b90506000613408611def565b90506000613415846136c8565b159050808061342f57508161ffff16836020015161ffff16105b1561347e5760006134438560800151613895565b9050811561345357606085018190525b60808501526040805180820190915265ffffffffffff8616815261ffff83166020820152925061349c565b84836000018181516134909190614ec5565b65ffffffffffff169052505b6134ae836020015161ffff1686614344565b6134bd86856080015185614395565b50505073ffffffffffffffffffffffffffffffffffffffff90921660009081526007602090815260409182902084518154838701519487015166ffffffffffffff166c01000000000000000000000000027fffffffffffffffffffffffffff00000000000000ffffffffffffffffffffffff65ffffffffffff9687166601000000000000027fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090931696909316959095171716929092178255606084015180516001840180549284015160ff908116620100009081027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000095861661ffff958616171790925560808801518051600288018054929097015190921690920291909316928216929092179190911790915560a09093015160039091018054919093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000919091161790915550565b3360009081526001602052604090205460ff1661146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f73594c41593a3a5f6f6e6c794d696e7465723a20496e73756666696369656e7460448201527f2050726976696c656765730000000000000000000000000000000000000000006064820152608401610ae0565b60608101515160009061ffff1615611a8857506001919050565b6060810151608082015160208201518251600093929160ff1690613707906004614f2d565b6137119190614f4e565b816020015160ff168260000151600461372a9190614f2d565b6137349190614f4e565b61373e9190614cd0565b613749906001614f4e565b61ffff16949350505050565b6040805180820182526000808252602080830182905273ffffffffffffffffffffffffffffffffffffffff8616825260088152838220855161ffff16835281529281209284015191929160ff1690036137d95760408051808201909152815465ffffffffffff811682526601000000000000900461ffff16602082015291506114bb565b826020015160ff1660010361381c5760408051808201909152600182015465ffffffffffff811682526601000000000000900461ffff16602082015291506114bb565b826020015160ff1660020361385f5760408051808201909152600282015465ffffffffffff811682526601000000000000900461ffff16602082015291506114bb565b60408051808201909152600382015465ffffffffffff811682526601000000000000900461ffff16602082015291505092915050565b6040805180820190915260008082526020820152815161ffff166000036138bf5760018152919050565b6003826020015160ff1610156138f457815161ffff16815260208201516138e7906001614f6b565b60ff166020820152919050565b8151613901906001614f4e565b61ffff168152919050565b6040517f83c603e30000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906383c603e390602401602060405180830381865afa158015613999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117939190614f90565b60006139c98383614cb9565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600b60209081526040808320878452909152902080549192509065ffffffffffff1615613aea5780547501000000000000000000000000000000000000000000900467ffffffffffffffff168314613ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f73594c41593a3a6d696e744c6f636b75703a204c6f636b757020706f7369746960448201527f6f6e20616c726561647920657869737473207769746820646966666572656e7460648201527f20646561646c696e650000000000000000000000000000000000000000000000608482015260a401610ae0565b613bed565b613af2611def565b61ffff1683118015613b05575060d08211155b613b91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f73594c41593a3a6d696e744c6f636b75703a20496e76616c696420646561646c60448201527f696e6500000000000000000000000000000000000000000000000000000000006064820152608401610ae0565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600c6020908152604082208054600181018255908352912060108204018054600f9092166002026101000a61ffff81810219909316928716029190911790555b600060d0613bfb8488614c7c565b613c059190614d86565b90508060096000828254613c199190614c64565b909155505073ffffffffffffffffffffffffffffffffffffffff87166000908152600a602052604081208054839290613c53908490614c64565b9091555050815486908390600090613c7490849065ffffffffffff16614ec5565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550808260000160068282829054906101000a900466ffffffffffffff16613cbc9190614d9a565b825466ffffffffffffff9182166101009390930a928302919092021990911617905550815467ffffffffffffffff8581167501000000000000000000000000000000000000000000027fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff9188166d010000000000000000000000000002919091167fffffff00000000000000000000000000000000ffffffffffffffffffffffffff9092169190911717825560408051878152602081018390529081018690526060810185905273ffffffffffffffffffffffffffffffffffffffff8816907f8d57bc413d172db24c650affb289486236f8cf804335bc881bb5033401acd5da9060800160405180910390a250505050505050565b600062093a8060005483613de59190614cb9565b613def9190614d86565b611489906001614c64565b805160009065ffffffffffff1615801590610d3d5750506060015167ffffffffffffffff16111590565b6000836020015166ffffffffffffff1660096000828254613e459190614cb9565b909155505060208085015173ffffffffffffffffffffffffffffffffffffffff85166000908152600a90925260408220805466ffffffffffffff909216929091613e90908490614cb9565b9091555050835160405183815265ffffffffffff909116915073ffffffffffffffffffffffffffffffffffffffff8416907fdebd6c689e64ba7da4f3606a398615e9e8df6a117b5fb6fe720db13a3cd34f5a9060200160405180910390a273ffffffffffffffffffffffffffffffffffffffff9092166000908152600b602090815260408083209383529290522080547fffffff0000000000000000000000000000000000000000000000000000000000169055919050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600860209081526040808320845161ffff168452825282209083015160ff168203613f92579050806114bb565b826020015160ff16600103613fac578060010191506114bb565b826020015160ff16600203613fc6578060020191506114bb565b6003019392505050565b600080613fde600584614d86565b6000818152600660205260408120919250613ffa600586614fad565b90508060000361400c57509392505050565b8060010361401f57506001019392505050565b8060020361403257506002019392505050565b8060030361404557506003019392505050565b506004019392505050565b60008061405b611def565b61ffff16905060d081111561407557610d7d60d082614cb9565b5090565b815165ffffffffffff80831691161015614094575060009052565b80826000018181516140a69190614e86565b65ffffffffffff169052505050565b8065ffffffffffff16826020015165ffffffffffff1610156140dc57600060208301525050565b80826020018181516140a69190614e86565b8066ffffffffffffff16826040015166ffffffffffffff16101561411757600060408301525050565b80826040018181516141299190614ea5565b66ffffffffffffff169052505050565b80516141449061454f565b614151816020015161454f565b61415e816040015161454f565b610e27816060015161454f565b600061417682613293565b90508161418a8265ffffffffffff16612ef6565b1015611a885780610d3d81614fc1565b60006141ad826020015161ffff166146a1565b825160a0850151919250906000906141c59084614cd0565b61ffff16905080856020015165ffffffffffff166141e39190614ee6565b856040018181516141f49190614d9a565b66ffffffffffffff16905250600061420b836146ba565b905061421786826140ee565b82866000018181516142299190614ec5565b65ffffffffffff1690525061423e86846140b5565b614247866146cf565b50505061ffff1660a09092019190915250565b6000818360a0015161ffff16108015610d3d5750610d3d836136c8565b600061148960d083614d86565b806020015165ffffffffffff16816040018181516142a29190614d9a565b66ffffffffffffff16905250606081015160d061ffff90911610610e2757600060d0826060015161ffff166142d79190614cb9565b6142e2906001614c64565b905060006142ef82613fd0565b5465ffffffffffff169050801561328e57600061430b826146ba565b905061431784826140ee565b61432184836140b5565b81846000018181516143339190614ec5565b65ffffffffffff1690525050505050565b600061434f83613fd0565b80549091508290829060009061436e90849065ffffffffffff16614ec5565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860209081526040808320855161ffff1684528252822090840151909160ff909116900361442a5781518154602084015161ffff166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911665ffffffffffff90921691909117178155614549565b826020015160ff16600103614490578151600182018054602085015161ffff166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911665ffffffffffff90931692909217919091179055614549565b826020015160ff166002036144f6578151600282018054602085015161ffff166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911665ffffffffffff90931692909217919091179055614549565b8151600382018054602085015161ffff166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911665ffffffffffff909316929092179190911790555b50505050565b805165ffffffffffff1615610e27576000614571826020015161ffff16613fd0565b8251815491925065ffffffffffff9081169116106145cb578151815482906000906145a590849065ffffffffffff16614e86565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055505050565b805482516145e19165ffffffffffff1690614e86565b65ffffffffffff166001036146195780547fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000016905550565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f73594c41593a3a5f72656d6f7665557365725472616e63686546726f6d476c6f60448201527f62616c3a205472616e63686520707265636973696f6e000000000000000000006064820152608401610ae0565b600060016146b060d084614c64565b6114899190614cb9565b600061148960d065ffffffffffff8416614c7c565b60808101515160608201515161ffff9081169116148015614705575080608001516020015160ff1681606001516020015160ff16145b15614726576040805180820190915260008082526020820152606082015250565b6147338160600151613895565b606082015250565b600060208083528351808285015260005b818110156147685785810183015185820160400152820161474c565b8181111561477a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a8857600080fd5b600080604083850312156147e557600080fd5b6147ee836147ae565b946020939093013593505050565b60006020828403121561480e57600080fd5b610d3d826147ae565b602080825282518282018190526000919060409081850190868401855b8281101561488c578151805165ffffffffffff1685528681015166ffffffffffffff16878601528581015167ffffffffffffffff90811687870152606091820151169085015260809093019290850190600101614834565b5091979650505050505050565b6000806000606084860312156148ae57600080fd5b6148b7846147ae565b92506148c5602085016147ae565b9150604084013590509250925092565b6000602082840312156148e757600080fd5b5035919050565b60408082528351828201819052600091906020906060850190828801855b8281101561494057614930848351805161ffff16825260209081015160ff16910152565b928501929084019060010161490c565b5050508481038286015285518082528683019183019060005b8181101561499257614982838551805165ffffffffffff16825260209081015161ffff16910152565b9284019291850191600101614959565b509098975050505050505050565b8015158114610e2757600080fd5b600080604083850312156149c157600080fd5b6149ca836147ae565b915060208301356149da816149a0565b809150509250929050565b60006101008201905065ffffffffffff8084511683528060208501511660208401525066ffffffffffffff60408401511660408301526060830151614a3e6060840182805161ffff16825260209081015160ff16910152565b506080830151805161ffff1660a0840152602081015160ff1660c08401525061ffff60a08401511660e083015292915050565b600080600060608486031215614a8657600080fd5b614a8f846147ae565b95602085013595506040909401359392505050565b60008060408385031215614ab757600080fd5b50508035926020909101359150565b60008060008385036080811215614adc57600080fd5b614ae5856147ae565b935060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215614b1757600080fd5b50602084019150606084013590509250925092565b60008060408385031215614b3f57600080fd5b614b48836147ae565b9150614b56602084016147ae565b90509250929050565b600080600060608486031215614b7457600080fd5b614b7d846147ae565b9250602084013591506040840135614b94816149a0565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c5d57614c5d614bfd565b5060010190565b60008219821115614c7757614c77614bfd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cb457614cb4614bfd565b500290565b600082821015614ccb57614ccb614bfd565b500390565b600061ffff83811690831681811015614ceb57614ceb614bfd565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081614d3157614d31614bfd565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614d9557614d95614d57565b500490565b600066ffffffffffffff808316818516808303821115614dbc57614dbc614bfd565b01949350505050565b600060408284031215614dd757600080fd5b6040516040810181811067ffffffffffffffff82111715614e21577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052823561ffff81168114614e3657600080fd5b8152602083013560ff81168114614e4c57600080fd5b60208201529392505050565b600065ffffffffffff80831681851681830481118215151615614e7d57614e7d614bfd565b02949350505050565b600065ffffffffffff83811690831681811015614ceb57614ceb614bfd565b600066ffffffffffffff83811690831681811015614ceb57614ceb614bfd565b600065ffffffffffff808316818516808303821115614dbc57614dbc614bfd565b600066ffffffffffffff80831681851681830481118215151615614e7d57614e7d614bfd565b600061ffff808316818103614f2357614f23614bfd565b6001019392505050565b600061ffff80831681851681830481118215151615614e7d57614e7d614bfd565b600061ffff808316818516808303821115614dbc57614dbc614bfd565b600060ff821660ff84168060ff03821115614f8857614f88614bfd565b019392505050565b600060208284031215614fa257600080fd5b8151610d3d816149a0565b600082614fbc57614fbc614d57565b500690565b600065ffffffffffff808316818103614f2357614f23614bfd56fea2646970667358221220812ee2a1ce818f8d37a4dd005c691802e51902640e24b614c40a0885704ddb3064736f6c634300080d0033000000000000000000000000ab865d95a574511a6c893c38a4d892275ca70570