0 txs
24 calls
constructor
constructor()
functions
CONDITION_IMPLEMENTATION
viewfunction CONDITION_IMPLEMENTATION() view returns (address)
implementation
viewfunction implementation() view returns (address)
prepareUninstallation
purefunction prepareUninstallation(address _dao, tuple _payload) pure returns (tuple[] permissions)
prepareUpdate
purefunction prepareUpdate(address _dao, uint16 _fromBuild, tuple _payload) pure returns (bytes, tuple)
protocolVersion
purefunction protocolVersion() pure returns (uint8[3])
supportsInterface
viewfunction supportsInterface(bytes4 _interfaceId) view returns (bool)
prepareInstallation
nonpayablefunction prepareInstallation(address _dao, bytes _installationParams) returns (address spp, tuple preparedSetupData)
events
No events.
errors
InvalidUpdatePath
error InvalidUpdatePath(uint16 fromBuild, uint16 thisBuild)
creation bytecode
0x60c060405234801561000f575f5ffd5b5060405161001c906100cc565b604051809103905ff080158015610035573d5f5f3e3d5ffd5b506001600160a01b0316608052604080515f8082526020820190925281610089565b604080516080810182525f8082526020808301829052928201819052606082015282525f199092019101816100575790505b50604051610096906100d9565b6100a19291906100e6565b604051809103905ff0801580156100ba573d5f5f3e3d5ffd5b506001600160a01b031660a05261016f565b6159fc80611e9e83390190565b611d388061789a83390190565b6001600160a01b03831681526040602080830182905283519183018290525f91908401906060840190835b8181101561016357835160ff815116845260ff602082015116602085015260018060f01b0360408201511660408501526060810151606085015250608083019250602084019350600181019050610111565b50909695505050505050565b60805160a051611d0261019c5f395f818160fa015261038c01525f818160bd01526103160152611d025ff3fe608060405234801561000f575f5ffd5b506004361061007a575f3560e01c80637da5dd7c116100585780637da5dd7c146100f55780639cb0a1241461011c578063a8a9c29e1461013c578063f10832f11461015d575f5ffd5b806301ffc9a71461007e5780632ae9c600146100a65780635c60da1b146100bb575b5f5ffd5b61009161008c366004610c85565b61017e565b60405190151581526020015b60405180910390f35b6100ae6101ce565b60405161009d9190610cac565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b03909116815260200161009d565b6100dd7f000000000000000000000000000000000000000000000000000000000000000081565b61012f61012a366004610d0b565b6101f7565b60405161009d9190610dcc565b61014f61014a366004610e25565b61024a565b60405161009d929190610f39565b61017061016b366004610f66565b610290565b60405161009d929190610fe2565b5f6001600160e01b0319821663099718b560e41b14806101ad57506001600160e01b03198216621574e360e91b145b806101c857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101d6610c5a565b506040805160608101825260018152600460208201525f9181019190915290565b60606102438361020a6020850185611005565b610217602086018661101e565b5f8181106102275761022761106a565b905060200201602081019061023c9190611005565b6001610428565b9392505050565b6060610269604051806040016040528060608152602001606081525090565b60405163098990c560e11b81525f6004820152600160248201526044015b60405180910390fd5b5f6102ae604051806040016040528060608152602001606081525090565b5f8080806102be8789018961146e565b935093509350935061033c895f8587856040516024016102e2959493929190611591565b60408051601f198184030181529190526020810180516001600160e01b031663bfde57c360e01b1790526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169061099d565b95505f8983604051602401610352929190611751565b60408051601f198184030181529190526020810180516001600160e01b0316631d0f8ff560e31b17905290505f6103b26001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016836109d8565b90506103c08b89835f610428565b60208801526040805160018082528183019092529081602001602082028036833750505080885280518291905f906103fa576103fa61106a565b60200260200101906001600160a01b031690816001600160a01b031681525050505050505050935093915050565b6040805160098082526101408201909252606091816020015b6040805160a0810182525f808252602080830182905292820181905260608201819052608082015282525f199092019101816104415790505090506040518060a0016040528083600281111561049957610499610d55565b8152602001856001600160a01b03168152602001866001600160a01b031681526020015f6001600160a01b031681526020017f6f36f8bf0398781285f5a40c489dbf3268ce3e205aba87f21e49e6805391b5a1815250815f815181106105015761050161106a565b60200260200101819052506040518060a0016040528083600281111561052957610529610d55565b81526001600160a01b03808716602083015260408201525f60608201527ff281525e53675515a6ba7cc7bea8a81e649b3608423ee2d73be1752cea8878896080909101528151829060019081106105825761058261106a565b60200260200101819052506040518060a001604052808360028111156105aa576105aa610d55565b8152602001856001600160a01b03168152602001866001600160a01b031681526020015f6001600160a01b031681526020017f06d294bc8cbad2e393408b20dd019a772661f60b8d633e56761157cb1ec85f8c815250816002815181106106135761061361106a565b60200260200101819052506040518060a0016040528083600281111561063b5761063b610d55565b8152602001856001600160a01b03168152602001866001600160a01b031681526020015f6001600160a01b031681526020017f568cc693d84eb1901f8bcecba154cbdef23ca3cf67efc0a0b698528a06c660f7815250816003815181106106a4576106a461106a565b60200260200101819052506040518060a001604052808360028111156106cc576106cc610d55565b8152602001856001600160a01b03168152602001866001600160a01b031681526020015f6001600160a01b031681526020017f4707e94b25cfce1a7c363508fbb838c35864388ad77284b248282b9746982b9b815250816004815181106107355761073561106a565b60209081029190910101526040805160a08101909152805f84600281111561075f5761075f610d55565b1461076a578361076d565b60025b600281111561077e5761077e610d55565b8152602001856001600160a01b031681526020016001600160a01b0380168152602001846001600160a01b031681526020017f8c433a4cd6b51969eca37f974940894297b9fcf4b282a213fea5cd8f85289c90815250816005815181106107e7576107e761106a565b60200260200101819052506040518060a0016040528083600281111561080f5761080f610d55565b81526001600160a01b03808716602083015260408201525f60608201527fb014ce248804cab6a144581acce1eeb70ce5d54f08433b989d73bb0ccee3d3f96080909101528151829060069081106108685761086861106a565b60200260200101819052506040518060a0016040528083600281111561089057610890610d55565b8152602001866001600160a01b03168152602001856001600160a01b031681526020015f6001600160a01b031681526020017fbf04b4486c9663d805744005c3da000eda93de6e3308a4a7a812eb565327b78d815250816007815181106108f9576108f961106a565b60200260200101819052506040518060a0016040528083600281111561092157610921610d55565b8152602001846001600160a01b03168152602001866001600160a01b031681526020015f6001600160a01b031681526020017fd3d98e95f3486fc234d80c098cf0d2a0a3fb187833d7e9cc930f8c4f8335a0e78152508160088151811061098a5761098a61106a565b6020026020010181905250949350505050565b5f82826040516109ac90610c78565b6109b79291906117da565b604051809103905ff0801580156109d0573d5f5f3e3d5ffd5b509392505050565b5f6109eb836001600160a01b0316610a0f565b8251909150156101c857610a086001600160a01b03821683610aa6565b5092915050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c175f526e5af43d82803e903d91602b57fd5bf38260781b17602052603760095ff090506001600160a01b038116610aa15760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610287565b919050565b606061024383835f6040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250606082471015610b455760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610287565b5f5f866001600160a01b03168587604051610b6091906117fd565b5f6040518083038185875af1925050503d805f8114610b9a576040519150601f19603f3d011682016040523d82523d5f602084013e610b9f565b606091505b5091509150610bb087838387610bbd565b925050505b949350505050565b60608315610c2b5782515f03610c24576001600160a01b0385163b610c245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610287565b5081610bb5565b610bb58383815115610c405781518083602001fd5b8060405162461bcd60e51b81526004016102879190611813565b60405180606001604052806003906020820280368337509192915050565b6104a78061182683390190565b5f60208284031215610c95575f5ffd5b81356001600160e01b031981168114610243575f5ffd5b6060810181835f5b6003811015610cd657815160ff16835260209283019290910190600101610cb4565b50505092915050565b80356001600160a01b0381168114610aa1575f5ffd5b5f60608284031215610d05575f5ffd5b50919050565b5f5f60408385031215610d1c575f5ffd5b610d2583610cdf565b915060208301356001600160401b03811115610d3f575f5ffd5b610d4b85828601610cf5565b9150509250929050565b634e487b7160e01b5f52602160045260245ffd5b60038110610d7957610d79610d55565b50565b5f8151610d8881610d69565b8352506020818101516001600160a01b0390811691840191909152604080830151821690840152606080830151909116908301526080908101519082015260a00190565b602080825282518282018190525f918401906040840190835b81811015610e0957610df8838551610d7c565b602094909401939250600101610de5565b509095945050505050565b803561ffff81168114610aa1575f5ffd5b5f5f5f60608486031215610e37575f5ffd5b610e4084610cdf565b9250610e4e60208501610e14565b915060408401356001600160401b03811115610e68575f5ffd5b610e7486828701610cf5565b9150509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b8051604080845281519084018190525f9160200190829060608601905b80831015610ef45783516001600160a01b031682526020938401936001939093019290910190610ec9565b506020858101518783038883015280518084529082019450910191505f905b80821015610e0957610f26838551610d7c565b9250602084019350600182019150610f13565b604081525f610f4b6040830185610e7e565b8281036020840152610f5d8185610eac565b95945050505050565b5f5f5f60408486031215610f78575f5ffd5b610f8184610cdf565b925060208401356001600160401b03811115610f9b575f5ffd5b8401601f81018613610fab575f5ffd5b80356001600160401b03811115610fc0575f5ffd5b866020828401011115610fd1575f5ffd5b939660209190910195509293505050565b6001600160a01b03831681526040602082018190525f90610bb590830184610eac565b5f60208284031215611015575f5ffd5b61024382610cdf565b5f5f8335601e19843603018112611033575f5ffd5b8301803591506001600160401b0382111561104c575f5ffd5b6020019150600581901b3603821315611063575f5ffd5b9250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156110b4576110b461107e565b60405290565b60405161010081016001600160401b03811182821017156110b4576110b461107e565b604051601f8201601f191681016001600160401b03811182821017156111055761110561107e565b604052919050565b5f6001600160401b038211156111255761112561107e565b5060051b60200190565b80358015158114610aa1575f5ffd5b5f82601f83011261114d575f5ffd5b813561116061115b8261110d565b6110dd565b8082825260208201915060208360071b860101925085831115611181575f5ffd5b602085015b838110156111f8576080818803121561119d575f5ffd5b6111a5611092565b6111ae82610cdf565b81526111bc6020830161112f565b60208201526111cd6040830161112f565b60408201526060820135600381106111e3575f5ffd5b60608201528352602090920191608001611186565b5095945050505050565b80356001600160401b0381168114610aa1575f5ffd5b5f82601f830112611227575f5ffd5b813561123561115b8261110d565b8082825260208201915060208360051b860101925085831115611256575f5ffd5b602085015b838110156111f85780356001600160401b03811115611278575f5ffd5b8601610100818903601f1901121561128e575f5ffd5b6112966110ba565b60208201356001600160401b038111156112ae575f5ffd5b6112bd8a60208386010161113e565b8252506112cc60408301611202565b60208201526112dd60608301611202565b60408201526112ee60808301611202565b60608201526112ff60a08301610e14565b608082015261131060c08301610e14565b60a082015261132160e0830161112f565b60c0820152611333610100830161112f565b60e08201528452506020928301920161125b565b803560ff81168114610aa1575f5ffd5b5f82601f830112611366575f5ffd5b813561137461115b8261110d565b8082825260208201915060208360071b860101925085831115611395575f5ffd5b602085015b838110156111f857608081880312156113b1575f5ffd5b6113b9611092565b6113c282611347565b81526113d060208301611347565b602082015260408201356001600160f01b03811681146113ee575f5ffd5b604082015260608281013590820152835260209092019160800161139a565b5f6040828403121561141d575f5ffd5b604080519081016001600160401b038111828210171561143f5761143f61107e565b60405290508061144e83610cdf565b8152602083013560028110611461575f5ffd5b6020919091015292915050565b5f5f5f5f60a08587031215611481575f5ffd5b84356001600160401b03811115611496575f5ffd5b8501601f810187136114a6575f5ffd5b80356001600160401b038111156114bf576114bf61107e565b6114d2601f8201601f19166020016110dd565b8181528860208385010111156114e6575f5ffd5b816020840160208301375f6020838301015280965050505060208501356001600160401b03811115611516575f5ffd5b61152287828801611218565b93505060408501356001600160401b0381111561153d575f5ffd5b61154987828801611357565b925050611559866060870161140d565b905092959194509250565b80516001600160a01b0316825260208101516002811061158657611586610d55565b806020840152505050565b6001600160a01b038681168252851660208083019190915260c06040830181905285519083018190525f9160e0600583901b8501810192908501918801845b828110156117215786850360df190184528151805161010080885281519088018190526020909101905f906101208901905b8083101561165c57835180516001600160a01b031683526020808201511515908401526040808201511515908401526060015161163e81610d69565b80606084015250608082019150602084019350600183019250611602565b506020840151925061167960208a01846001600160401b03169052565b6040840151925061169560408a01846001600160401b03169052565b606084015192506116b160608a01846001600160401b03169052565b608084015192506116c860808a018461ffff169052565b60a084015192506116df60a08a018461ffff169052565b60c084015192506116f460c08a018415159052565b60e0840151935061170960e08a018515159052565b975050506020948501949290920191506001016115d0565b5050505082810360608401526117378186610e7e565b9150506117476080830184611564565b9695505050505050565b6001600160a01b03831681526040602080830182905283519183018290525f91908401906060840190835b818110156117ce57835160ff815116845260ff602082015116602085015260018060f01b036040820151166040850152606081015160608501525060808301925060208401935060018101905061177c565b50909695505050505050565b6001600160a01b03831681526040602082018190525f90610bb590830184610e7e565b5f82518060208501845e5f920191825250919050565b602081525f6102436020830184610e7e56fe60806040526040516104a73803806104a7833981016040819052610022916102b0565b61002d82825f610034565b50506103ca565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104806027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b031685604051610199919061037f565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b81526004016101339190610395565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156102c1575f5ffd5b82516001600160a01b03811681146102d7575f5ffd5b60208401519092506001600160401b038111156102f2575f5ffd5b8301601f81018513610302575f5ffd5b80516001600160401b0381111561031b5761031b61029c565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103495761034961029c565b604052818152828201602001871015610360575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b60aa806103d65f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212203de39e586f62c7e649a136588eacb8b1b2a8c34048b7dabeb69793b8af136efc64736f6c634300081c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b97423cd7dee08a4470ce18ed2b67af6214e7f1c0112c63736b5005206f7d23064736f6c634300081c003360a060405230608052348015610013575f5ffd5b5061001c610021565b6100dd565b5f54610100900460ff161561008c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146100db575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516158eb6101115f395f818161107d015281816110bd015281816114eb0152818161152b01526116b101526158eb5ff3fe608060405260043610610254575f3560e01c8063761f8acb1161013f578063ce1b815f116100b3578063ea65ab8211610078578063ea65ab8214610783578063ee57e36f146107a2578063ef8cccb0146107c1578063fd8d2d36146107ed578063fdbd7eb31461080c578063fe0d94c11461082b575f5ffd5b8063ce1b815f146106e5578063da35c66414610709578063da7422281461071d578063dd63c06f1461073c578063e306bee714610750575f5ffd5b8063bfde57c311610104578063bfde57c314610608578063c218c13214610627578063c7f758a814610646578063c98425ee14610672578063c9c4bfca14610693578063cc63604a146106c6575f5ffd5b8063761f8acb146105645780637a5b4f59146105835780637e3f1353146105975780638cb75059146105b6578063bb225da2146105e9575f5ffd5b80633e4f49e6116101d65780634f1ef2861161019b5780634f1ef286146104b657806352303962146104c957806352d1902d146104e8578063572b6c05146104fc5780635c23bfb7146105315780635c60da1b14610550575f5ffd5b80633e4f49e6146103eb57806340e58ee5146104175780634162169f1461043657806341de6830146104675780634e3ed5e914610482575f5ffd5b80632ae9c6001161021c5780632ae9c6001461035957806330196ab91461037a57806335ade049146103995780633659cfe6146103b85780633d3f4b1b146103d7575f5ffd5b806301ffc9a7146102585780630b47808d1461028c5780631abf3f11146102ad5780631c622dea146102d05780631f3cb5b41461032d575b5f5ffd5b348015610263575f5ffd5b50610277610272366004614074565b61084a565b60405190151581526020015b60405180910390f35b348015610297575f5ffd5b506102ab6102a6366004614118565b61085a565b005b3480156102b8575f5ffd5b506101645460405161ffff9091168152602001610283565b3480156102db575f5ffd5b5061031f6102ea3660046141b4565b5f92835261015f6020908152604080852061ffff9490941685529281528284206001600160a01b039290921684525290205490565b604051908152602001610283565b348015610338575f5ffd5b5061034c6103473660046141f1565b610a9a565b6040516102839190614252565b348015610364575f5ffd5b5061036d610b53565b6040516102839190614264565b348015610385575f5ffd5b506102ab610394366004614297565b610b7c565b3480156103a4575f5ffd5b5061031f6103b336600461460d565b610bef565b3480156103c3575f5ffd5b506102ab6103d23660046146c6565b611073565b3480156103e2575f5ffd5b5061034c61113a565b3480156103f6575f5ffd5b5061040a6104053660046146e1565b61115a565b604051610283919061470c565b348015610422575f5ffd5b506102ab6104313660046146e1565b611344565b348015610441575f5ffd5b5060fb546001600160a01b03165b6040516001600160a01b039091168152602001610283565b348015610472575f5ffd5b505f5b6040516102839190614736565b34801561048d575f5ffd5b506104a161049c366004614743565b611487565b60408051928352602083019190915201610283565b6102ab6104c436600461476d565b6114e1565b3480156104d4575f5ffd5b506102ab6104e33660046147df565b61159a565b3480156104f3575f5ffd5b5061031f6116a5565b348015610507575f5ffd5b506102776105163660046146c6565b610164546201000090046001600160a01b0390811691161490565b34801561053c575f5ffd5b5061027761054b3660046146e1565b611756565b34801561055b575f5ffd5b5061044f61177a565b34801561056f575f5ffd5b5061047561057e3660046141b4565b611788565b34801561058e575f5ffd5b5061034c6117c0565b3480156105a2575f5ffd5b506102776105b13660046146c6565b611874565b3480156105c1575f5ffd5b5061031f7f568cc693d84eb1901f8bcecba154cbdef23ca3cf67efc0a0b698528a06c660f781565b3480156105f4575f5ffd5b506102ab610603366004614841565b61191f565b348015610613575f5ffd5b506102ab61062236600461485b565b611971565b348015610632575f5ffd5b506102776106413660046146e1565b611afe565b348015610651575f5ffd5b506106656106603660046146e1565b611b61565b60405161028391906149af565b34801561067d575f5ffd5b50610686611db4565b6040516102839190614a70565b34801561069e575f5ffd5b5061031f7f821b6e3a557148015a918c89e5d092e878a69854a2d1a410635f771bd5a8a3f581565b3480156106d1575f5ffd5b506102776106e03660046146e1565b611e1b565b3480156106f0575f5ffd5b50610164546201000090046001600160a01b031661044f565b348015610714575f5ffd5b5061031f611e5d565b348015610728575f5ffd5b506102ab6107373660046146c6565b611e77565b348015610747575f5ffd5b50610686611ebb565b34801561075b575f5ffd5b5061031f7f4707e94b25cfce1a7c363508fbb838c35864388ad77284b248282b9746982b9b81565b34801561078e575f5ffd5b5061031f61079d366004614a7e565b611f69565b3480156107ad575f5ffd5b506102ab6107bc366004614b1d565b611f8f565b3480156107cc575f5ffd5b506107e06107db3660046146e1565b612008565b6040516102839190614b4f565b3480156107f8575f5ffd5b506102776108073660046146c6565b6121e7565b348015610817575f5ffd5b506102ab6108263660046146e1565b612233565b348015610836575f5ffd5b506102ab6108453660046146e1565b6122d6565b5f61085482612343565b92915050565b60fb547fa73a22e0fc9b71a5463a75c9711d02d08dae26e85aa1033f4416b719a0239107906108a3906001600160a01b0316306108956123b7565b8461089e612417565b612472565b5f86815261016260205260408120906108cf886108bf8361252c565b6108c9600361252c565b1761254e565b825461ffff600160d01b820481165f908152610163602052604081208054949550600160c01b909304909116929091908390811061090f5761090f614cd2565b5f918252602090912060029091020180549091501580159061094357506003836004811115610940576109406146f8565b14155b15610996578983600481111561095b5761095b6146f8565b610965600361252c565b604051632c2eee6560e11b8152600481019390935260ff909116602483015260448201526064015b60405180910390fd5b6001810154600160e81b900460ff166109cf57604051638b32333560e01b8152600481018b905261ffff8316602482015260440161098d565b6109dc600285015f613fbe565b5f5b86811015610a3957846002018888838181106109fc576109fc614cd2565b9050602002810190610a0e9190614ce6565b81546001810183555f9283526020909220909160030201610a2f8282614d81565b50506001016109de565b50610a426123b7565b6001600160a01b03168261ffff168b7fc1d7dc1770290440bd536be5eca85bc1e54960c21ef0f9a838033941a7392d8d8c8c8c8c604051610a869493929190614edb565b60405180910390a450505050505050505050565b5f8381526101616020908152604080832061ffff8616845282528083208484529091529020805460609190610ace90614d04565b80601f0160208091040260200160405190810160405280929190818152602001828054610afa90614d04565b8015610b455780601f10610b1c57610100808354040283529160200191610b45565b820191905f5260205f20905b815481529060010190602001808311610b2857829003601f168201915b505050505090509392505050565b610b5b613fdc565b506040805160608101825260018152600460208201525f9181019190915290565b60fb547f6f36f8bf0398781285f5a40c489dbf3268ce3e205aba87f21e49e6805391b5a190610bb7906001600160a01b0316306108956123b7565b5f829003610bd85760405163d345a56b60e01b815260040160405180910390fd5b610bea610be58385615088565b6125ab565b505050565b60fb545f907f8c433a4cd6b51969eca37f974940894297b9fcf4b282a213fea5cd8f85289c9090610c2c906001600160a01b0316306108956123b7565b5f610c3b6101645461ffff1690565b90508061ffff165f03610c615760405163d345a56b60e01b815260040160405180910390fd5b5f610c6a6123b7565b9050610ccf888a83604051602001610c849392919061519f565b60408051601f198184030181528282528051602091820120468483015243848401523060608501526080808501919091528251808503909101815260a0909301909152815191012090565b5f81815261016260205260409020805491955090600160801b90046001600160401b031615610d14576040516312dba68f60e01b81526004810186905260240161098d565b80546001600160801b0319166001600160801b038916178155610d35611ebb565b80516003830180546001600160a01b031981166001600160a01b0390931692831782556020840151919283916001600160a81b03191617600160a01b836001811115610d8357610d836146f8565b021790555050506001810180546001600160a01b0319166001600160a01b038416179055805461ffff60d01b1916600160d01b61ffff8516021781556001600160401b0387165f03610dd757429650610e15565b426001600160401b0316876001600160401b03161015610e1557604051636f6a0b6560e11b81526001600160401b038816600482015260240161098d565b805467ffffffffffffffff60801b1916600160801b6001600160401b038916021781555f5b8951811015610ec857816002018a8281518110610e5957610e59614cd2565b6020908102919091018101518254600180820185555f94855293839020825160039092020180546001600160a01b0319166001600160a01b03909216919091178155918101519282019290925560408201516002820190610eba90826151dc565b505050806001019050610e3a565b50855161ffff1015610eed57604051638d48ed3360e01b815260040160405180910390fd5b60015b8651811015610f95575f5b878281518110610f0d57610f0d614cd2565b602002602001015151811015610f8c57878281518110610f2f57610f2f614cd2565b60200260200101518181518110610f4857610f48614cd2565b6020908102919091018101515f8981526101618352604080822061ffff8716835284528082208583529093529190912090610f8390826151dc565b50600101610efb565b50600101610ef0565b50805486516110069187915f91600160801b90046001600160401b031690610fe757604080515f8082526020820190925290610fe1565b6060815260200190600190039081610fcc5790505b50612b2a565b895f81518110610ff957610ff9614cd2565b6020026020010151612b2a565b816001600160a01b0316857fa6c1f8f4276dc3f243459e13b557c84e8f4e90b2e09070bad5f6909cee687c92835f0160109054906101000a90046001600160401b03165f8e8e8e60405161105e959493929190615296565b60405180910390a35050505095945050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036110bb5760405162461bcd60e51b815260040161098d906152f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166110ed612f76565b6001600160a01b0316146111135760405162461bcd60e51b815260040161098d90615340565b61111c81612f91565b604080515f8082526020820190925261113791839190612fcc565b50565b60606040518060600160405280602c815260200161588a602c9139905090565b5f818152610162602052604081208054600160e01b900460ff16156111825750600292915050565b8054600160e81b900460ff161561119c5750600192915050565b8054600160801b90046001600160401b03166111ce57604051630853c2a360e41b81526004810184905260240161098d565b805461ffff600160d01b820481165f90815261016360205260408120805491939092600160c01b9091041690811061120857611208614cd2565b5f9182526020909120600290910201600181015483549192504291611240916001600160401b0390811691600160801b9004166153a0565b6001600160401b03161015611259575060049392505050565b600181015482544291611287916001600160401b03600160401b909204821691600160801b909104166153a0565b6001600160401b0316111561129f57505f9392505050565b6001810154600160d01b900461ffff16156112f6576001810154825442916112de916001600160401b03600160801b92839004811692909104166153a0565b6001600160401b031611156112f657505f9392505050565b815460018201545f9161132791879161ffff600160c01b91829004811692918204811691600160d01b900416613136565b9050801561133a57506003949350505050565b505f949350505050565b60fb547fbdfef02014e2b7a6c80226083f80d72d22fcf656d917f92d242c5b61e108bcd39061137f906001600160a01b0316306108956123b7565b5f828152610162602052604090206113a48361139b600361252c565b6108c95f61252c565b50805461ffff600160d01b820481165f908152610163602052604081208054600160c01b90940490921692909190839081106113e2576113e2614cd2565b905f5260205f209060020201905080600101601c9054906101000a900460ff1661142c57604051638b9b77af60e01b81526004810186905261ffff8316602482015260440161098d565b825460ff60e81b1916600160e81b1783556114456123b7565b6001600160a01b03168261ffff16867f578c7050405154b6a8167f305908011ff85e3231eff1fbce2bbe95500b92f20360405160405180910390a45050505050565b5f828152610162602052604081208054829190600160801b90046001600160401b03166114ca57604051630853c2a360e41b81526004810186905260240161098d565b6114d48585613184565b92509250505b9250929050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115295760405162461bcd60e51b815260040161098d906152f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661155b612f76565b6001600160a01b0316146115815760405162461bcd60e51b815260040161098d90615340565b61158a82612f91565b61159682826001612fcc565b5050565b5f848152610162602052604090208054600160801b90046001600160401b03166115da57604051630853c2a360e41b81526004810186905260240161098d565b805461ffff600160c01b909104811690851681101561161a5760405163d0a90c2d60e01b815261ffff80831660048301528616602482015260440161098d565b5f6116236123b7565b9050611631878787846133e8565b8361163e5750505061169f565b5f6116488461347a565b61165a5761165582611874565b611663565b611663826121e7565b905080801561168b575060036116788961115a565b6004811115611689576116896146f8565b145b1561169a5761169a88836134b7565b505050505b50505050565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117445760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161098d565b505f5160206158435f395f51905f5290565b5f60036117628361115a565b6004811115611773576117736146f8565b1492915050565b5f611783612f76565b905090565b5f9283526101606020908152604080852061ffff9490941685529281528284206001600160a01b039290921684525290205460ff1690565b7f47ff9796f72d439c6e5c30a24b9fad985a00c85a9f2258074c400a94f8746b0080546060919081906117f290614d04565b80601f016020809104026020016040519081016040528092919081815260200182805461181e90614d04565b80156118695780601f1061184057610100808354040283529160200191611869565b820191905f5260205f20905b81548152906001019060200180831161184c57829003601f168201915b505050505091505090565b5f61188760fb546001600160a01b031690565b6001600160a01b031663fdef910630847fb014ce248804cab6a144581acce1eeb70ce5d54f08433b989d73bb0ccee3d3f96118c0612417565b6040518663ffffffff1660e01b81526004016118e09594939291906153bf565b602060405180830381865afa1580156118fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085491906153f2565b60fb547f568cc693d84eb1901f8bcecba154cbdef23ca3cf67efc0a0b698528a06c660f79061195a906001600160a01b0316306108956123b7565b61159661196c3684900384018461540d565b61372d565b5f54610100900460ff161580801561198f57505f54600160ff909116105b806119a85750303b1580156119a857505f5460ff166001145b611a0b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161098d565b5f805460ff191660011790558015611a2c575f805461ff0019166101001790555b611a358861381a565b8415611a4857611a48610be58688615088565b6001600160a01b03871615611a6057611a6087613849565b611a9e84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061389d92505050565b611ab061196c3684900384018461540d565b801561169a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050565b5f8181526101626020526040812081611b168461115a565b9050611b218261347a565b8015611b5957506003816004811115611b3c57611b3c6146f8565b1480611b5957506002816004811115611b5757611b576146f8565b145b949350505050565b611bbb60408051610120810182525f808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e084015283518085019094528184528301529061010082015290565b5f8281526101626020908152604080832081516101208101835281546001600160801b03811682526001600160401b03600160801b8204168286015261ffff600160c01b8204811683860152600160d01b820416606083015260ff600160e01b8204811615156080840152600160e81b90910416151560a082015260018201546001600160a01b031660c08201526002820180548451818702810187019095528085529195929460e0870194939192919084015b82821015611d50575f848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191611cc190614d04565b80601f0160208091040260200160405190810160405280929190818152602001828054611ced90614d04565b8015611d385780601f10611d0f57610100808354040283529160200191611d38565b820191905f5260205f20905b815481529060010190602001808311611d1b57829003601f168201915b50505050508152505081526020019060010190611c6f565b50505090825250604080518082019091526003830180546001600160a01b0381168352602093840193830190600160a01b900460ff166001811115611d9757611d976146f8565b6001811115611da857611da86146f8565b90525090525092915050565b604080518082019091525f80825260208201526040805180820190915261012d80546001600160a01b03811683526020830190600160a01b900460ff166001811115611e0257611e026146f8565b6001811115611e1357611e136146f8565b905250919050565b5f818152610162602052604081206003611e348461115a565b6004811115611e4557611e456146f8565b148015611e565750611e568161347a565b9392505050565b5f604051631bebc11560e01b815260040160405180910390fd5b60fb547f06d294bc8cbad2e393408b20dd019a772661f60b8d633e56761157cb1ec85f8c90611eb2906001600160a01b0316306108956123b7565b61159682613849565b604080518082019091525f80825260208201526040805180820190915261012d80546001600160a01b03811683525f9291906020830190600160a01b900460ff166001811115611f0d57611f0d6146f8565b6001811115611f1e57611f1e6146f8565b90525080519091506001600160a01b0316611f64576040518060400160405280611f5060fb546001600160a01b031690565b6001600160a01b031681526020015f905290505b919050565b5f611f8586865f87868060200190518101906103b3919061552c565b9695505050505050565b60fb547f4707e94b25cfce1a7c363508fbb838c35864388ad77284b248282b9746982b9b90611fca906001600160a01b0316306108956123b7565b610bea83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061389d92505050565b60606120186101645461ffff1690565b61ffff16821180612027575081155b156120455760405163d345a56b60e01b815260040160405180910390fd5b5f8281526101636020908152604080832080548251818502810185019093528083529193909284015b828210156121dc578382905f5260205f209060020201604051806101000160405290815f8201805480602002602001604051908101604052809291908181526020015f905b8282101561214a575f8481526020908190206040805160808101825291850180546001600160a01b038116845260ff600160a01b82048116151595850195909552600160a81b8104851615159284019290925291926060840191600160b01b9004166002811115612126576121266146f8565b6002811115612137576121376146f8565b81525050815260200190600101906120b3565b505050908252506001918201546001600160401b03808216602080850191909152600160401b830482166040850152600160801b8304909116606084015261ffff600160c01b830481166080850152600160d01b83041660a084015260ff600160e01b83048116151560c0850152600160e81b909204909116151560e09092019190915291835292909201910161206e565b505050509050919050565b5f6121fa60fb546001600160a01b031690565b6001600160a01b031663fdef910630847ff281525e53675515a6ba7cc7bea8a81e649b3608423ee2d73be1752cea8878896118c0612417565b5f818152610162602052604090206122548261224f600361252c565b61254e565b505f61225e6123b7565b90505f61226a8361347a565b156122a057612278826121e7565b90508061229b57604051639fefd0f160e01b81526004810185905260240161098d565b6122cc565b6122a982611874565b9050806122cc57604051637171293960e11b81526004810185905260240161098d565b61169f84836134b7565b60fb547ff281525e53675515a6ba7cc7bea8a81e649b3608423ee2d73be1752cea88788990612311906001600160a01b0316306108956123b7565b61231a82611e1b565b61233a57604051639fefd0f160e01b81526004810183905260240161098d565b611596826138f9565b5f6001600160e01b0319821663041de68360e41b148061237257506001600160e01b03198216621574e360e91b145b8061238d57506001600160e01b031982166352d1902d60e01b145b806123a857506001600160e01b0319821663afc5b82360e01b145b80610854575061085482613a89565b610164545f9036906201000090046001600160a01b0316331480156123dd575060148110155b1561240c575f366123ef6014846155db565b6123fa9282906155ee565b61240391615615565b60601c91505090565b3391505090565b5090565b6101645436905f9082906201000090046001600160a01b03163314801561243f575060148110155b15612468575f80366124526014856155db565b9261245f939291906155ee565b92509250509091565b505f923692509050565b604051637ef7c88360e11b81526001600160a01b0387169063fdef9106906124a690889088908890889088906004016153bf565b602060405180830381865afa1580156124c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e591906153f2565b61252457604051630cb6f8ed60e21b81526001600160a01b0380881660048301528087166024830152851660448201526064810184905260840161098d565b505050505050565b5f81600481111561253f5761253f6146f8565b600160ff919091161b92915050565b5f5f6125598461115a565b90505f836125668361252c565b1603611e56578381600481111561257f5761257f6146f8565b604051632c2eee6560e11b8152600481019290925260ff1660248201526044810184905260640161098d565b61016480545f916101639183919082906125c89061ffff16615662565b91906101000a81548161ffff021916908361ffff160217905561ffff1681526020019081526020015f2090505f5f90505b8251811015612aee5781546001810183555f8381526020812085516002909302019185908490811061262d5761262d614cd2565b60200260200101515f015190505f85848151811061264d5761264d614cd2565b60200260200101516020015190505f86858151811061266e5761266e614cd2565b60200260200101516040015190505f87868151811061268f5761268f614cd2565b60200260200101516060015190505f8887815181106126b0576126b0614cd2565b60200260200101516080015190505f8988815181106126d1576126d1614cd2565b602002602001015160a001519050846001600160401b0316846001600160401b03161015806127125750846001600160401b0316836001600160401b031610155b1561273057604051631f7b222b60e31b815260040160405180910390fd5b85518261ffff161180612747575085518161ffff16115b1561276557604051635813b74160e01b815260040160405180910390fd5b5f5b86518110156129ed575f61277c826001615682565b90505b875181101561282c5787818151811061279a5761279a614cd2565b60200260200101515f01516001600160a01b03168883815181106127c0576127c0614cd2565b60200260200101515f01516001600160a01b03160361282457898883815181106127ec576127ec614cd2565b60200260200101515f0151604051635169d4b960e11b815260040161098d9291909182526001600160a01b0316602082015260400190565b60010161277f565b5086818151811061283f5761283f614cd2565b6020026020010151602001511580156128945750612892633f4644d160e21b88838151811061287057612870614cd2565b60200260200101515f01516001600160a01b0316613aad90919063ffffffff16565b155b156128b257604051632c7ca6d760e01b815260040160405180910390fd5b5f8782815181106128c5576128c5614cd2565b60200260200101516060015160028111156128e2576128e26146f8565b0361292a578681815181106128f9576128f9614cd2565b60209081029190910101515160405163385ccd4360e11b81526001600160a01b03909116600482015260240161098d565b875f0187828151811061293f5761293f614cd2565b60209081029190910181015182546001810184555f938452928290208151930180549282015160408301511515600160a81b0260ff60a81b19911515600160a01b026001600160a81b03199095166001600160a01b03909616959095179390931792831684178155606082015191939092839160ff60b01b191661ffff60a81b1990911617600160b01b8360028111156129db576129db6146f8565b02179055505050806001019050612767565b5060018701805461ffff838116600160d01b0261ffff60d01b19918616600160c01b0261ffff60c01b196001600160401b03898116600160801b029190911669ffffffffffffffffffff60801b198b8316600160401b026001600160801b0319909716928d1692909217959095171693909317929092171617905589518a9089908110612a7c57612a7c614cd2565b602002602001015160c0015187600101601c6101000a81548160ff021916908315150217905550898881518110612ab557612ab5614cd2565b602002602001015160e0015187600101601d6101000a81548160ff021916908315150217905550505050505050508060010190506125f9565b507f435d9e99466e98c43eea30339b592c89335a9cd4304822838938882df53308fe82604051612b1e9190614b4f565b60405180910390a15050565b5f84815261016260209081526040808320805461ffff600160d01b90910481168552610163909352908320805491929091908716908110612b6d57612b6d614cd2565b5f91825260208220600290910201925090505b8154811015612524575f825f018281548110612b9e57612b9e614cd2565b5f9182526020909120018054909150600160a01b900460ff1615612bc25750612f6e565b6040805160018082528183019092525f91816020015b60408051606080820183525f808352602083015291810191909152815260200190600190039081612bd85790505060408051606081018252308082525f6020830152855483519495509193928401929091635230396291612c55918e918e9160ff600160b01b8204811692600160a81b9092041690602401615695565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050815250815f81518110612c9757612c97614cd2565b60200260200101819052505f5a8354604080513060208201529081018c905261ffff8b1660608201529192505f9182916001600160a01b03169060800160408051808303601f19018152919052600189015486908c90612d0790600160801b90046001600160401b0316826153a0565b8a8d5111612d2257604080515f815260208101909152612d3d565b8c8b81518110612d3457612d34614cd2565b60200260200101515b604051602401612d519594939291906156c6565b60408051601f198184030181529181526020820180516001600160e01b0316637532d5c160e11b17905251612d869190615728565b5f604051808303815f865af19150503d805f8114612dbf576040519150601f19603f3d011682016040523d82523d5f602084013e612dc4565b606091505b50915091505f5a905082612dfd57612ddd60408561573e565b811015612dfd576040516307099c5360e21b815260040160405180910390fd5b828015612e0b575081516020145b15612eef575f82806020019051810190612e25919061575d565b90508061015f5f8f81526020019081526020015f205f8e61ffff1661ffff1681526020019081526020015f205f895f015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f2081905550865f015f9054906101000a90046001600160a01b03166001600160a01b03168c61ffff168e7fdc04d6b37a483003e6bdc5660d9d9bb22854fffba622b62f658a398efc88ca4484604051612ee191815260200190565b60405180910390a450612f67565b5f8c815261015f6020908152604080832061ffff8f168085529083528184208a546001600160a01b0390811686529352928190205f19905588549051911691908e907fe03b818c74400ef42fafb3f6cfa61d8a38950d4f403eee88ec39bc0cafe54d2490612f5e908790614252565b60405180910390a45b5050505050505b600101612b80565b5f5160206158435f395f51905f52546001600160a01b031690565b60fb547f821b6e3a557148015a918c89e5d092e878a69854a2d1a410635f771bd5a8a3f590611596906001600160a01b0316306108956123b7565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612fff57610bea83613ac8565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613059575060408051601f3d908101601f191682019092526130569181019061575d565b60015b6130bc5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161098d565b5f5160206158435f395f51905f52811461312a5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161098d565b50610bea838383613b63565b5f5f5f6131438787613184565b915091505f841180156131565750838110155b15613165575f92505050611b59565b84821015613177575f92505050611b59565b5060019695505050505050565b5f82815261016260209081526040808320805461ffff600160d01b90910481168552610163909352908320805484938492919087169081106131c8576131c8614cd2565b5f918252602082206002909102018054909250905b818110156133dd575f835f0182815481106131fa576131fa614cd2565b5f91825260208083209190910180548c845261015f8352604080852061ffff8e16865284528085206001600160a01b039092168086529190935291832054909350919061324a908c908c90611788565b90505f81600281111561325f5761325f6146f8565b146132a1576001816002811115613278576132786146f8565b1461328e5761328688615774565b97508761329b565b61329789615774565b9850885b506133cf565b5f1982141580156132bb57508254600160a01b900460ff16155b156133cf578254604051602481018490525f9182916001600160a01b039091169060440160408051601f198184030181529181526020820180516001600160e01b031663610c609960e11b179052516133149190615728565b5f60405180830381855afa9150503d805f811461334c576040519150601f19603f3d011682016040523d82523d5f602084013e613351565b606091505b5091509150818015613364575080516020145b156133cc575f8180602001905181019061337e91906153f2565b905080156133ca5760018654600160b01b900460ff1660028111156133a5576133a56146f8565b146133bb576133b38b615774565b9a508a6133c8565b6133c48c615774565b9b508b5b505b505b50505b5050508060010190506131dd565b505050509250929050565b5f8481526101606020908152604080832061ffff8716845282528083206001600160a01b03851684529091529020805483919060ff19166001836002811115613433576134336146f8565b0217905550806001600160a01b03168361ffff16857fbfaa970a350cc4e6c21888b5c4b888e2750f035ce824e40cfc7dc5f07e3936c560405160405180910390a450505050565b8054600160d01b900461ffff165f90815261016360205260408120546134a2906001906155db565b9154600160c01b900461ffff16909114919050565b5f828152610162602090815260408083208054600160d01b900461ffff16845261016390925290912080546134ee906001906155db565b8254600160c01b900461ffff1610156137245781545f90839060189061351e90600160c01b900461ffff16615662565b825461ffff8083166101009490940a8481029102199091161790925584546001600160401b034216600160801b0267ffffffffffffffff60801b1990911617855583549192505f91849190811061357757613577614cd2565b5f9182526020909120600290910201546001600160401b0381111561359e5761359e6142d5565b6040519080825280602002602001820160405280156135d157816020015b60608152602001906001900390816135bc5790505b5090505f5b838361ffff16815481106135ec576135ec614cd2565b5f9182526020909120600290910201548110156136d4575f8781526101616020908152604080832061ffff8716845282528083208484529091529020805461363390614d04565b80601f016020809104026020016040519081016040528092919081815260200182805461365f90614d04565b80156136aa5780601f10613681576101008083540402835291602001916136aa565b820191905f5260205f20905b81548152906001019060200180831161368d57829003601f168201915b50505050508282815181106136c1576136c1614cd2565b60209081029190910101526001016135d6565b506136e186834284612b2a565b846001600160a01b03168261ffff16877fa21690322ce39bce6ee8416aefbe1e66cf767ff37e9db8f708a3c6cbbf17db9b60405160405180910390a4505061169f565b61169f846138f9565b8051613749906001600160a01b0316632a4f53ad60e11b613aad565b801561376a5750600181602001516001811115613768576137686146f8565b145b1561378a578060405163266d0fb960e01b815260040161098d9190614a70565b805161012d80546001600160a01b039092166001600160a01b031983168117825560208401518493909183916001600160a81b03191617600160a01b8360018111156137d8576137d86146f8565b02179055509050507f88e879ae0d71faf3aa708f2978daccb99b95243615dc104835b8c5a21c884ae68160405161380f9190614a70565b60405180910390a150565b5f54610100900460ff166138405760405162461bcd60e51b815260040161098d9061578c565b61113781613b87565b610164805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517fa4388ecc389b1390354ae0c65a856c0d7dd4fb648419f5d3ac0b99e38f46fd11905f90a250565b7f47ff9796f72d439c6e5c30a24b9fad985a00c85a9f2258074c400a94f8746b00806138c983826151dc565b507fbb39ebb37e60fb5d606ffdb749d2336e56b88e6c88c4bd6513b308f643186eed82604051612b1e9190614252565b5f81815261016260209081526040808320805460ff60e01b1916600160e01b17815560038101546002820180548451818702810187019095528085529295613a59956001600160a01b03909316948894909390919084015b82821015613a32575f848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916139a390614d04565b80601f01602080910402602001604051908101604052809291908181526020018280546139cf90614d04565b8015613a1a5780601f106139f157610100808354040283529160200191613a1a565b820191905f5260205f20905b8154815290600101906020018083116139fd57829003601f168201915b50505050508152505081526020019060010190613951565b5050865460038801546001600160801b039091169250600160a01b900460ff169050613bcf565b505060405182907f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f905f90a25050565b5f6001600160e01b03198216634a06561b60e11b1480610854575061085482613d56565b5f613ab783613da5565b8015611e565750611e568383613dd7565b6001600160a01b0381163b613b355760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161098d565b5f5160206158435f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b613b6c83613e5d565b5f82511180613b785750805b15610bea5761169f8383613e9c565b5f54610100900460ff16613bad5760405162461bcd60e51b815260040161098d9061578c565b60fb80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f6001836001811115613be657613be66146f8565b03613cd4575f6060886001600160a01b0316888888604051602401613c0d939291906157d7565b60408051601f198184030181529181526020820180516001600160e01b03166331c6fcc960e21b17905251613c429190615728565b5f60405180830381855af49150503d805f8114613c7a576040519150601f19603f3d011682016040523d82523d5f602084013e613c7f565b606091505b50909250905081613cb357805115613c9a5780518082602001fd5b6040516318cecad560e01b815260040160405180910390fd5b80806020019051810190613cc791906157ff565b9094509250613d4c915050565b6040516331c6fcc960e21b81526001600160a01b0388169063c71bf32490613d04908990899089906004016157d7565b5f604051808303815f875af1158015613d1f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613d4691908101906157ff565b90925090505b9550959350505050565b5f6001600160e01b0319821663368d719960e21b1480613d8657506001600160e01b03198216633f4644d160e21b145b8061085457506301ffc9a760e01b6001600160e01b0319831614610854565b5f613db7826301ffc9a760e01b613dd7565b80156108545750613dd0826001600160e01b0319613dd7565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b17815282515f9392849283928392918391908a617530fa92503d91505f519050828015613e47575060208210155b8015613e5257505f81115b979650505050505050565b613e6681613ac8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060611e5683836040518060600160405280602781526020016158636027913960605f5f856001600160a01b031685604051613ed89190615728565b5f60405180830381855af49150503d805f8114613f10576040519150601f19603f3d011682016040523d82523d5f602084013e613f15565b606091505b5091509150611f858683838760608315613f8f5782515f03613f88576001600160a01b0385163b613f885760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161098d565b5081611b59565b611b598383815115613fa45781518083602001fd5b8060405162461bcd60e51b815260040161098d9190614252565b5080545f8255600302905f5260205f20908101906111379190613ffa565b60405180606001604052806003906020820280368337509192915050565b808211156124135780546001600160a01b03191681555f60018201819055614025600283018261402e565b50600301613ffa565b50805461403a90614d04565b5f825580601f10614049575050565b601f0160209004905f5260205f209081019061113791905b80821115612413575f8155600101614061565b5f60208284031215614084575f5ffd5b81356001600160e01b031981168114611e56575f5ffd5b5f5f83601f8401126140ab575f5ffd5b5081356001600160401b038111156140c1575f5ffd5b6020830191508360208285010111156114da575f5ffd5b5f5f83601f8401126140e8575f5ffd5b5081356001600160401b038111156140fe575f5ffd5b6020830191508360208260051b85010111156114da575f5ffd5b5f5f5f5f5f6060868803121561412c575f5ffd5b8535945060208601356001600160401b03811115614148575f5ffd5b6141548882890161409b565b90955093505060408601356001600160401b03811115614172575f5ffd5b61417e888289016140d8565b969995985093965092949392505050565b803561ffff81168114611f64575f5ffd5b6001600160a01b0381168114611137575f5ffd5b5f5f5f606084860312156141c6575f5ffd5b833592506141d66020850161418f565b915060408401356141e6816141a0565b809150509250925092565b5f5f5f60608486031215614203575f5ffd5b833592506142136020850161418f565b929592945050506040919091013590565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611e566020830184614224565b6060810181835f5b600381101561428e57815160ff1683526020928301929091019060010161426c565b50505092915050565b5f5f602083850312156142a8575f5ffd5b82356001600160401b038111156142bd575f5ffd5b6142c9858286016140d8565b90969095509350505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561430b5761430b6142d5565b60405290565b604051608081016001600160401b038111828210171561430b5761430b6142d5565b60405161010081016001600160401b038111828210171561430b5761430b6142d5565b604051601f8201601f191681016001600160401b038111828210171561437e5761437e6142d5565b604052919050565b5f6001600160401b0382111561439e5761439e6142d5565b50601f01601f191660200190565b5f82601f8301126143bb575f5ffd5b81356143ce6143c982614386565b614356565b8181528460208386010111156143e2575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f6001600160401b03821115614416576144166142d5565b5060051b60200190565b5f82601f83011261442f575f5ffd5b813561443d6143c9826143fe565b8082825260208201915060208360051b86010192508583111561445e575f5ffd5b602085015b838110156144f35780356001600160401b03811115614480575f5ffd5b86016060818903601f19011215614495575f5ffd5b61449d6142e9565b60208201356144ab816141a0565b81526040820135602082015260608201356001600160401b038111156144cf575f5ffd5b6144de8a6020838601016143ac565b60408301525084525060209283019201614463565b5095945050505050565b80356001600160401b0381168114611f64575f5ffd5b5f82601f830112614522575f5ffd5b81356145306143c9826143fe565b8082825260208201915060208360051b860101925085831115614551575f5ffd5b602085015b838110156144f35780356001600160401b03811115614573575f5ffd5b8601603f81018813614583575f5ffd5b60208101356145946143c9826143fe565b808282526020820191506020808460051b8601010192508a8311156145b7575f5ffd5b604084015b838110156145f75780356001600160401b038111156145d9575f5ffd5b6145e88d6040888401016143ac565b845250602092830192016145bc565b5086525050602093840193919091019050614556565b5f5f5f5f5f60a08688031215614621575f5ffd5b85356001600160401b03811115614636575f5ffd5b614642888289016143ac565b95505060208601356001600160401b0381111561465d575f5ffd5b61466988828901614420565b94505060408601356001600160801b0381168114614685575f5ffd5b9250614693606087016144fd565b915060808601356001600160401b038111156146ad575f5ffd5b6146b988828901614513565b9150509295509295909350565b5f602082840312156146d6575f5ffd5b8135611e56816141a0565b5f602082840312156146f1575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b6020810160058310614720576147206146f8565b91905290565b60038110611137576111376146f8565b6020810161472083614726565b5f5f60408385031215614754575f5ffd5b823591506147646020840161418f565b90509250929050565b5f5f6040838503121561477e575f5ffd5b8235614789816141a0565b915060208301356001600160401b038111156147a3575f5ffd5b6147af858286016143ac565b9150509250929050565b803560038110611f64575f5ffd5b8015158114611137575f5ffd5b8035611f64816147c7565b5f5f5f5f608085870312156147f2575f5ffd5b843593506148026020860161418f565b9250614810604086016147b9565b91506060850135614820816147c7565b939692955090935050565b5f6040828403121561483b575f5ffd5b50919050565b5f60408284031215614851575f5ffd5b611e56838361482b565b5f5f5f5f5f5f5f60c0888a031215614871575f5ffd5b873561487c816141a0565b9650602088013561488c816141a0565b955060408801356001600160401b038111156148a6575f5ffd5b6148b28a828b016140d8565b90965094505060608801356001600160401b038111156148d0575f5ffd5b6148dc8a828b0161409b565b90945092506148f090508960808a0161482b565b905092959891949750929550565b5f82825180855260208501945060208160051b830101602085015f5b8381101561497657848303601f19018852815180516001600160a01b031684526020808201519085015260409081015160609185018290529061495f90850182614224565b6020998a019990945092909201915060010161491a565b50909695505050505050565b80516001600160a01b031682526020810151600281106149a4576149a46146f8565b806020840152505050565b602081526149c96020820183516001600160801b03169052565b5f60208301516149e460408401826001600160401b03169052565b50604083015161ffff8116606084015250606083015161ffff8116608084015250608083015180151560a08401525060a083015180151560c08401525060c08301516001600160a01b03811660e08401525060e0830151610140610100840152614a526101608401826148fe565b9050610100840151614a68610120850182614982565b509392505050565b604081016108548284614982565b5f5f5f5f5f60a08688031215614a92575f5ffd5b85356001600160401b03811115614aa7575f5ffd5b614ab3888289016143ac565b95505060208601356001600160401b03811115614ace575f5ffd5b614ada88828901614420565b945050614ae9604087016144fd565b9250614af7606087016144fd565b915060808601356001600160401b03811115614b11575f5ffd5b6146b9888289016143ac565b5f5f60208385031215614b2e575f5ffd5b82356001600160401b03811115614b43575f5ffd5b6142c98582860161409b565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614cc657868503603f190184528151805161010080885281519088018190526020909101905f906101208901905b80831015614c0157835180516001600160a01b0316835260208082015115159084015260408082015115159084015260600151614be381614726565b80606084015250608082019150602084019350600183019250614ba7565b5060208401519250614c1e60208a01846001600160401b03169052565b60408401519250614c3a60408a01846001600160401b03169052565b60608401519250614c5660608a01846001600160401b03169052565b60808401519250614c6d60808a018461ffff169052565b60a08401519250614c8460a08a018461ffff169052565b60c08401519250614c9960c08a018415159052565b60e08401519350614cae60e08a018515159052565b97505050602094850194929092019150600101614b75565b50929695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614cfa575f5ffd5b9190910192915050565b600181811c90821680614d1857607f821691505b60208210810361483b57634e487b7160e01b5f52602260045260245ffd5b601f821115610bea57805f5260205f20601f840160051c81016020851015614d5b5750805b601f840160051c820191505b81811015614d7a575f8155600101614d67565b5050505050565b8135614d8c816141a0565b81546001600160a01b0319166001600160a01b039190911617815560208201356001820155604082013536839003601e19018112614dc8575f5ffd5b820180356001600160401b03811115614ddf575f5ffd5b602082019150803603821315614df3575f5ffd5b600283016001600160401b03821115614e0e57614e0e6142d5565b614e2282614e1c8354614d04565b83614d36565b5f601f831160018114614e53575f8415614e3c5750848201355b5f19600386901b1c1916600185901b178355614eaa565b5f83815260208120601f198616915b82811015614e825787850135825560209485019460019092019101614e62565b5085821015614e9e575f1960f88760031b161c19848801351681555b505060018460011b0183555b50505050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f614eee604083018688614eb3565b82810360208401528084825260208201905060208560051b830101865f605e19893603015b88821015614fc257858403601f190185528235818112614f31575f5ffd5b8a018035614f3e816141a0565b6001600160a01b0316855260208181013590860152604081013536829003601e19018112614f6a575f5ffd5b016020810190356001600160401b03811115614f84575f5ffd5b803603821315614f92575f5ffd5b60606040870152614fa7606087018284614eb3565b95505050602083019250602085019450600182019150614f13565b50919a9950505050505050505050565b5f82601f830112614fe1575f5ffd5b8135614fef6143c9826143fe565b8082825260208201915060208360071b860101925085831115615010575f5ffd5b602085015b838110156144f3576080818803121561502c575f5ffd5b615034614311565b813561503f816141a0565b8152602082013561504f816147c7565b60208201526040820135615062816147c7565b6040820152615073606083016147b9565b60608201528352602090920191608001615015565b5f6150956143c9846143fe565b8381526020810190600585901b8401368111156150b0575f5ffd5b845b818110156151945780356001600160401b038111156150cf575f5ffd5b86016101003682900312156150e2575f5ffd5b6150ea614333565b81356001600160401b038111156150ff575f5ffd5b61510b36828501614fd2565b82525061511a602083016144fd565b602082015261512b604083016144fd565b604082015261513c606083016144fd565b606082015261514d6080830161418f565b608082015261515e60a0830161418f565b60a082015261516f60c083016147d4565b60c082015261518060e083016147d4565b60e0820152855250602093840193016150b2565b509095945050505050565b606081525f6151b160608301866148fe565b82810360208401526151c38186614224565b91505060018060a01b0383166040830152949350505050565b81516001600160401b038111156151f5576151f56142d5565b615209816152038454614d04565b84614d36565b6020601f82116001811461523b575f83156152245750848201515b5f19600385901b1c1916600184901b178455614d7a565b5f84815260208120601f198516915b8281101561526a578785015182556020948501946001909201910161524a565b508482101561528757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160401b03861681526001600160401b038516602082015260a060408201525f6152c660a0830186614224565b82810360608401526152d881866148fe565b9150506001600160801b03831660808301529695505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156108545761085461538c565b6001600160a01b03868116825285166020820152604081018490526080606082018190525f90613e529083018486614eb3565b5f60208284031215615402575f5ffd5b8151611e56816147c7565b5f604082840312801561541e575f5ffd5b50604080519081016001600160401b0381118282101715615441576154416142d5565b604052823561544f816141a0565b8152602083013560028110615462575f5ffd5b60208201529392505050565b5f82601f83011261547d575f5ffd5b815161548b6143c9826143fe565b8082825260208201915060208360051b8601019250858311156154ac575f5ffd5b602085015b838110156144f35780516001600160401b038111156154ce575f5ffd5b8601603f810188136154de575f5ffd5b60208101516154ef6143c982614386565b8181526040838301018a1015615503575f5ffd5b8160408401602083015e5f602083830101528086525050506020830192506020810190506154b1565b5f6020828403121561553c575f5ffd5b81516001600160401b03811115615551575f5ffd5b8201601f81018413615561575f5ffd5b805161556f6143c9826143fe565b8082825260208201915060208360051b850101925086831115615590575f5ffd5b602084015b838110156155d05780516001600160401b038111156155b2575f5ffd5b6155c18960208389010161546e565b84525060209283019201615595565b509695505050505050565b818103818111156108545761085461538c565b5f5f858511156155fc575f5ffd5b83861115615608575f5ffd5b5050820193919092039150565b80356bffffffffffffffffffffffff19811690601484101561565b576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b5f61ffff821661ffff81036156795761567961538c565b60010192915050565b808201808211156108545761085461538c565b84815261ffff84166020820152608081016156af84614726565b836040830152821515606083015295945050505050565b60a081525f6156d860a0830188614224565b82810360208401526156ea81886148fe565b90506001600160401b03861660408401526001600160401b0385166060840152828103608084015261571c8185614224565b98975050505050505050565b5f82518060208501845e5f920191825250919050565b5f8261575857634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561576d575f5ffd5b5051919050565b5f600182016157855761578561538c565b5060010190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b838152606060208201525f6157ef60608301856148fe565b9050826040830152949350505050565b5f5f60408385031215615810575f5ffd5b82516001600160401b03811115615825575f5ffd5b6158318582860161546e565b60209490940151939593945050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65642862797465735b5d5b5d20737562426f64696573437573746f6d50726f706f73616c506172616d7341424929a264697066735822122067c99d791bb703e12ffd5ee5b31499f0418acd43a02c7ec97cfbc4fdb1b3417c64736f6c634300081c0033608060405234801561000f575f5ffd5b50604051611d38380380611d3883398101604081905261002e9161058d565b610038828261003f565b50506107c5565b5f54610100900460ff161580801561005d57505f54600160ff909116105b806100765750303b15801561007657505f5460ff166001145b6100de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156100ff575f805461ff0019166101001790555b61010883610162565b81511561011857610118826101ee565b801561015d575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b5f54610100900460ff166101cc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016100d5565b603380546001600160a01b0319166001600160a01b0392909216919091179055565b5f5b81518110156102a3575f82828151811061020c5761020c6106b3565b6020026020010151905060ca60ff16815f015160ff160361029a57604080516020810182525f808252915161024b9160019160029183916024016106f5565b60408051601f198184030181529181526020820180516001600160e01b039081166302675fdd60e41b1790915290840151919250610296906001600160a01b0383169084906102b016565b5050505b506001016101f0565b506102ad816102dc565b50565b60606102d58383604051806060016040528060258152602001611d13602591396103b6565b9392505050565b6102e760975f6104d5565b5f5b815181101561037b576097828281518110610306576103066106b3565b6020908102919091018101518254600181810185555f94855293839020825160029092020180549383015160408401516001600160f01b0316620100000261ffff60ff9283166101000261ffff19909716929094169190911794909417919091169290921782556060015190820155016102e9565b507f6517634f0cf2fee5bec4e10d9a05e7a61f4e8610d8db2b83bc84416b3dc0f666816040516103ab9190610727565b60405180910390a150565b60605f5f856001600160a01b0316856040516103d2919061079d565b5f60405180830381855afa9150503d805f811461040a576040519150601f19603f3d011682016040523d82523d5f602084013e61040f565b606091505b5090925090506104218683838761042b565b9695505050505050565b606083156104995782515f03610492576001600160a01b0385163b6104925760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016100d5565b50816104a3565b6104a383836104ab565b949350505050565b8151156104bb5781518083602001fd5b8060405162461bcd60e51b81526004016100d591906107b3565b5080545f8255600202905f5260205f20908101906102ad91905b80821115610508575f80825560018201556002016104ef565b5090565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156105425761054261050c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156105705761057061050c565b604052919050565b805160ff81168114610588575f5ffd5b919050565b5f5f6040838503121561059e575f5ffd5b82516001600160a01b03811681146105b4575f5ffd5b60208401519092506001600160401b038111156105cf575f5ffd5b8301601f810185136105df575f5ffd5b80516001600160401b038111156105f8576105f861050c565b61060760208260051b01610548565b8082825260208201915060208360071b850101925087831115610628575f5ffd5b6020840193505b828410156106a55760808489031215610646575f5ffd5b61064e610520565b61065785610578565b815261066560208601610578565b602082015260408501516001600160f01b0381168114610683575f5ffd5b604082015260608581015190820152825260809093019260209091019061062f565b809450505050509250929050565b634e487b7160e01b5f52603260045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90610421908301846106c7565b602080825282518282018190525f918401906040840190835b8181101561079257835160ff815116845260ff602082015116602085015260018060f01b0360408201511660408501526060810151606085015250608083019250602084019350600181019050610740565b509095945050505050565b5f82518060208501845e5f920191825250919050565b602081525f6102d560208301846106c7565b611541806107d25f395ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80634162169f1161006e5780634162169f1461016957806345e2984a146101845780638306b5f114610199578063b580939c146101ae578063d09e5361146101e3578063e87c7fa8146101f6575f5ffd5b806301ffc9a7146100aa5780631498b514146100d257806323e8cefc146101165780632675fdd0146101415780632ae9c60014610154575b5f5ffd5b6100bd6100b8366004610f64565b610209565b60405190151581526020015b60405180910390f35b6100ef6100e0366004610f8b565b90602082901c90604083901c90565b6040805163ffffffff948516815292841660208401529216918101919091526060016100c9565b610129610124366004610fa2565b610233565b6040516001600160f01b0390911681526020016100c9565b6100bd61014f366004610fe6565b61025b565b61015c6102b6565b6040516100c9919061107b565b6033546040516001600160a01b0390911681526020016100c9565b61018c6102df565b6040516100c991906110ae565b6101ac6101a7366004611124565b61036f565b005b6101d57fd3d98e95f3486fc234d80c098cf0d2a0a3fb187833d7e9cc930f8c4f8335a0e781565b6040519081526020016100c9565b6101296101f1366004611195565b61040a565b6101ac61020436600461128e565b610419565b5f6001600160e01b031982166328fcde5960e21b148061022d575061022d8261053b565b92915050565b5f604082901b610247602085901b86611357565b6102519190611357565b90505b9392505050565b5f6102646102df565b515f03610273575060016102ad565b6102aa5f878787836040519080825280602002602001820160405280156102a4578160200160208202803683370190505b50610589565b90505b95945050505050565b6102be610f0f565b506040805160608101825260018152600460208201525f9181019190915290565b60606097805480602002602001604051908101604052809291908181526020015f905b82821015610366575f8481526020908190206040805160808101825260028602909201805460ff8082168552610100820416848601526201000090046001600160f01b03169183019190915260019081015460608301529083529092019101610302565b50505050905090565b6033547fd3d98e95f3486fc234d80c098cf0d2a0a3fb187833d7e9cc930f8c4f8335a0e7906103ab906001600160a01b03163033845f36610778565b6104058383808060200260200160405190810160405280939291908181526020015f905b828210156103fb576103ec60808302860136819003810190611376565b815260200190600101906103cf565b5050505050610832565b505050565b5f610254602083901b84611357565b5f54610100900460ff161580801561043757505f54600160ff909116105b806104505750303b15801561045057505f5460ff166001145b6104b85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156104d9575f805461ff0019166101001790555b6104e2836108ec565b8151156104f2576104f282610832565b8015610405575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f6001600160e01b031982166302675fdd60e41b148061056a57506001600160e01b03198216621574e360e91b145b8061022d57506301ffc9a760e01b6001600160e01b031983161461022d565b5f5f60978763ffffffff16815481106105a4576105a4611390565b5f918252602091829020604080516080810182526002909302909101805460ff8082168086526101008304909116958501959095526001600160f01b03620100009091041691830191909152600101546060820152915060ca1901610618576106108187878787610978565b9150506102ad565b604081015181515f916001600160f01b03169060ff1660c9190161067c57606083015160408401515f9061065c908b8b85156106545785610656565b8b5b8b610b5b565b905080610669575f61066c565b60015b60ff16935060019250505061070b565b825160ff1660c719016106915743915061070b565b825160ff1660c819016106a65742915061070b565b825160ff1660cb19016106c85782604001516001600160f01b0316915061070b565b8451835160ff16106106df575f93505050506102ad565b84835f015160ff16815181106106f7576106f7611390565b60200260200101516001600160f01b031691505b6007836020015160ff16600c811115610726576107266113a4565b600c811115610737576107376113a4565b036107485750151591506102ad9050565b61076b8282856020015160ff16600c811115610766576107666113a4565b610c19565b9998505050505050505050565b604051637ef7c88360e11b81526001600160a01b0387169063fdef9106906107ac90889088908890889088906004016113b8565b602060405180830381865afa1580156107c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107eb9190611408565b61082a57604051630cb6f8ed60e21b81526001600160a01b038088166004830152808716602483015285166044820152606481018490526084016104af565b505050505050565b5f5b81518110156108df575f82828151811061085057610850611390565b6020026020010151905060ca60ff16815f015160ff16036108d657604080516020810182525f808252915161088f916001916002918391602401611455565b60408051601f198184030181529181526020820180516001600160e01b03166302675fdd60e41b1790528301519091506108d26001600160a01b03821683610cf2565b5050505b50600101610834565b506108e981610d17565b50565b5f54610100900460ff166109565760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104af565b603380546001600160a01b0319166001600160a01b0392909216919091179055565b5f600c866020015160ff16600c811115610994576109946113a4565b600c8111156109a5576109a56113a4565b03610a07575f5f5f6109cd89604001516001600160f01b031690602082901c90604083901c90565b9250925092505f6109e184898b8a8a610589565b90506109fc816109f157826109f3565b835b8a8a8a8a610589565b9450505050506102ad565b5f5f610a2988604001516001600160f01b031690602082901c90604083901c90565b5090925090505f610a3d8389898989610589565b90506008896020015160ff16600c811115610a5a57610a5a6113a4565b600c811115610a6b57610a6b6113a4565b03610a7b571592506102ad915050565b808015610ab15750600a896020015160ff16600c811115610a9e57610a9e6113a4565b600c811115610aaf57610aaf6113a4565b145b15610ac257600193505050506102ad565b80158015610af957506009896020015160ff16600c811115610ae657610ae66113a4565b600c811115610af757610af76113a4565b145b15610b09575f93505050506102ad565b5f610b17838a8a8a8a610589565b9050600b8a6020015160ff16600c811115610b3457610b346113a4565b600c811115610b4557610b456113a4565b0361076b571515901515141592506102ad915050565b5f5f632675fdd060e01b86868686604051602001610b799190611487565b60408051601f1981840301815290829052610b9994939291602401611455565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217825280519092505f91829182918b5afa905080610be9575f925050506102ad565b3d60208114610bfd575f93505050506102ad565b5f604051825f823e80515f9091529a9950505050505050505050565b5f600182600c811115610c2e57610c2e6113a4565b03610c3c5750828214610254565b600282600c811115610c5057610c506113a4565b03610c5f575082821415610254565b600382600c811115610c7357610c736113a4565b03610c815750818311610254565b600482600c811115610c9557610c956113a4565b03610ca35750818310610254565b600582600c811115610cb757610cb76113a4565b03610cc6575081831015610254565b600682600c811115610cda57610cda6113a4565b03610ce9575081831115610254565b505f9392505050565b606061025483836040518060600160405280602581526020016114e760259139610df1565b610d2260975f610f2d565b5f5b8151811015610db6576097828281518110610d4157610d41611390565b6020908102919091018101518254600181810185555f94855293839020825160029092020180549383015160408401516001600160f01b0316620100000261ffff60ff9283166101000261ffff1990971692909416919091179490941791909116929092178255606001519082015501610d24565b507f6517634f0cf2fee5bec4e10d9a05e7a61f4e8610d8db2b83bc84416b3dc0f66681604051610de691906110ae565b60405180910390a150565b60605f5f856001600160a01b031685604051610e0d91906114be565b5f60405180830381855afa9150503d805f8114610e45576040519150601f19603f3d011682016040523d82523d5f602084013e610e4a565b606091505b5091509150610e5b86838387610e65565b9695505050505050565b60608315610ed35782515f03610ecc576001600160a01b0385163b610ecc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104af565b5081610edd565b610edd8383610ee5565b949350505050565b815115610ef55781518083602001fd5b8060405162461bcd60e51b81526004016104af91906114d4565b60405180606001604052806003906020820280368337509192915050565b5080545f8255600202905f5260205f20908101906108e991905b80821115610f60575f8082556001820155600201610f47565b5090565b5f60208284031215610f74575f5ffd5b81356001600160e01b031981168114610254575f5ffd5b5f60208284031215610f9b575f5ffd5b5035919050565b5f5f5f60608486031215610fb4575f5ffd5b505081359360208301359350604090920135919050565b80356001600160a01b0381168114610fe1575f5ffd5b919050565b5f5f5f5f5f60808688031215610ffa575f5ffd5b61100386610fcb565b945061101160208701610fcb565b935060408601359250606086013567ffffffffffffffff811115611033575f5ffd5b8601601f81018813611043575f5ffd5b803567ffffffffffffffff811115611059575f5ffd5b88602082840101111561106a575f5ffd5b959894975092955050506020019190565b6060810181835f5b60038110156110a557815160ff16835260209283019290910190600101611083565b50505092915050565b602080825282518282018190525f918401906040840190835b8181101561111957835160ff815116845260ff602082015116602085015260018060f01b03604082015116604085015260608101516060850152506080830192506020840193506001810190506110c7565b509095945050505050565b5f5f60208385031215611135575f5ffd5b823567ffffffffffffffff81111561114b575f5ffd5b8301601f8101851361115b575f5ffd5b803567ffffffffffffffff811115611171575f5ffd5b8560208260071b8401011115611185575f5ffd5b6020919091019590945092505050565b5f5f604083850312156111a6575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111f2576111f26111b5565b604052919050565b803560ff81168114610fe1575f5ffd5b5f6080828403121561121a575f5ffd5b6040516080810167ffffffffffffffff8111828210171561123d5761123d6111b5565b60405290508061124c836111fa565b815261125a602084016111fa565b602082015260408301356001600160f01b0381168114611278575f5ffd5b6040820152606092830135920191909152919050565b5f5f6040838503121561129f575f5ffd5b6112a883610fcb565b9150602083013567ffffffffffffffff8111156112c3575f5ffd5b8301601f810185136112d3575f5ffd5b803567ffffffffffffffff8111156112ed576112ed6111b5565b6112fc60208260051b016111c9565b8082825260208201915060208360071b85010192508783111561131d575f5ffd5b6020840193505b8284101561134957611336888561120a565b8252602082019150608084019350611324565b809450505050509250929050565b8082018082111561022d57634e487b7160e01b5f52601160045260245ffd5b5f60808284031215611386575f5ffd5b610254838361120a565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03868116825285166020820152604081018490526080606082018190528101829052818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f60208284031215611418575f5ffd5b81518015158114610254575f5ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906102aa90830184611427565b602080825282518282018190525f918401906040840190835b818110156111195783518352602093840193909201916001016114a0565b5f82518060208501845e5f920191825250919050565b602081525f610254602083018461142756fe416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564a2646970667358221220d1a46a7008706576b664dc11dd9f0fda1e221df80765bc29b6c6091a8f8bb6a464736f6c634300081c0033416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564