60806040526002805461dead6001600160a01b031991821617909155600380549091169055601460065560506007556008805462ffffff1916624b1901179055620000766064620000536009600a620006b7565b6200006290620f4240620006c8565b620003e760201b620016421790919060201c565b600a556200008f60326009600a620000539190620006b7565b600b5560c8600c556064600d55600e805460ff19166001179055601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556012805461ffff60a81b19169055348015620000ea57600080fd5b50620000f633620003fe565b6008805476936a644bd49e5e0e756bf1b735459fdd374363cf0000006301000000600160b81b0319909116179055600980546001600160a01b03191673884784f869346f9955fe222b4aa09c42126dac251781556200015790600a620006b7565b6200016690620f4240620006c8565b33600090815260046020908152604080832093909355600f90528181208054600160ff1991821681179092556008546001600160a01b036301000000909104811684528484208054831684179055600954811684528484208054831684179055308085529490932080549091169091179055601154620001eb92911660001962000428565b601154601080546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026e9190620006ea565b6001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f79190620006ea565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b9190620006ea565b601280546001600160a01b0319166001600160a01b0392831617905560098054909116906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620003c190600a620006b7565b620003d090620f4240620006c8565b60405190815260200160405180910390a36200073f565b6000620003f582846200071c565b90505b92915050565b600180546001600160a01b0319169055620004258162000554602090811b6200165517901c565b50565b6001600160a01b038316620004905760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620004f35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000487565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005fb578160001904821115620005df57620005df620005a4565b80851615620005ed57918102915b93841c9390800290620005bf565b509250929050565b6000826200061457506001620003f8565b816200062357506000620003f8565b81600181146200063c5760028114620006475762000667565b6001915050620003f8565b60ff8411156200065b576200065b620005a4565b50506001821b620003f8565b5060208310610133831016604e8410600b84101617156200068c575081810a620003f8565b620006988383620005ba565b8060001904821115620006af57620006af620005a4565b029392505050565b6000620003f560ff84168362000603565b6000816000190483118215151615620006e557620006e5620005a4565b500290565b600060208284031215620006fd57600080fd5b81516001600160a01b03811681146200071557600080fd5b9392505050565b6000826200073a57634e487b7160e01b600052601260045260246000fd5b500490565b6124c7806200074f6000396000f3fe60806040526004361061026e5760003560e01c8063766f286e11610153578063a5cdee05116100cb578063d82849161161007f578063e30c397811610064578063e30c397814610714578063f2fde38b14610732578063fa92ab7d1461075257600080fd5b8063d8284916146106af578063dd62ed3e146106ce57600080fd5b8063c9567bf9116100b0578063c9567bf914610671578063ca9ec19914610679578063d15ab09c1461068f57600080fd5b8063a5cdee0514610631578063a9059cbb1461065157600080fd5b8063878f8ff7116101225780638f9a55c0116101075780638f9a55c0146105bf57806395d89b41146105d5578063a42d70ae1461061b57600080fd5b8063878f8ff7146105775780638da5cb5b146105a157600080fd5b8063766f286e1461050757806379ba5097146105375780637d1db4a51461054c57806382bcedb51461056257600080fd5b80633da858b5116101e657806352f7c988116101b557806370a082311161019a57806370a082311461049c578063715018a6146104d257806372333356146104e757600080fd5b806352f7c9881461046657806368ec19bf1461048657600080fd5b80633da858b51461040457806342012bb81461041b57806342a110951461043b57806351bc3c851461045157600080fd5b806323b872dd1161023d578063313ce56711610222578063313ce567146103b65780633582ad23146103ca57806337e294d5146103e457600080fd5b806323b872dd146103645780632d1fff6c1461038457600080fd5b806306fdde031461027a578063095ea7b3146102d257806311a63e171461030257806318160ddd1461034157600080fd5b3661027557005b600080fd5b34801561028657600080fd5b5060408051808201909152600781527f53686962616b690000000000000000000000000000000000000000000000000060208201525b6040516102c99190612040565b60405180910390f35b3480156102de57600080fd5b506102f26102ed3660046120aa565b61076c565b60405190151581526020016102c9565b34801561030e57600080fd5b5060085461032990630100000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102c9565b34801561034d57600080fd5b50610356610783565b6040519081526020016102c9565b34801561037057600080fd5b506102f261037f3660046120d6565b6107a3565b34801561039057600080fd5b506008546103a49062010000900460ff1681565b60405160ff90911681526020016102c9565b3480156103c257600080fd5b5060096103a4565b3480156103d657600080fd5b50600e546102f29060ff1681565b3480156103f057600080fd5b50600954610329906001600160a01b031681565b34801561041057600080fd5b5061041961080c565b005b34801561042757600080fd5b50610419610436366004612125565b6108ce565b34801561044757600080fd5b5061035660065481565b34801561045d57600080fd5b506104196109aa565b34801561047257600080fd5b5061041961048136600461215e565b610a8e565b34801561049257600080fd5b50610356600d5481565b3480156104a857600080fd5b506103566104b7366004612180565b6001600160a01b031660009081526004602052604090205490565b3480156104de57600080fd5b50610419610c10565b3480156104f357600080fd5b5061041961050236600461215e565b610c24565b34801561051357600080fd5b506102f2610522366004612180565b600f6020526000908152604090205460ff1681565b34801561054357600080fd5b50610419610e41565b34801561055857600080fd5b50610356600a5481565b34801561056e57600080fd5b50610419610ecf565b34801561058357600080fd5b5061058c610fac565b604080519283526020830191909152016102c9565b3480156105ad57600080fd5b506000546001600160a01b0316610329565b3480156105cb57600080fd5b50610356600b5481565b3480156105e157600080fd5b5060408051808201909152600881527f2453686962616b6900000000000000000000000000000000000000000000000060208201526102bc565b34801561062757600080fd5b50610356600c5481565b34801561063d57600080fd5b5061041961064c36600461219d565b610ff5565b34801561065d57600080fd5b506102f261066c3660046120aa565b6110b9565b6104196110c6565b34801561068557600080fd5b5061035660075481565b34801561069b57600080fd5b506104196106aa366004612180565b6113a8565b3480156106bb57600080fd5b506008546103a490610100900460ff1681565b3480156106da57600080fd5b506103566106e93660046121ba565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561072057600080fd5b506001546001600160a01b0316610329565b34801561073e57600080fd5b5061041961074d366004612180565b6115c4565b34801561075e57600080fd5b506008546102f29060ff1681565b60006107793384846116b2565b5060015b92915050565b60006107916009600a6122e2565b61079e90620f42406122f1565b905090565b60006107b084848461180a565b61080284336107fd8560405180606001604052806028815260200161246a602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611d25565b6116b2565b5060019392505050565b6000546001600160a01b03163314806108365750600854630100000090046001600160a01b031633145b8061084b57506009546001600160a01b031633145b6108c25760405162461bcd60e51b815260206004820152603b60248201527f4f6e6c79206f776e65722c206465762077616c6c6574206f72207465616d207760448201527f616c6c65742063616e2075736520746869732066756e6374696f6e000000000060648201526084015b60405180910390fd5b6008805460ff19169055565b6000546001600160a01b03163314806108f85750600854630100000090046001600160a01b031633145b8061090d57506009546001600160a01b031633145b61097f5760405162461bcd60e51b815260206004820152603b60248201527f4f6e6c79206f776e65722c206465762077616c6c6574206f72207465616d207760448201527f616c6c65742063616e2075736520746869732066756e6374696f6e000000000060648201526084016108b9565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314806109d45750600854630100000090046001600160a01b031633145b806109e957506009546001600160a01b031633145b610a5b5760405162461bcd60e51b815260206004820152603b60248201527f4f6e6c79206f776e65722c206465762077616c6c6574206f72207465616d207760448201527f616c6c65742063616e2075736520746869732066756e6374696f6e000000000060648201526084016108b9565b306000908152600460205260409020548015610a7a57610a7a81611d51565b478015610a8a57610a8a81611eef565b5050565b6000546001600160a01b0316331480610ab85750600854630100000090046001600160a01b031633145b80610acd57506009546001600160a01b031633145b610b3f5760405162461bcd60e51b815260206004820152603b60248201527f4f6e6c79206f776e65722c206465762077616c6c6574206f72207465616d207760448201527f616c6c65742063616e2075736520746869732066756e6374696f6e000000000060648201526084016108b9565b60085460ff16610b915760405162461bcd60e51b815260206004820152601b60248201527f53657420666565206e6f7420656e61626c656420616e796d6f7265000000000060448201526064016108b9565b6063821115610bcb5760405162461bcd60e51b81526020600482015260066024820152650727240dac2f60d31b60448201526064016108b9565b6063811115610c055760405162461bcd60e51b81526020600482015260066024820152650727240dac2f60d31b60448201526064016108b9565b600691909155600755565b610c18611f87565b610c226000611fe1565b565b6000546001600160a01b0316331480610c4e5750600854630100000090046001600160a01b031633145b80610c6357506009546001600160a01b031633145b610cd55760405162461bcd60e51b815260206004820152603b60248201527f4f6e6c79206f776e65722c206465762077616c6c6574206f72207465616d207760448201527f616c6c65742063616e2075736520746869732066756e6374696f6e000000000060648201526084016108b9565b600654821115610d275760405162461bcd60e51b815260206004820152601b60248201527f42757920746178206f6e6c792063616e2062652072656475636564000000000060448201526064016108b9565b600754811115610d795760405162461bcd60e51b815260206004820152601c60248201527f53656c6c20746178206f6e6c792063616e20626520726564756365640000000060448201526064016108b9565b6001821015610dca5760405162461bcd60e51b815260206004820181905260248201527f427579207461782063616e206e6f74206265206c6f776572207468616e20312560448201526064016108b9565b6001811015610c055760405162461bcd60e51b815260206004820152602160248201527f53656c6c207461782063616e206e6f74206265206c6f776572207468616e203160448201527f250000000000000000000000000000000000000000000000000000000000000060648201526084016108b9565b60015433906001600160a01b03168114610ec35760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016108b9565b610ecc81611fe1565b50565b6000546001600160a01b0316331480610ef95750600854630100000090046001600160a01b031633145b80610f0e57506009546001600160a01b031633145b610f805760405162461bcd60e51b815260206004820152603b60248201527f4f6e6c79206f776e65722c206465762077616c6c6574206f72207465616d207760448201527f616c6c65742063616e2075736520746869732066756e6374696f6e000000000060648201526084016108b9565b60405133904780156108fc02916000818181858888f19350505050158015610ecc573d6000803e3d6000fd5b6012546001600160a01b03166000908152600460205260408120548190610fde600c548261164290919063ffffffff16565b600d54610fec908390611642565b92509250509091565b6000546001600160a01b031633148061101f5750600854630100000090046001600160a01b031633145b8061103457506009546001600160a01b031633145b6110a65760405162461bcd60e51b815260206004820152603b60248201527f4f6e6c79206f776e65722c206465762077616c6c6574206f72207465616d207760448201527f616c6c65742063616e2075736520746869732066756e6374696f6e000000000060648201526084016108b9565b600e805460ff1916911515919091179055565b600061077933848461180a565b6000546001600160a01b03163314806110f05750600854630100000090046001600160a01b031633145b8061110557506009546001600160a01b031633145b6111775760405162461bcd60e51b815260206004820152603b60248201527f4f6e6c79206f776e65722c206465762077616c6c6574206f72207465616d207760448201527f616c6c65742063616e2075736520746869732066756e6374696f6e000000000060648201526084016108b9565b60125474010000000000000000000000000000000000000000900460ff16156111e25760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016108b9565b6010546001600160a01b031663f305d7193430611214816001600160a01b031660009081526004602052604090205490565b6000806112296000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156112a9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112ce9190612310565b50506012546010546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015611340573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611364919061233e565b50601280547fffffffffffffffffff00ff00ffffffffffffffffffffffffffffffffffffffff16760100010000000000000000000000000000000000000000179055565b6000546001600160a01b03163314806113d25750600854630100000090046001600160a01b031633145b806113e757506009546001600160a01b031633145b6114595760405162461bcd60e51b815260206004820152603b60248201527f4f6e6c79206f776e65722c206465762077616c6c6574206f72207465616d207760448201527f616c6c65742063616e2075736520746869732066756e6374696f6e000000000060648201526084016108b9565b6001600160a01b0381163014156114b25760405162461bcd60e51b815260206004820152601d60248201527f596f752063616e20756e737475636b20746865206f776e20746f6b656e00000060448201526064016108b9565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015611519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153d919061235b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156115a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8a919061233e565b6115cc611f87565b600180546001600160a01b03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915561160a6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600061164e8284612374565b9392505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03831661172d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108b9565b6001600160a01b0382166117a95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016108b9565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118865760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108b9565b6001600160a01b0382166119025760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016108b9565b600081116119785760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f000000000000000000000000000000000000000000000060648201526084016108b9565b6001600160a01b0382166000908152600f602052604081205460ff161580156119ba57506001600160a01b0384166000908152600f602052604090205460ff16155b15611c5c57600e5460ff1615611acd576012546001600160a01b03848116911614611acd576001600160a01b038316600090815260046020526040902054600b54611a058483612396565b1115611a795760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016108b9565b600a54831115611acb5760405162461bcd60e51b815260206004820152601160248201527f5458204c696d697420457863656564656400000000000000000000000000000060448201526064016108b9565b505b6012546001600160a01b0385811691161415611b0657611b036064611afd6006548561200790919063ffffffff16565b90611642565b90505b6012546001600160a01b0384811691161415611b3957611b366064611afd6007548561200790919063ffffffff16565b90505b600080611b44610fac565b3060009081526004602052604090205460125492945090925090600160a81b900460ff16158015611b8257506012546001600160a01b038781169116145b8015611baa5750601254760100000000000000000000000000000000000000000000900460ff165b8015611bb557508281115b15611bde57611bcc611bc78284612013565b611d51565b478015611bdc57611bdc47611eef565b505b8315611c585730600090815260046020526040902054611bfe9085612028565b30600081815260046020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c4f9088815260200190565b60405180910390a35b5050505b6001600160a01b038416600090815260046020526040902054611c7f9083612034565b6001600160a01b038516600090815260046020526040902055611cc4611ca58383612034565b6001600160a01b03851660009081526004602052604090205490612028565b6001600160a01b0380851660008181526004602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611d0e8585612034565b60405190815260200160405180910390a350505050565b60008184841115611d495760405162461bcd60e51b81526004016108b99190612040565b505050900390565b6012805460ff60a81b1916600160a81b17905580611d6e57611edf565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611da357611da36123ae565b6001600160a01b03928316602091820292909201810191909152601054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3991906123c4565b81600181518110611e4c57611e4c6123ae565b6001600160a01b0392831660209182029290920101526010546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790611eab9085906000908690309042906004016123e1565b600060405180830381600087803b158015611ec557600080fd5b505af1158015611ed9573d6000803e3d6000fd5b50505050505b506012805460ff60a81b19169055565b600854600090630100000081046001600160a01b0316906108fc90611f2490606490611afd908790610100900460ff16612007565b6040518115909202916000818181858888f16009546008549196506001600160a01b031694506108fc9350611f6c925060649150611afd90879062010000900460ff16612007565b6040518115909202916000818181858888f150505050505050565b6000546001600160a01b03163314610c225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b9565b6001805473ffffffffffffffffffffffffffffffffffffffff19169055610ecc81611655565b600061164e82846122f1565b6000818311612022578261164e565b50919050565b600061164e8284612396565b600061164e8284612452565b600060208083528351808285015260005b8181101561206d57858101830151858201604001528201612051565b8181111561207f576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ecc57600080fd5b600080604083850312156120bd57600080fd5b82356120c881612095565b946020939093013593505050565b6000806000606084860312156120eb57600080fd5b83356120f681612095565b9250602084013561210681612095565b929592945050506040919091013590565b8015158114610ecc57600080fd5b6000806040838503121561213857600080fd5b823561214381612095565b9150602083013561215381612117565b809150509250929050565b6000806040838503121561217157600080fd5b50508035926020909101359150565b60006020828403121561219257600080fd5b813561164e81612095565b6000602082840312156121af57600080fd5b813561164e81612117565b600080604083850312156121cd57600080fd5b82356121d881612095565b9150602083013561215381612095565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561223957816000190482111561221f5761221f6121e8565b8085161561222c57918102915b93841c9390800290612203565b509250929050565b6000826122505750600161077d565b8161225d5750600061077d565b8160018114612273576002811461227d57612299565b600191505061077d565b60ff84111561228e5761228e6121e8565b50506001821b61077d565b5060208310610133831016604e8410600b84101617156122bc575081810a61077d565b6122c683836121fe565b80600019048211156122da576122da6121e8565b029392505050565b600061164e60ff841683612241565b600081600019048311821515161561230b5761230b6121e8565b500290565b60008060006060848603121561232557600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561235057600080fd5b815161164e81612117565b60006020828403121561236d57600080fd5b5051919050565b60008261239157634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156123a9576123a96121e8565b500190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156123d657600080fd5b815161164e81612095565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124315784516001600160a01b03168352938301939183019160010161240c565b50506001600160a01b03969096166060850152505050608001529392505050565b600082821015612464576124646121e8565b50039056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a75d648feed9323d08cfb2d7c9922af85c91b984afc642f7b5905d6bb0cdb6b664736f6c634300080c0033