60806040526005805460ff191660019081179091556006819055600781905560088190556009819055600a818155600b829055612710600c55600d919091556200004c90601290620004c7565b6200005c906301312d00620004df565b600e556200006d6012600a620004c7565b6200007d906301312d00620004df565b600f556200008e6012600a620004c7565b6200009d906216e360620004df565b601055620000ae6012600a620004c7565b620000bd9062e4e1c0620004df565b601155601280546001600160a01b031990811673ad6c130f198d449fc264ce712acc497ab509260017909155601380549091166334858d1e1790556015805461ffff60a81b191690553480156200011357600080fd5b50600080546001600160a01b0319168155604051819081907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060058054610100600160a81b0319166101003302179055620001766012600a620004c7565b620001869063d8be8174620004df565b336000908152600160208190526040822092909255600390620001b16000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260039093528183208054851660019081179091556005546101009004909116835291208054909216179055620002176200027a565b6200022162000314565b3360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002536012600a620004c7565b620002639063d8be8174620004df565b60405190815260200160405180910390a3620004f9565b601554600160a01b900460ff1615620002d95760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604482015260640160405180910390fd5b601480546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556015805460ff60a01b1916600160a01b179055565b620003226012600a620004c7565b620003329063d8be8174620004df565b600e55620003436012600a620004c7565b620003539063d8be8174620004df565b600f556005805460ff191690557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6200038f6012600a620004c7565b6200039f9063d8be8174620004df565b60405190815260200160405180910390a1565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000409578160001904821115620003ed57620003ed620003b2565b80851615620003fb57918102915b93841c9390800290620003cd565b509250929050565b6000826200042257506001620004c1565b816200043157506000620004c1565b81600181146200044a5760028114620004555762000475565b6001915050620004c1565b60ff841115620004695762000469620003b2565b50506001821b620004c1565b5060208310610133831016604e8410600b84101617156200049a575081810a620004c1565b620004a68383620003c8565b8060001904821115620004bd57620004bd620003b2565b0290505b92915050565b6000620004d860ff84168362000411565b9392505050565b8082028115828204841417620004c157620004c1620003b2565b61158080620005096000396000f3fe6080604052600436106101185760003560e01c80637d1db4a5116100a0578063a9059cbb11610064578063a9059cbb14610307578063bf474bed14610327578063c876d0b91461033d578063c9567bf914610357578063dd62ed3e1461036c57600080fd5b80637d1db4a5146102705780638da5cb5b146102865780638f9a55c0146102ae57806395d89b41146102c4578063a1780c18146102f257600080fd5b806323b872dd116100e757806323b872dd146101d2578063313ce567146101f257806370a082311461020e578063715018a614610244578063751039fc1461025b57600080fd5b806306fdde0314610124578063095ea7b3146101695780630faee56f1461019957806318160ddd146101bd57600080fd5b3661011f57005b600080fd5b34801561013057600080fd5b5060408051808201909152600a81526925b4b9313c9029ba30b960b11b60208201525b6040516101609190611194565b60405180910390f35b34801561017557600080fd5b506101896101843660046111fa565b6103b2565b6040519015158152602001610160565b3480156101a557600080fd5b506101af60115481565b604051908152602001610160565b3480156101c957600080fd5b506101af6103c9565b3480156101de57600080fd5b506101896101ed366004611226565b6103ea565b3480156101fe57600080fd5b5060405160128152602001610160565b34801561021a57600080fd5b506101af610229366004611267565b6001600160a01b031660009081526001602052604090205490565b34801561025057600080fd5b50610259610453565b005b34801561026757600080fd5b506102596104fc565b34801561027c57600080fd5b506101af600e5481565b34801561029257600080fd5b506000546040516001600160a01b039091168152602001610160565b3480156102ba57600080fd5b506101af600f5481565b3480156102d057600080fd5b506040805180820190915260058152644b4952425960d81b6020820152610153565b3480156102fe57600080fd5b5061025961058e565b34801561031357600080fd5b506101896103223660046111fa565b6105f0565b34801561033357600080fd5b506101af60105481565b34801561034957600080fd5b506005546101899060ff1681565b34801561036357600080fd5b506102596105fd565b34801561037857600080fd5b506101af610387366004611284565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b60006103bf338484610692565b5060015b92915050565b60006103d76012600a6113b7565b6103e59063d8be81746113c6565b905090565b60006103f78484846107b6565b610449843361044485604051806060016040528060288152602001611523602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190610df3565b610692565b5060019392505050565b6000546001600160a01b031633146104b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6105086012600a6113b7565b6105169063d8be81746113c6565b600e556105256012600a6113b7565b6105339063d8be81746113c6565b600f556005805460ff191690557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf61056d6012600a6113b7565b61057b9063d8be81746113c6565b60405190815260200160405180910390a1565b60055461010090046001600160a01b0316336001600160a01b0316146105b357600080fd5b3060009081526001602052604090205480156105d2576105d281610e2d565b476729a2241af62c00008111156105ec576105ec81610fa7565b5050565b60006103bf3384846107b6565b601554600160a01b900460ff16156106575760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016104a9565b601480546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556015805460ff60a01b1916600160a01b179055565b6001600160a01b0383166106f45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a9565b6001600160a01b0382166107555760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a9565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661081a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a9565b6001600160a01b03821661087c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a9565b600081116108de5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016104a9565b600080546001600160a01b0385811691161480159061090b57506000546001600160a01b03848116911614155b15610c565761093c6064610936600a54600d541161092b5760065461092f565b6008545b8590610fe5565b9061106e565b60055490915060ff1615610a24576014546001600160a01b0384811691161480159061097657506015546001600160a01b03848116911614155b15610a2457326000908152600460205260409020544311610a115760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016104a9565b3260009081526004602052604090204390555b6015546001600160a01b038581169116148015610a4f57506014546001600160a01b03848116911614155b8015610a7457506001600160a01b03831660009081526003602052604090205460ff16155b15610b5c57600e54821115610acb5760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e0000000000000060448201526064016104a9565b600f5482610aee856001600160a01b031660009081526001602052604090205490565b610af891906113dd565b1115610b465760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e00000000000060448201526064016104a9565b600d8054906000610b56836113f0565b91905055505b6015546001600160a01b038481169116148015610b8257506001600160a01b0384163014155b15610baf57610bac6064610936600b54600d5411610ba25760075461092f565b6009548590610fe5565b90505b30600090815260016020526040902054601554600160a81b900460ff16158015610be657506015546001600160a01b038581169116145b8015610bfb5750601554600160b01b900460ff165b8015610c08575060105481115b8015610c175750600c54600d54115b15610c5457610c39610c3484610c2f846011546110b0565b6110b0565b610e2d565b4766b1a2bc2ec50000811115610c5257610c5247610fa7565b505b505b8015610d2a57506012546013546000918291610c7e916001600160a01b039081169116611409565b60405163258185b560e11b81526001600160a01b038781166004830152919250600091831690634b030b6a90602401602060405180830381865afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee9190611430565b9050610cfa8184611449565b30600090815260016020526040902054909350610d1790846110c5565b3060009081526001602052604090205550505b6001600160a01b038416600090815260016020526040902054610d4d9083611124565b6001600160a01b038516600090815260016020526040902055610d92610d738383611124565b6001600160a01b038516600090815260016020526040902054906110c5565b6001600160a01b0380851660008181526001602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610ddc8585611124565b60405190815260200160405180910390a350505050565b60008184841115610e175760405162461bcd60e51b81526004016104a99190611194565b506000610e248486611449565b95945050505050565b6015805460ff60a81b1916600160a81b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110610e7557610e7561145c565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef29190611472565b81600181518110610f0557610f0561145c565b6001600160a01b039283166020918202929092010152601454610f2b9130911684610692565b60145460405163791ac94760e01b81526001600160a01b039091169063791ac94790610f6490859060009086903090429060040161148f565b600060405180830381600087803b158015610f7e57600080fd5b505af1158015610f92573d6000803e3d6000fd5b50506015805460ff60a81b1916905550505050565b6005546040516101009091046001600160a01b0316906108fc8315029083906000818181858888f193505050501580156105ec573d6000803e3d6000fd5b600082600003610ff7575060006103c3565b600061100383856113c6565b9050826110108583611500565b146110675760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104a9565b9392505050565b600061106783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611166565b60008183116110bf5782611067565b50919050565b6000806110d283856113dd565b9050838110156110675760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104a9565b600061106783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610df3565b600081836111875760405162461bcd60e51b81526004016104a99190611194565b506000610e248486611500565b600060208083528351808285015260005b818110156111c1578581018301518582016040015282016111a5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146111f757600080fd5b50565b6000806040838503121561120d57600080fd5b8235611218816111e2565b946020939093013593505050565b60008060006060848603121561123b57600080fd5b8335611246816111e2565b92506020840135611256816111e2565b929592945050506040919091013590565b60006020828403121561127957600080fd5b8135611067816111e2565b6000806040838503121561129757600080fd5b82356112a2816111e2565b915060208301356112b2816111e2565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561130e5781600019048211156112f4576112f46112bd565b8085161561130157918102915b93841c93908002906112d8565b509250929050565b600082611325575060016103c3565b81611332575060006103c3565b816001811461134857600281146113525761136e565b60019150506103c3565b60ff841115611363576113636112bd565b50506001821b6103c3565b5060208310610133831016604e8410600b8410161715611391575081810a6103c3565b61139b83836112d3565b80600019048211156113af576113af6112bd565b029392505050565b600061106760ff841683611316565b80820281158282048414176103c3576103c36112bd565b808201808211156103c3576103c36112bd565b600060018201611402576114026112bd565b5060010190565b6001600160a01b03818116838216019080821115611429576114296112bd565b5092915050565b60006020828403121561144257600080fd5b5051919050565b818103818111156103c3576103c36112bd565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561148457600080fd5b8151611067816111e2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156114df5784516001600160a01b0316835293830193918301916001016114ba565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261151d57634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220fb15bcab3712d484507ba43bba16a71f3488358f9fe470073ff2df68c8181dcb64736f6c63430008130033