28k txs
61.4k calls
constructor
constructor(address voteDelegateFactory_, address usdsJoin_, bytes32 ilk_, address sky_, address lssky_, uint256 fee_)
functions
farms
viewfunction farms(address farm) view returns (uint8)
fee
viewfunction fee() view returns (uint256)
ilk
viewfunction ilk() view returns (bytes32)
isUrnAuth
viewfunction isUrnAuth(address owner, uint256 index, address usr) view returns (bool ok)
jug
viewfunction jug() view returns (address)
lssky
viewfunction lssky() view returns (address)
ownerUrns
viewfunction ownerUrns(address owner, uint256 index) view returns (address urn)
ownerUrnsCount
viewfunction ownerUrnsCount(address owner) view returns (uint256 count)
sky
viewfunction sky() view returns (address)
urnAuctions
viewfunction urnAuctions(address urn) view returns (uint256 auctionsCount)
urnCan
viewfunction urnCan(address urn, address usr) view returns (uint256 allowed)
urnFarms
viewfunction urnFarms(address urn) view returns (address farm)
urnImplementation
viewfunction urnImplementation() view returns (address)
urnOwners
viewfunction urnOwners(address urn) view returns (address owner)
urnVoteDelegates
viewfunction urnVoteDelegates(address urn) view returns (address voteDelegate)
usds
viewfunction usds() view returns (address)
usdsJoin
viewfunction usdsJoin() view returns (address)
vat
viewfunction vat() view returns (address)
voteDelegateFactory
viewfunction voteDelegateFactory() view returns (address)
wards
viewfunction wards(address usr) view returns (uint256 allowed)
addFarm
nonpayablefunction addFarm(address farm)
delFarm
nonpayablefunction delFarm(address farm)
deny
nonpayablefunction deny(address usr)
draw
nonpayablefunction draw(address owner, uint256 index, address to, uint256 wad)
file
nonpayablefunction file(bytes32 what, address data)
free
nonpayablefunction free(address owner, uint256 index, address to, uint256 wad) returns (uint256 freed)
freeNoFee
nonpayablefunction freeNoFee(address owner, uint256 index, address to, uint256 wad)
getReward
nonpayablefunction getReward(address owner, uint256 index, address farm, address to) returns (uint256 amt)
hope
nonpayablefunction hope(address owner, uint256 index, address usr)
lock
nonpayablefunction lock(address owner, uint256 index, uint256 wad, uint16 ref)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
nope
nonpayablefunction nope(address owner, uint256 index, address usr)
onKick
nonpayablefunction onKick(address urn, uint256 wad)
onRemove
nonpayablefunction onRemove(address urn, uint256 sold, uint256 left)
onTake
nonpayablefunction onTake(address urn, address who, uint256 wad)
open
nonpayablefunction open(uint256 index) returns (address urn)
rely
nonpayablefunction rely(address usr)
selectFarm
nonpayablefunction selectFarm(address owner, uint256 index, address farm, uint16 ref)
selectVoteDelegate
nonpayablefunction selectVoteDelegate(address owner, uint256 index, address voteDelegate)
wipe
nonpayablefunction wipe(address owner, uint256 index, uint256 wad)
wipeAll
nonpayablefunction wipeAll(address owner, uint256 index) returns (uint256 wad)
events
AddFarm
event AddFarm(address farm)
DelFarm
event DelFarm(address farm)
Deny
event Deny(address indexed usr)
Draw
event Draw(address indexed owner, uint256 indexed index, address to, uint256 wad)
File
event File(bytes32 indexed what, address data)
Free
event Free(address indexed owner, uint256 indexed index, address to, uint256 wad, uint256 freed)
FreeNoFee
event FreeNoFee(address indexed owner, uint256 indexed index, address to, uint256 wad)
GetReward
event GetReward(address indexed owner, uint256 indexed index, address indexed farm, address to, uint256 amt)
Hope
event Hope(address indexed owner, uint256 indexed index, address indexed usr)
Lock
event Lock(address indexed owner, uint256 indexed index, uint256 wad, uint16 ref)
Nope
event Nope(address indexed owner, uint256 indexed index, address indexed usr)
OnKick
event OnKick(address indexed urn, uint256 wad)
OnRemove
event OnRemove(address indexed urn, uint256 sold, uint256 burn, uint256 refund)
OnTake
event OnTake(address indexed urn, address indexed who, uint256 wad)
Open
event Open(address indexed owner, uint256 indexed index, address urn)
Rely
event Rely(address indexed usr)
SelectFarm
event SelectFarm(address indexed owner, uint256 indexed index, address indexed farm, uint16 ref)
SelectVoteDelegate
event SelectVoteDelegate(address indexed owner, uint256 indexed index, address indexed voteDelegate)
Wipe
event Wipe(address indexed owner, uint256 indexed index, uint256 wad)
errors
No errors.
creation bytecode
0x6101a060405234801562000011575f80fd5b506040516200495a3803806200495a833981016040819052620000349162000331565b670de0b6b3a76400008110620000a15760405162461bcd60e51b815260206004820152602860248201527f4c6f636b7374616b65456e67696e652f6665652d657175616c2d6f722d677265604482015267185d195c8b5dd85960c21b606482015260840160405180910390fd5b6001600160a01b03808716608052851660c0819052604080516336569e7760e01b815290516336569e77916004808201926020929091908290030181865afa158015620000f0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001169190620003a9565b6001600160a01b031660a0816001600160a01b03168152505060c0516001600160a01b0316634cf282fb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001949190620003a9565b6001600160a01b0390811660e0526101008590528381166101205282166101405261018081905260a0516040518390620001ce906200030b565b6001600160a01b03928316815291166020820152604001604051809103905ff080158015620001ff573d5f803e3d5ffd5b506001600160a01b039081166101605260a0516040516328ec8bf160e21b8152878316600482015291169063a3b22fc4906024015f604051808303815f87803b1580156200024b575f80fd5b505af11580156200025e573d5f803e3d5ffd5b505060e05160405163095ea7b360e01b81526001600160a01b0389811660048301525f196024830152909116925063095ea7b391506044015f604051808303815f87803b158015620002ae575f80fd5b505af1158015620002c1573d5f803e3d5ffd5b5050335f8181526020819052604080822060019055519193507fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a60925090a2505050505050620003ce565b61088780620040d383390190565b6001600160a01b03811681146200032e575f80fd5b50565b5f805f805f8060c0878903121562000347575f80fd5b8651620003548162000319565b6020880151909650620003678162000319565b604088015160608901519196509450620003818162000319565b6080880151909350620003948162000319565b8092505060a087015190509295509295509295565b5f60208284031215620003ba575f80fd5b8151620003c78162000319565b9392505050565b60805160a05160c05160e0516101005161012051610140516101605161018051613b1e620005b55f395f818161067e01528181610cfe015261269b01525f81816106a5015261344901525f818161044301528181610f58015281816112e9015281816118a30152612f2e01525f818161041c01528181610c1701528181610d66015281816115d10152818161168e015281816126d901528181612ad801528181612d8901526131ad01525f81816105d601528181610905015281816109d601528181610a8301528181610e0c01528181610ee4015281816111cb015281816117570152818161182f01528181611a7a01528181611b5601528181611d4601528181611e2b01528181611f3801528181612583015281816128ae015281816129cd01528181612fc3015261306f01525f818161037801528181611c3b01526127c701525f81816106cc01528181611caf01528181611fac015261283b01525f81816102fa0152818161093f015281816109fe01528181610e4901528181610eb501528181611203015281816117940152818161180001528181611ab501528181611b7e01528181611d1701528181611f0b015281816125bb015281816128d7015281816129a601528181612f94015261304001525f818161026801526107b50152613b1e5ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c806390a0144111610140578063bf353dbb116100bf578063d9c415f411610084578063d9c415f41461061e578063d9f0619214610646578063ddca3f4314610679578063e88e94be146106a0578063fa1e2e86146106c7578063fdc56a18146106ee575f80fd5b8063bf353dbb1461059f578063c3b6cb4b146105be578063c5ce281e146105d1578063d0294ea5146105f8578063d4e8be831461060b575f80fd5b8063ac9650d811610105578063ac9650d81461051c578063aff7b07d1461053c578063b2b192e61461054f578063b5331d5e14610579578063bf0700fe1461058c575f80fd5b806390a01441146104b15780639c52a7f1146104c4578063a1c03731146104d7578063a496d520146104f6578063ac57c9bc14610509575f80fd5b80635c2e41c1116101cc5780636a6e9edf116101915780636a6e9edf1461043e5780636c3dead4146104655780636ddb4566146104785780637abdf2501461048b57806384718d891461049e575f80fd5b80635c2e41c1146103bb578063631c84a5146103ce57806365fae35e146103f1578063690e7c09146104045780636923180414610417575f80fd5b806336569e771161021257806336569e77146102f55780633d64fc521461031c578063421adfa0146103445780634cf282fb14610373578063587710791461039a575f80fd5b80630adfd1bf1461024e5780631b7a353e146102635780631c6eb67b146102a75780632a95b45d146102ba5780632d074bbd146102e2575b5f80fd5b61026161025c3660046134d3565b61070d565b005b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6102616102b536600461350c565b610bb9565b61028a6102c836600461354d565b60076020525f90815260409020546001600160a01b031681565b6102616102f0366004613566565b610cc6565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b61028a61032a36600461354d565b60046020525f90815260409020546001600160a01b031681565b61036661035236600461354d565b60016020525f908152604090205460ff1681565b60405161029e91906135aa565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b6103ad6103a83660046135d0565b61103c565b60405190815260200161029e565b6102616103c936600461361a565b61118e565b6103e16103dc3660046134d3565b6113be565b604051901515815260200161029e565b6102616103ff36600461354d565b6113db565b61028a610412366004613642565b61144d565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b61026161047336600461366a565b6115a1565b6103ad61048636600461361a565b611a5f565b61026161049936600461350c565b611e0e565b60095461028a906001600160a01b031681565b6102616104bf3660046134d3565b61204e565b6102616104d236600461354d565b6120b6565b6103ad6104e536600461354d565b60026020525f908152604090205481565b6102616105043660046134d3565b612127565b61026161051736600461354d565b61218e565b61052f61052a3660046136a2565b612216565b60405161029e9190613711565b61026161054a36600461354d565b612372565b6103ad61055d3660046137a1565b600560209081525f928352604080842090915290825290205481565b6102616105873660046137d2565b6123f4565b6103ad61059a36600461350c565b612686565b6103ad6105ad36600461354d565b5f6020819052908152604090205481565b6102616105cc366004613566565b612797565b6103ad7f000000000000000000000000000000000000000000000000000000000000000081565b610261610606366004613811565b612a93565b61026161061936600461384a565b612b8e565b61028a61062c36600461354d565b60066020525f90815260409020546001600160a01b031681565b61028a61065436600461361a565b600360209081525f92835260408084209091529082529020546001600160a01b031681565b6103ad7f000000000000000000000000000000000000000000000000000000000000000081565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b61028a7f000000000000000000000000000000000000000000000000000000000000000081565b6103ad6106fc36600461354d565b60086020525f908152604090205481565b5f6107188484612c83565b6001600160a01b0381165f90815260086020526040902054909150156107855760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b7374616b65456e67696e652f75726e2d696e2d61756374696f6e000060448201526064015b60405180910390fd5b6001600160a01b0382161580610823575060405163d42efd8360e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063d42efd83906024016020604051808303815f875af11580156107fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081f919061386b565b6001145b61087f5760405162461bcd60e51b815260206004820152602760248201527f4c6f636b7374616b65456e67696e652f6e6f742d76616c69642d766f74652d64604482015266656c656761746560c81b606482015260840161077c565b6001600160a01b038082165f90815260066020526040902054811690831681036108f65760405162461bcd60e51b815260206004820152602260248201527f4c6f636b7374616b65456e67696e652f73616d652d766f74652d64656c656761604482015261746560f01b606482015260840161077c565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0383811660248301525f9182917f00000000000000000000000000000000000000000000000000000000000000001690632424be5c906044016040805180830381865afa158015610983573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a79190613882565b915091505f811180156109c257506001600160a01b03851615155b15610b6357604051636cb1c69b60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d9638d369060240160a060405180830381865afa158015610a4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6f91906138a4565b505060095460405163089c54b560e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201529194506001600160a01b031692506344e2a5a891506024016020604051808303815f875af1158015610adb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aff919061386b565b610b0990836138f4565b610b1382856138f4565b1015610b615760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b7374616b65456e67696e652f75726e2d756e73616665000000000000604482015260640161077c565b505b610b6f84838588612cf8565b846001600160a01b031686886001600160a01b03167f7af85b23b513d22f5f9daec6f2ad07e68c4953757a0d52e2d1013a5cc4995cef60405160405180910390a450505050505050565b335f90815260208190526040902054600114610be75760405162461bcd60e51b815260040161077c9061390b565b5f610bf28585612c83565b9050610bff81835f612e73565b5060405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90610c4e9086908690600401613942565b5f604051808303815f87803b158015610c65575f80fd5b505af1158015610c77573d5f803e3d5ffd5b5050505083856001600160a01b03167fcd6427026c24aea1d465d0e880edc743f7ba98ea5a30a21702762edbb61c148d8585604051610cb7929190613942565b60405180910390a35050505050565b335f90815260208190526040902054600114610cf45760405162461bcd60e51b815260040161077c9061390b565b5f808215610fc1577f0000000000000000000000000000000000000000000000000000000000000000610d4c610d3282670de0b6b3a764000061395b565b610d3c83886138f4565b610d469190613982565b8561321e565b604051632770a7eb60e21b81529093506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90610d9d9030908790600401613942565b5f604051808303815f87803b158015610db4575f80fd5b505af1158015610dc6573d5f803e3d5ffd5b505050838503925050838314610fbf576001600160ff1b03821115610dfd5760405162461bcd60e51b815260040161077c906139a1565b604051633e6e9fef60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b038781166024830152604482018490527f00000000000000000000000000000000000000000000000000000000000000001690637cdd3fde906064015f604051808303815f87803b158015610e8a575f80fd5b505af1158015610e9c573d5f803e3d5ffd5b50506040516301eeacfd60e61b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250637bab3f409150610f16907f0000000000000000000000000000000000000000000000000000000000000000908a9081905f90899082906004016139d8565b5f604051808303815f87803b158015610f2d575f80fd5b505af1158015610f3f573d5f803e3d5ffd5b50506040516340c10f1960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506340c10f199150610f919089908690600401613942565b5f604051808303815f87803b158015610fa8575f80fd5b505af1158015610fba573d5f803e3d5ffd5b505050505b505b6001600160a01b0385165f908152600860205260408120805491610fe483613a0d565b909155505060408051858152602081018490529081018290526001600160a01b038616907fbb73c7bd9a4eafb9de35122e727b77695cc0d396aedc338b3589407028b568f69060600160405180910390a25050505050565b5f806110488686612c83565b90505f6001600160a01b0385165f9081526001602052604090205460ff16600281111561107757611077613596565b116110c45760405162461bcd60e51b815260206004820181905260248201527f4c6f636b7374616b65456e67696e652f6661726d2d756e737570706f72746564604482015260640161077c565b604051636b09169560e01b81526001600160a01b0385811660048301528481166024830152821690636b091695906044016020604051808303815f875af1158015611111573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611135919061386b565b9150836001600160a01b031685876001600160a01b03167fb0787e3944c17543aef2eb910c82d62e9ba80dabf5b15e371b09ac5728839700868660405161117d929190613942565b60405180910390a450949350505050565b335f908152602081905260409020546001146111bc5760405162461bcd60e51b815260040161077c9061390b565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0383811660248301525f917f000000000000000000000000000000000000000000000000000000000000000090911690632424be5c906044016040805180830381865afa158015611249573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126d9190613882565b5090505f61127b8383613a22565b6001600160a01b038086165f908152600660205260408120549293506112a79287928592911690612cf8565b6001600160a01b038085165f908152600760205260408120546112d292879285929091169080613236565b604051632770a7eb60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac906113209087908790600401613942565b5f604051808303815f87803b158015611337575f80fd5b505af1158015611349573d5f803e3d5ffd5b505050506001600160a01b0384165f90815260086020526040812080549161137083613a35565b9190505550836001600160a01b03167fee91ffe09782821749e0fd00ad3d404b7fb3e2e8520e77aa5549c900f696f557846040516113b091815260200190565b60405180910390a250505050565b5f6113d3846113cd868661334f565b846133c1565b949350505050565b335f908152602081905260409020546001146114095760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f8181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b335f9081526002602052604081208054908261146883613a35565b9190505582146114ba5760405162461bcd60e51b815260206004820152601f60248201527f4c6f636b7374616b65456e67696e652f77726f6e672d75726e2d696e64657800604482015260640161077c565b5f6114c361340d565b90506037602082015ff09150816001600160a01b031663e1c7392a6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611507575f80fd5b505af1158015611519573d5f803e3d5ffd5b5050335f818152600360209081526040808320898452825280832080546001600160a01b038a166001600160a01b03199182168117909255818552600484529382902080549094168517909355519182528794509192507fdde6dd354074cad07a2dacbb612a6d2bac55ac537264d73250bf5c76bc15d64d910160405180910390a350919050565b5f6115ac858561334f565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b15801561161a575f80fd5b505af115801561162c573d5f803e3d5ffd5b505050506001600160ff1b038311156116575760405162461bcd60e51b815260040161077c906139a1565b6001600160a01b038082165f908152600660205260409020541680156117485760405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906116c59084908890600401613942565b5f604051808303815f87803b1580156116dc575f80fd5b505af11580156116ee573d5f803e3d5ffd5b50506040516337519c1960e21b8152600481018790526001600160a01b038416925063dd46706491506024015f604051808303815f87803b158015611731575f80fd5b505af1158015611743573d5f803e3d5ffd5b505050505b604051633e6e9fef60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b038381166024830152604482018690527f00000000000000000000000000000000000000000000000000000000000000001690637cdd3fde906064015f604051808303815f87803b1580156117d5575f80fd5b505af11580156117e7573d5f803e3d5ffd5b5050604051637608870360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063760887039150611861907f000000000000000000000000000000000000000000000000000000000000000090869081905f908b9082906004016139d8565b5f604051808303815f87803b158015611878575f80fd5b505af115801561188a573d5f803e3d5ffd5b50506040516340c10f1960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506340c10f1991506118dc9085908890600401613942565b5f604051808303815f87803b1580156118f3575f80fd5b505af1158015611905573d5f803e3d5ffd5b505050506001600160a01b038281165f90815260076020526040902054168015611a0c5760016001600160a01b0382165f9081526001602052604090205460ff16600281111561195757611957613596565b146119a45760405162461bcd60e51b815260206004820152601c60248201527f4c6f636b7374616b65456e67696e652f6661726d2d64656c6574656400000000604482015260640161077c565b60405163e62d29df60e01b81526001600160a01b0382811660048301526024820187905261ffff8616604483015284169063e62d29df906064015f604051808303815f87803b1580156119f5575f80fd5b505af1158015611a07573d5f803e3d5ffd5b505050505b6040805186815261ffff8616602082015287916001600160a01b038a16917f15a082f86d911273b558eb3797fc962ebe7cb22d787d8d13989e1ff0dc73a60791015b60405180910390a350505050505050565b5f80611a6b848461334f565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0380831660248301529192505f917f00000000000000000000000000000000000000000000000000000000000000001690632424be5c906044016040805180830381865afa158015611af9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1d9190613882565b9150506001600160ff1b03811115611b475760405162461bcd60e51b815260040161077c906139a1565b604051636cb1c69b60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d9638d369060240160a060405180830381865afa158015611bcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bef91906138a4565b505050915050611c168183611c0491906138f4565b6b033b2e3c9fd0803ce800000061348d565b6040516323b872dd60e01b8152336004820152306024820152604481018290529094507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b158015611c84575f80fd5b505af1158015611c96573d5f803e3d5ffd5b5050604051633b4da69f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250633b4da69f9150611ce89030908890600401613942565b5f604051808303815f87803b158015611cff575f80fd5b505af1158015611d11573d5f803e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663760887037f0000000000000000000000000000000000000000000000000000000000000000855f305f88611d7390613a4d565b6040518763ffffffff1660e01b8152600401611d94969594939291906139d8565b5f604051808303815f87803b158015611dab575f80fd5b505af1158015611dbd573d5f803e3d5ffd5b5050505084866001600160a01b03167f7c82d5b45cb4b7df16c473bcd2c3933a1651d1c91b9f17ebb2cccacbf29e03fd86604051611dfd91815260200190565b60405180910390a350505092915050565b5f611e198585612c83565b60095460405163089c54b560e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201529192505f916001600160a01b03909116906344e2a5a8906024016020604051808303815f875af1158015611e85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ea9919061386b565b90505f611ecb611ec56b033b2e3c9fd0803ce8000000866138f4565b8361348d565b90506001600160ff1b03811115611ef45760405162461bcd60e51b815260040161077c906139a1565b604051637608870360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637608870390611f6a907f00000000000000000000000000000000000000000000000000000000000000009087905f903090829089906004016139d8565b5f604051808303815f87803b158015611f81575f80fd5b505af1158015611f93573d5f803e3d5ffd5b505060405163ef693bed60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063ef693bed9150611fe59088908890600401613942565b5f604051808303815f87803b158015611ffc575f80fd5b505af115801561200e573d5f803e3d5ffd5b5050505085876001600160a01b03167f970ddd008a8a27402f3bcac48972a48da4954fbd2493769baba2ad596e4895668787604051611a4e929190613942565b5f6120598484612c83565b6001600160a01b038082165f908152600560209081526040808320878516808552925280832060019055519394509286928816917fda1655dfbc632499abfa84202e0f5eda082634c6c927410ed51fc2213c3fb7d891a450505050565b335f908152602081905260409020546001146120e45760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f81815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b5f6121328484612c83565b6001600160a01b038082165f9081526005602090815260408083208785168085529252808320839055519394509286928816917f81a57ff14cc36197cdb39b8075f925696024dc426d81c0c798dc4632a0eb4eb891a450505050565b335f908152602081905260409020546001146121bc5760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f81815260016020908152604091829020805460ff1916600217905590519182527ffae8feabc29b75519fe202a936053f133aa6ee03453dcb7bbbe544d3b697061691015b60405180910390a150565b60608167ffffffffffffffff81111561223157612231613a67565b60405190808252806020026020018201604052801561226457816020015b606081526020019060019003908161224f5790505b5090505f5b8281101561236b575f803086868581811061228657612286613a7b565b90506020028101906122989190613a8f565b6040516122a6929190613ad9565b5f60405180830381855af49150503d805f81146122de576040519150601f19603f3d011682016040523d82523d5f602084013e6122e3565b606091505b5091509150816123385780515f036123305760405162461bcd60e51b815260206004820152601060248201526f1b5d5b1d1a58d85b1b0819985a5b195960821b604482015260640161077c565b805181602001fd5b8084848151811061234b5761234b613a7b565b60200260200101819052505050808061236390613a35565b915050612269565b5092915050565b335f908152602081905260409020546001146123a05760405162461bcd60e51b815260040161077c9061390b565b6001600160a01b0381165f81815260016020818152604092839020805460ff191690921790915590519182527f169dc17e0067f1d5a355eb6a2ab8d282a8569a96f0f3dc4776e9d62023fe6c36910161220b565b5f6123ff8585612c83565b6001600160a01b0381165f90815260086020526040902054909150156124675760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b7374616b65456e67696e652f75726e2d696e2d61756374696f6e0000604482015260640161077c565b6001600160a01b03831615806124a8575060016001600160a01b0384165f9081526001602052604090205460ff1660028111156124a6576124a6613596565b145b6125085760405162461bcd60e51b815260206004820152602b60248201527f4c6f636b7374616b65456e67696e652f6661726d2d756e737570706f7274656460448201526a0b5bdc8b59195b195d195960aa1b606482015260840161077c565b6001600160a01b038082165f90815260076020526040902054811690841681036125745760405162461bcd60e51b815260206004820152601960248201527f4c6f636b7374616b65456e67696e652f73616d652d6661726d00000000000000604482015260640161077c565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0383811660248301525f917f000000000000000000000000000000000000000000000000000000000000000090911690632424be5c906044016040805180830381865afa158015612601573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126259190613882565b5090506126358382848888613236565b60405161ffff851681526001600160a01b038087169188918a16907fd434da22811bf2b5c3a8fc79e3d6644a80549c3159b7b28388eace49036f44c39060200160405180910390a450505050505050565b5f806126928686612c83565b90506126bf81847f0000000000000000000000000000000000000000000000000000000000000000612e73565b60405163a9059cbb60e01b81529092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906127109087908690600401613942565b5f604051808303815f87803b158015612727575f80fd5b505af1158015612739573d5f803e3d5ffd5b5050604080516001600160a01b0388811682526020820188905291810186905288935090891691507fde1819362eecc26ff17e717ad1e56b0154734cd5cc609494230256154e6c7ff09060600160405180910390a350949350505050565b5f6127a2848461334f565b6040516323b872dd60e01b8152336004820152306024820152604481018490529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b158015612810575f80fd5b505af1158015612822573d5f803e3d5ffd5b5050604051633b4da69f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250633b4da69f91506128749030908690600401613942565b5f604051808303815f87803b15801561288b575f80fd5b505af115801561289d573d5f803e3d5ffd5b5050604051636cb1c69b60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f92507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063d9638d369060240160a060405180830381865afa158015612925573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061294991906138a4565b5050509150505f816b033b2e3c9fd0803ce80000008561296991906138f4565b6129739190613982565b90506001600160ff1b0381111561299c5760405162461bcd60e51b815260040161077c906139a1565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663760887037f0000000000000000000000000000000000000000000000000000000000000000855f30816129f988613a4d565b6040518763ffffffff1660e01b8152600401612a1a969594939291906139d8565b5f604051808303815f87803b158015612a31575f80fd5b505af1158015612a43573d5f803e3d5ffd5b5050505084866001600160a01b03167f7c82d5b45cb4b7df16c473bcd2c3933a1651d1c91b9f17ebb2cccacbf29e03fd86604051612a8391815260200190565b60405180910390a3505050505050565b335f90815260208190526040902054600114612ac15760405162461bcd60e51b815260040161077c9061390b565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90612b0f9085908590600401613942565b5f604051808303815f87803b158015612b26575f80fd5b505af1158015612b38573d5f803e3d5ffd5b50505050816001600160a01b0316836001600160a01b03167f451bc655099856594a05cf3a385ce798360d63bc64e37b85d96e99a4b988fca683604051612b8191815260200190565b60405180910390a3505050565b335f90815260208190526040902054600114612bbc5760405162461bcd60e51b815260040161077c9061390b565b81626a756760e81b03612be957600980546001600160a01b0319166001600160a01b038316179055612c41565b60405162461bcd60e51b815260206004820152602760248201527f4c6f636b7374616b65456e67696e652f66696c652d756e7265636f676e697a65604482015266642d706172616d60c81b606482015260840161077c565b6040516001600160a01b038216815282907f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba9060200160405180910390a25050565b5f612c8e838361334f565b9050612c9b8382336133c1565b612cf25760405162461bcd60e51b815260206004820152602260248201527f4c6f636b7374616b65456e67696e652f75726e2d6e6f742d617574686f72697a604482015261195960f21b606482015260840161077c565b92915050565b8215612e43576001600160a01b03821615612d635760405163d8ccd0f360e01b8152600481018490526001600160a01b0383169063d8ccd0f3906024015f604051808303815f87803b158015612d4c575f80fd5b505af1158015612d5e573d5f803e3d5ffd5b505050505b6001600160a01b03811615612e435760405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390612dc09084908790600401613942565b5f604051808303815f87803b158015612dd7575f80fd5b505af1158015612de9573d5f803e3d5ffd5b50506040516337519c1960e21b8152600481018690526001600160a01b038416925063dd46706491506024015f604051808303815f87803b158015612e2c575f80fd5b505af1158015612e3e573d5f803e3d5ffd5b505050505b6001600160a01b039384165f90815260066020526040902080546001600160a01b03191691909416179092555050565b5f6001600160ff1b03831115612e9b5760405162461bcd60e51b815260040161077c906139a1565b6001600160a01b038085165f90815260076020526040902054168015612f175760405163f3fef3a360e01b81526001600160a01b0386169063f3fef3a390612ee99084908890600401613942565b5f604051808303815f87803b158015612f00575f80fd5b505af1158015612f12573d5f803e3d5ffd5b505050505b604051632770a7eb60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90612f659088908890600401613942565b5f604051808303815f87803b158015612f7c575f80fd5b505af1158015612f8e573d5f803e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663760887037f000000000000000000000000000000000000000000000000000000000000000087885f89612fef90613a4d565b5f6040518763ffffffff1660e01b8152600401613011969594939291906139d8565b5f604051808303815f87803b158015613028575f80fd5b505af115801561303a573d5f803e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637cdd3fde7f0000000000000000000000000000000000000000000000000000000000000000878761309990613a4d565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b03909116602483015260448201526064015f604051808303815f87803b1580156130e4575f80fd5b505af11580156130f6573d5f803e3d5ffd5b505050506001600160a01b038581165f908152600660205260409020541680156131705760405163d8ccd0f360e01b8152600481018690526001600160a01b0382169063d8ccd0f3906024015f604051808303815f87803b158015613159575f80fd5b505af115801561316b573d5f803e3d5ffd5b505050505b5f670de0b6b3a764000061318486886138f4565b61318e9190613982565b9050801561321257604051632770a7eb60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac906131e49030908590600401613942565b5f604051808303815f87803b1580156131fb575f80fd5b505af115801561320d573d5f803e3d5ffd5b505050505b90940395945050505050565b5f8183111561322d578161322f565b825b9392505050565b831561331e576001600160a01b038316156132a75760405163f3fef3a360e01b81526001600160a01b0386169063f3fef3a3906132799086908890600401613942565b5f604051808303815f87803b158015613290575f80fd5b505af11580156132a2573d5f803e3d5ffd5b505050505b6001600160a01b0382161561331e5760405163e62d29df60e01b81526001600160a01b0383811660048301526024820186905261ffff8316604483015286169063e62d29df906064015f604051808303815f87803b158015613307575f80fd5b505af1158015613319573d5f803e3d5ffd5b505050505b506001600160a01b039384165f90815260076020526040902080546001600160a01b03191691909416179092555050565b6001600160a01b038083165f9081526003602090815260408083208584529091529020541680612cf25760405162461bcd60e51b815260206004820152601b60248201527f4c6f636b7374616b65456e67696e652f696e76616c69642d75726e0000000000604482015260640161077c565b5f816001600160a01b0316846001600160a01b031614806113d357506001600160a01b038084165f90815260056020908152604080832093861683529290522054600114949350505050565b60408051603780825260608281019093526020820181803683375050733d602d80600a3d3981f3363d3d373d3d3d363d7360601b6020830152507f000000000000000000000000000000000000000000000000000000000000000060601b60348201526e5af43d82803e903d91602b57fd5bf360881b6048820152919050565b5f825f0361349b575f61322f565b8160018403816134ad576134ad61396e565b046001019392505050565b80356001600160a01b03811681146134ce575f80fd5b919050565b5f805f606084860312156134e5575f80fd5b6134ee846134b8565b925060208401359150613503604085016134b8565b90509250925092565b5f805f806080858703121561351f575f80fd5b613528856134b8565b93506020850135925061353d604086016134b8565b9396929550929360600135925050565b5f6020828403121561355d575f80fd5b61322f826134b8565b5f805f60608486031215613578575f80fd5b613581846134b8565b95602085013595506040909401359392505050565b634e487b7160e01b5f52602160045260245ffd5b60208101600383106135ca57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f805f80608085870312156135e3575f80fd5b6135ec856134b8565b935060208501359250613601604086016134b8565b915061360f606086016134b8565b905092959194509250565b5f806040838503121561362b575f80fd5b613634836134b8565b946020939093013593505050565b5f60208284031215613652575f80fd5b5035919050565b803561ffff811681146134ce575f80fd5b5f805f806080858703121561367d575f80fd5b613686856134b8565b9350602085013592506040850135915061360f60608601613659565b5f80602083850312156136b3575f80fd5b823567ffffffffffffffff808211156136ca575f80fd5b818501915085601f8301126136dd575f80fd5b8135818111156136eb575f80fd5b8660208260051b85010111156136ff575f80fd5b60209290920196919550909350505050565b5f602080830181845280855180835260408601915060408160051b87010192508387015f805b8381101561379357888603603f1901855282518051808852835b8181101561376c578281018a01518982018b01528901613751565b508781018901849052601f01601f1916909601870195509386019391860191600101613737565b509398975050505050505050565b5f80604083850312156137b2575f80fd5b6137bb836134b8565b91506137c9602084016134b8565b90509250929050565b5f805f80608085870312156137e5575f80fd5b6137ee856134b8565b935060208501359250613803604086016134b8565b915061360f60608601613659565b5f805f60608486031215613823575f80fd5b61382c846134b8565b925061383a602085016134b8565b9150604084013590509250925092565b5f806040838503121561385b575f80fd5b823591506137c9602084016134b8565b5f6020828403121561387b575f80fd5b5051919050565b5f8060408385031215613893575f80fd5b505080516020909101519092909150565b5f805f805f60a086880312156138b8575f80fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417612cf257612cf26138e0565b6020808252601e908201527f4c6f636b7374616b65456e67696e652f6e6f742d617574686f72697a65640000604082015260600190565b6001600160a01b03929092168252602082015260400190565b81810381811115612cf257612cf26138e0565b634e487b7160e01b5f52601260045260245ffd5b5f8261399c57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526018908201527f4c6f636b7374616b65456e67696e652f6f766572666c6f770000000000000000604082015260600190565b9586526001600160a01b039485166020870152928416604086015292166060840152608083019190915260a082015260c00190565b5f81613a1b57613a1b6138e0565b505f190190565b80820180821115612cf257612cf26138e0565b5f60018201613a4657613a466138e0565b5060010190565b5f600160ff1b8201613a6157613a616138e0565b505f0390565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112613aa4575f80fd5b83018035915067ffffffffffffffff821115613abe575f80fd5b602001915036819003821315613ad2575f80fd5b9250929050565b818382375f910190815291905056fea26469706673582212204985d945cdd439127a92536aa61e6397332d44fce3f1a7fee51221d8b8a52b9964736f6c6343000815003360e060405234801561000f575f80fd5b5060405161088738038061088783398101604081905261002e91610064565b336080526001600160a01b0391821660c0521660a052610095565b80516001600160a01b038116811461005f575f80fd5b919050565b5f8060408385031215610075575f80fd5b61007e83610049565b915061008c60208401610049565b90509250929050565b60805160a05160c0516107996100ee5f395f81816083015261039001525f818160c70152818161040901526104da01525f818161010f0152818161016d0152818161033e0152818161047701526105a001526107995ff3fe608060405234801561000f575f80fd5b506004361061007a575f3560e01c8063c9d4623f11610058578063c9d4623f1461010a578063e1c7392a14610131578063e62d29df1461013b578063f3fef3a31461014e575f80fd5b806336569e771461007e5780636a6e9edf146100c25780636b091695146100e9575b5f80fd5b6100a57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a57f000000000000000000000000000000000000000000000000000000000000000081565b6100fc6100f736600461064d565b610161565b6040519081526020016100b9565b6100a57f000000000000000000000000000000000000000000000000000000000000000081565b610139610333565b005b610139610149366004610684565b61046c565b61013961015c3660046106c9565b610595565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101b35760405162461bcd60e51b81526004016101aa906106f3565b60405180910390fd5b826001600160a01b0316633d18b9126040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156101eb575f80fd5b505af11580156101fd573d5f803e3d5ffd5b505050505f836001600160a01b031663d1af0c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561023e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610262919061072a565b6040516370a0823160e01b81523060048201529091506001600160a01b038216906370a0823190602401602060405180830381865afa1580156102a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102cb919061074c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529193509082169063a9059cbb906044015f604051808303815f87803b158015610316575f80fd5b505af1158015610328573d5f803e3d5ffd5b505050505092915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037b5760405162461bcd60e51b81526004016101aa906106f3565b6040516328ec8bf160e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a3b22fc4906024015f604051808303815f87803b1580156103d9575f80fd5b505af11580156103eb573d5f803e3d5ffd5b505060405163095ea7b360e01b81523360048201525f1960248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063095ea7b391506044015f604051808303815f87803b158015610454575f80fd5b505af1158015610466573d5f803e3d5ffd5b50505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104b45760405162461bcd60e51b81526004016101aa906106f3565b60405163095ea7b360e01b81526001600160a01b038481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044015f604051808303815f87803b15801561051b575f80fd5b505af115801561052d573d5f803e3d5ffd5b50506040516342ea02c160e01b81526004810185905261ffff841660248201526001600160a01b03861692506342ea02c191506044015f604051808303815f87803b15801561057a575f80fd5b505af115801561058c573d5f803e3d5ffd5b50505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105dd5760405162461bcd60e51b81526004016101aa906106f3565b604051632e1a7d4d60e01b8152600481018290526001600160a01b03831690632e1a7d4d906024015f604051808303815f87803b15801561061c575f80fd5b505af115801561062e573d5f803e3d5ffd5b505050505050565b6001600160a01b038116811461064a575f80fd5b50565b5f806040838503121561065e575f80fd5b823561066981610636565b9150602083013561067981610636565b809150509250929050565b5f805f60608486031215610696575f80fd5b83356106a181610636565b925060208401359150604084013561ffff811681146106be575f80fd5b809150509250925092565b5f80604083850312156106da575f80fd5b82356106e581610636565b946020939093013593505050565b60208082526017908201527f4c6f636b7374616b6555726e2f6e6f742d656e67696e65000000000000000000604082015260600190565b5f6020828403121561073a575f80fd5b815161074581610636565b9392505050565b5f6020828403121561075c575f80fd5b505191905056fea2646970667358221220f6faae402162a76ea9ec3da4620c6175e90af57556afc3a45d6883032be9fd8e64736f6c634300081500330000000000000000000000004cf3daefa2683cd18df00f7aff5169c00a9eccd50000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb4c534556322d534b592d4100000000000000000000000000000000000000000000000000000000000000000056072c95faa701256059aa122697b133aded9279000000000000000000000000f9a9cfd3229e985b91f99bc866d42938044ffa1c0000000000000000000000000000000000000000000000000000000000000000