0x6080604052600436106103b15760003560e01c80635bb988c9116101e7578063a9059cbb1161010d578063dc44b6a0116100a0578063ee40166e1161006f578063ee40166e14610b1c578063efcc52de14610b32578063f2fde38b14610b48578063f5648a4f14610b6857600080fd5b8063dc44b6a014610a8b578063dd62ed3e14610aa1578063e884f26014610ae7578063ea2f0b3714610afc57600080fd5b8063c5d24189116100dc578063c5d2418914610a2f578063c860795214610a45578063c876d0b914610a5b578063c8c8ebe414610a7557600080fd5b8063a9059cbb1461099e578063b62496f5146109be578063bbc0c742146109ee578063c49b9a8014610a0f57600080fd5b806385ecfd281161018557806395d89b411161015457806395d89b411461091c5780639a7a23d614610949578063a073d37f14610969578063a457c2d71461097e57600080fd5b806385ecfd281461087f57806388790a68146108af57806388f82020146108c55780638da5cb5b146108fe57600080fd5b8063715018a6116101c1578063715018a614610815578063751039fc1461082a5780637571336a1461083f5780638366e79a1461085f57600080fd5b80635bb988c9146107c0578063602bc62b146107e057806370a08231146107f557600080fd5b8063313ce567116102d757806349bd5a5e1161026a57806352390c021161023957806352390c0214610734578063525fa81f146107545780635342acb414610774578063557ed1ba146107ad57600080fd5b806349bd5a5e146106bf5780634a62bb65146106df5780634a74bb02146106fe57806351f205e41461071f57600080fd5b80634047ea3e116102a65780634047ea3e14610649578063437823ec1461065f57806343af92321461067f5780634549b0391461069f57600080fd5b8063313ce567146105cd5780633221c93f146105e95780633685d41914610609578063395093511461062957600080fd5b806318160ddd1161034f57806323b872dd1161031e57806323b872dd1461055757806324171f321461057757806325519cf21461058d5780632d838119146105ad57600080fd5b806318160ddd146104ec5780631d865c301461050b5780631fc851bd1461052b578063200a692d1461054157600080fd5b80630ea1b8bb1161038b5780630ea1b8bb1461044357806310d5de531461046557806313114a9d146104955780631694505e146104b457600080fd5b806301339c21146103bd57806306fdde03146103e7578063095ea7b31461042357600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610b7d565b60405190151581526020015b60405180910390f35b3480156103f357600080fd5b5060408051808201909152600a815269436865656d7320496e7560b01b60208201525b6040516103de91906138fc565b34801561042f57600080fd5b506103d261043e366004613966565b610ea4565b34801561044f57600080fd5b5061046361045e366004613992565b610ebb565b005b34801561047157600080fd5b506103d2610480366004613992565b60216020526000908152604090205460ff1681565b3480156104a157600080fd5b50600e545b6040519081526020016103de565b3480156104c057600080fd5b506024546104d4906001600160a01b031681565b6040516001600160a01b0390911681526020016103de565b3480156104f857600080fd5b506897761759c34d7b26fb601f1b6104a6565b34801561051757600080fd5b506104636105263660046139af565b610f95565b34801561053757600080fd5b506104a6601d5481565b34801561054d57600080fd5b506104a660185481565b34801561056357600080fd5b506103d26105723660046139db565b611078565b34801561058357600080fd5b506104a6601f5481565b34801561059957600080fd5b506104636105a83660046139af565b6110e1565b3480156105b957600080fd5b506104a66105c8366004613a1c565b6111bd565b3480156105d957600080fd5b50604051600981526020016103de565b3480156105f557600080fd5b506004546104d4906001600160a01b031681565b34801561061557600080fd5b50610463610624366004613992565b611241565b34801561063557600080fd5b506103d2610644366004613966565b6113f8565b34801561065557600080fd5b506104a6601e5481565b34801561066b57600080fd5b5061046361067a366004613992565b61142e565b34801561068b57600080fd5b506003546104d4906001600160a01b031681565b3480156106ab57600080fd5b506104a66106ba366004613a43565b6114b3565b3480156106cb57600080fd5b506025546104d4906001600160a01b031681565b3480156106eb57600080fd5b506009546103d290610100900460ff1681565b34801561070a57600080fd5b506025546103d290600160a81b900460ff1681565b34801561072b57600080fd5b5061046361154a565b34801561074057600080fd5b5061046361074f366004613992565b611610565b34801561076057600080fd5b5061046361076f366004613992565b6117fd565b34801561078057600080fd5b506103d261078f366004613992565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156107b957600080fd5b50426104a6565b3480156107cc57600080fd5b506104636107db366004613992565b6118c5565b3480156107ec57600080fd5b506002546104a6565b34801561080157600080fd5b506104a6610810366004613992565b611938565b34801561082157600080fd5b50610463611997565b34801561083657600080fd5b506103d2611a0b565b34801561084b57600080fd5b5061046361085a366004613a73565b611a47565b34801561086b57600080fd5b506103d261087a366004613aa1565b611a9c565b34801561088b57600080fd5b506103d261089a366004613992565b601c6020526000908152604090205460ff1681565b3480156108bb57600080fd5b506104a660195481565b3480156108d157600080fd5b506103d26108e0366004613992565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561090a57600080fd5b506000546001600160a01b03166104d4565b34801561092857600080fd5b5060408051808201909152600481526343494e5560e01b6020820152610416565b34801561095557600080fd5b50610463610964366004613a73565b611cc2565b34801561097557600080fd5b506023546104a6565b34801561098a57600080fd5b506103d2610999366004613966565b611d7a565b3480156109aa57600080fd5b506103d26109b9366004613966565b611dc9565b3480156109ca57600080fd5b506103d26109d9366004613992565b60226020526000908152604090205460ff1681565b3480156109fa57600080fd5b506025546103d290600160b01b900460ff1681565b348015610a1b57600080fd5b50610463610a2a366004613acf565b611dd6565b348015610a3b57600080fd5b506104a660175481565b348015610a5157600080fd5b506104a6601a5481565b348015610a6757600080fd5b506009546103d29060ff1681565b348015610a8157600080fd5b506104a660205481565b348015610a9757600080fd5b506104a660165481565b348015610aad57600080fd5b506104a6610abc366004613aa1565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610af357600080fd5b506103d2611e4d565b348015610b0857600080fd5b50610463610b17366004613992565b611e88565b348015610b2857600080fd5b506104a6601b5481565b348015610b3e57600080fd5b506104a660155481565b348015610b5457600080fd5b50610463610b63366004613992565b611f03565b348015610b7457600080fd5b50610463611fed565b600080546001600160a01b03163314610bb15760405162461bcd60e51b8152600401610ba890613aec565b60405180910390fd5b602554600160b01b900460ff1615610c1f5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ba8565b610c276120d3565b737a250d5630b4cf539739df2c5dacb4c659f2488d610c47816001611a47565b602480546001600160a01b0319166001600160a01b038316908117909155610c7d9030906897761759c34d7b26fb601f1b612128565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cb657600080fd5b505afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee9190613b21565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3657600080fd5b505afa158015610d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6e9190613b21565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610db657600080fd5b505af1158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee9190613b21565b602580546001600160a01b0319166001600160a01b03929092169182179055610e18906001611a47565b602554610e2f906001600160a01b0316600161224c565b3031610e895760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ba8565b610e9c610e9530611938565b30316122a7565b600191505090565b6000610eb1338484612128565b5060015b92915050565b6000546001600160a01b03163314610ee55760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b038116610f455760405162461bcd60e51b815260206004820152602160248201527f696e766573744164647265737320616464726573732063616e6e6f74206265206044820152600360fc1b6064820152608401610ba8565b600380546001600160a01b039081166000908152600a6020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b03163314610fbf5760405162461bcd60e51b8152600401610ba890613aec565b60188390556019828155601a82905581610fd98486613b54565b610fe39190613b54565b11156110315760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032352500006044820152606401610ba8565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b600061108584848461236d565b6110d784336110d285604051806060016040528060288152602001613ce1602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612be4565b612128565b5060019392505050565b6000546001600160a01b0316331461110b5760405162461bcd60e51b8152600401610ba890613aec565b601583905560168290556017819055600f816111278486613b54565b6111319190613b54565b111561117f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610ba8565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a7736209060600161106b565b6000600d548211156112245760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ba8565b600061122e612c1e565b905061123a8382612c41565b9392505050565b6000546001600160a01b0316331461126b5760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b0381166000908152600b602052604090205460ff166112d35760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610ba8565b60005b600c548110156113f457816001600160a01b0316600c82815481106112fd576112fd613b6c565b6000918252602090912001546001600160a01b031614156113e257600c805461132890600190613b82565b8154811061133857611338613b6c565b600091825260209091200154600c80546001600160a01b03909216918390811061136457611364613b6c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600b90925220805460ff19169055600c8054806113bc576113bc613b99565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806113ec81613baf565b9150506112d6565b5050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610eb19185906110d29086612c83565b6000546001600160a01b031633146114585760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006897761759c34d7b26fb601f1b8311156115115760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ba8565b8161153057600061152184612ce2565b50939550610eb5945050505050565b600061153b84612ce2565b50929550610eb5945050505050565b6000546001600160a01b031633146115745760405162461bcd60e51b8152600401610ba890613aec565b600061157f30611938565b905061159860646897761759c34d7b26fb601f1b613bca565b8110156116055760405162461bcd60e51b815260206004820152603560248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e206044820152740c49481d1bdad95b9cc81bdb8818dbdb9d1c9858dd605a1b6064820152608401610ba8565b61160d612d31565b50565b6000546001600160a01b0316331461163a5760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b0381166000908152600b602052604090205460ff16156116a35760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ba8565b600c546032906116b4906001613b54565b111561173d5760405162461bcd60e51b815260206004820152604c60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e20496e636c75646520612070726576696f75736c79206578636c7560648201526b3232b21030b2323932b9b99760a11b608482015260a401610ba8565b6001600160a01b03811660009081526005602052604090205415611797576001600160a01b03811660009081526005602052604090205461177d906111bd565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031633146118275760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b03811661188b5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610ba8565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b0381166000818152601c6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600b602052604081205460ff161561197557506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610eb5906111bd565b6000546001600160a01b031633146119c15760405162461bcd60e51b8152600401610ba890613aec565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611a365760405162461bcd60e51b8152600401610ba890613aec565b506009805461ffff19169055600190565b6000546001600160a01b03163314611a715760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611ac75760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b038316611b1d5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ba8565b6001600160a01b038316301415611b765760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610ba8565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611bb857600080fd5b505afa158015611bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf09190613bec565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611c3e57600080fd5b505af1158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c769190613c05565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611cec5760405162461bcd60e51b8152600401610ba890613aec565b6025546001600160a01b0383811691161415611d705760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ba8565b6113f4828261224c565b6000610eb133846110d285604051806060016040528060258152602001613d09602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612be4565b6000610eb133848461236d565b6000546001600160a01b03163314611e005760405162461bcd60e51b8152600401610ba890613aec565b60258054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906114a890831515815260200190565b600080546001600160a01b03163314611e785760405162461bcd60e51b8152600401610ba890613aec565b506009805460ff19169055600190565b6000546001600160a01b03163314611eb25760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016114a8565b6000546001600160a01b03163314611f2d5760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b038116611f925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120175760405162461bcd60e51b8152600401610ba890613aec565b602554600160b01b900460ff16156120855760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610ba8565b60405160009033903031908381818185875af1925050503d80600081146120c8576040519150601f19603f3d011682016040523d82523d6000602084013e6120cd565b606091505b50505050565b6000546001600160a01b031633146120fd5760405162461bcd60e51b8152600401610ba890613aec565b6025805461ffff60a81b191661010160a81b17905543601b55612123426203f480613b54565b601d55565b6001600160a01b03831661218a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba8565b6001600160a01b0382166121eb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba8565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216600090815260226020908152604080832080548515801560ff19928316811790935560219094529190932080549091169092179091556122995761229982611610565b806113f4576113f482611241565b6024546122bf9030906001600160a01b031684612128565b602480546004805460405163f305d71960e01b8152309281019290925292810185905260006044820181905260648201526001600160a01b0392831660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561232d57600080fd5b505af1158015612341573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123669190613c22565b5050505050565b6001600160a01b0383166123d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ba8565b6001600160a01b0382166124335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba8565b600081116124955760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ba8565b602554600160b01b900460ff16612531576001600160a01b0383166000908152600a602052604090205460ff16806124e557506001600160a01b0382166000908152600a602052604090205460ff165b6125315760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f742061637469766520796574210000000000000000006044820152606401610ba8565b600954610100900460ff16156128be576000546001600160a01b0384811691161480159061256d57506000546001600160a01b03838116911614155b801561258157506001600160a01b03821615155b801561259857506001600160a01b03821661dead14155b80156125ae5750602554600160a01b900460ff16155b156128be576000546001600160a01b038481169116148015906125df57506025546001600160a01b03838116911614155b80156125ec5750601b5443145b1561263b576001600160a01b0382166000818152601c6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60095460ff161561274c576000546001600160a01b0383811691161480159061267257506024546001600160a01b03838116911614155b801561268c57506025546001600160a01b03838116911614155b1561274c576001600160a01b03821660009081526008602052604090205443116127305760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610ba8565b6001600160a01b03821660009081526008602052604090204390555b6001600160a01b03831660009081526022602052604090205460ff16801561278d57506001600160a01b03821660009081526021602052604090205460ff16155b15612807576020548111156128025760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610ba8565b6128be565b6001600160a01b03821660009081526022602052604090205460ff16801561284857506001600160a01b03831660009081526021602052604090205460ff16155b156128be576020548111156128be5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610ba8565b60006128d7601f54601e54612c8390919063ffffffff16565b905060006128e430611938565b60235460255491925082101590600160a01b900460ff161580156129115750602554600160a81b900460ff165b80156129325750602554600090612930906001600160a01b0316611938565b115b801561293e5750600083115b801561296357506001600160a01b0385166000908152600a602052604090205460ff16155b801561298857506001600160a01b0386166000908152600a602052604090205460ff16155b80156129ac57506001600160a01b03851660009081526022602052604090205460ff165b80156129b55750805b156129c2576129c2612d31565b6001600160a01b0386166000908152600a602052604090205460019060ff1680612a0457506001600160a01b0386166000908152600a602052604090205460ff165b15612a16575060036014556000612bcf565b6001600160a01b03871660009081526022602052604090205460ff1615612a6257612a3f612ecf565b601554600f55601754601654612a559190613b54565b6012556001601455612bcf565b6001600160a01b03861660009081526022602052604090205460ff1615612aff57612a8b612ecf565b601854600f55601a54601954612aa19190613b54565b60125560026014556001600160a01b0387166000908152601c602052604090205460ff168015612ad2575042601d54115b15612afa57600f54612ae5906005613c50565b600f55601254612af6906005613c50565b6012555b612bcf565b6001600160a01b0387166000908152601c602052604090205460ff161580612b29575042601d5411155b612bc15760405162461bcd60e51b815260206004820152605f60248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e20444d20612043494e552061646d696e2e00608482015260a401610ba8565b612bc9612ecf565b60036014555b612bdb87878784612efd565b50505050505050565b60008184841115612c085760405162461bcd60e51b8152600401610ba891906138fc565b506000612c158486613b82565b95945050505050565b6000806000612c2b613022565b9092509050612c3a8282612c41565b9250505090565b600061123a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131ca565b600080612c908385613b54565b90508381101561123a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ba8565b6000806000806000806000806000612cf98a6131f8565b9250925092506000806000612d178d8686612d12612c1e565b61323a565b919f909e50909c50959a5093985091965092945050505050565b6025805460ff60a01b1916600160a01b1790556000612d4f30611938565b90506000601f54601e54612d639190613b54565b90506000612d7d6002601e54612c4190919063ffffffff16565b90506000612d8b848361328a565b90503031612d98826132cc565b6000612da530318361328a565b90506000612dc886612dc2601f548561343590919063ffffffff16565b90612c41565b90506000612dd6838361328a565b6000601e819055601f81905560035460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114612e33576040519150601f19603f3d011682016040523d82523d6000602084013e612e38565b606091505b50909150508615612e4d57612e4d87836122a7565b67016345785d8a000030311115612eb7576003546040516001600160a01b0390911690303190600081818185875af1925050503d8060008114612eac576040519150601f19603f3d011682016040523d82523d6000602084013e612eb1565b606091505b50909150505b50506025805460ff60a01b1916905550505050505050565b600f54158015612edf5750601254155b15612ee657565b600f80546010556012805460135560009182905555565b80612f0a57612f0a612ecf565b6001600160a01b0384166000908152600b602052604090205460ff168015612f4b57506001600160a01b0383166000908152600b602052604090205460ff16155b15612f6057612f5b8484846134b4565b61300c565b6001600160a01b0384166000908152600b602052604090205460ff16158015612fa157506001600160a01b0383166000908152600b602052604090205460ff165b15612fb157612f5b8484846135da565b6001600160a01b0384166000908152600b602052604090205460ff168015612ff157506001600160a01b0383166000908152600b602052604090205460ff165b1561300157612f5b848484613683565b61300c8484846136f6565b806120cd576120cd601054600f55601354601255565b600d5460009081906897761759c34d7b26fb601f1b825b600c54811015613187578260056000600c848154811061305b5761305b613b6c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806130c657508160066000600c848154811061309f5761309f613b6c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130e5575050600d54936897761759c34d7b26fb601f1b9350915050565b61312b60056000600c84815481106130ff576130ff613b6c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061328a565b925061317360066000600c848154811061314757613147613b6c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061328a565b91508061317f81613baf565b915050613039565b50600d546131a1906897761759c34d7b26fb601f1b612c41565b8210156131c1575050600d54926897761759c34d7b26fb601f1b92509050565b90939092509050565b600081836131eb5760405162461bcd60e51b8152600401610ba891906138fc565b506000612c158486613bca565b6000806000806132078561373a565b9050600061321486613756565b9050600061322c82613226898661328a565b9061328a565b979296509094509092505050565b60008080806132498886613435565b905060006132578887613435565b905060006132658888613435565b9050600061327782613226868661328a565b939b939a50919850919650505050505050565b600061123a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612be4565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061330157613301613b6c565b6001600160a01b03928316602091820292909201810191909152602454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561335557600080fd5b505afa158015613369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338d9190613b21565b816001815181106133a0576133a0613b6c565b6001600160a01b0392831660209182029290920101526024546133c69130911684612128565b60245460405163791ac94760e01b81526001600160a01b039091169063791ac947906133ff908590600090869030904290600401613c6f565b600060405180830381600087803b15801561341957600080fd5b505af115801561342d573d6000803e3d6000fd5b505050505050565b60008261344457506000610eb5565b60006134508385613c50565b90508261345d8583613bca565b1461123a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ba8565b6000806000806000806134c687612ce2565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506134f8908861328a565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054613527908761328a565b6001600160a01b03808b1660009081526005602052604080822093909355908a16815220546135569086612c83565b6001600160a01b03891660009081526005602052604090205561357881613772565b61358284836138d8565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135c791815260200190565b60405180910390a3505050505050505050565b6000806000806000806135ec87612ce2565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061361e908761328a565b6001600160a01b03808b16600090815260056020908152604080832094909455918b168152600690915220546136549084612c83565b6001600160a01b0389166000908152600660209081526040808320939093556005905220546135569086612c83565b60008060008060008061369587612ce2565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506136c7908861328a565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461361e908761328a565b60008060008060008061370887612ce2565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613527908761328a565b6000610eb56064612dc2600f548561343590919063ffffffff16565b6000610eb56064612dc26012548561343590919063ffffffff16565b600160145414156137e35760125460165461378d9083613c50565b6137979190613bca565b601e60008282546137a89190613b54565b90915550506012546017546137bd9083613c50565b6137c79190613bca565b601f60008282546137d89190613b54565b9091555061384f9050565b6002601454141561384f576012546019546137fe9083613c50565b6138089190613bca565b601e60008282546138199190613b54565b9091555050601254601a5461382e9083613c50565b6138389190613bca565b601f60008282546138499190613b54565b90915550505b6000613859612c1e565b905060006138678383613435565b306000908152600560205260409020549091506138849082612c83565b30600090815260056020908152604080832093909355600b9052205460ff16156138d357306000908152600660205260409020546138c29084612c83565b306000908152600660205260409020555b505050565b600d546138e5908361328a565b600d55600e546138f59082612c83565b600e555050565b600060208083528351808285015260005b818110156139295785810183015185820160400152820161390d565b8181111561393b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461160d57600080fd5b6000806040838503121561397957600080fd5b823561398481613951565b946020939093013593505050565b6000602082840312156139a457600080fd5b813561123a81613951565b6000806000606084860312156139c457600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156139f057600080fd5b83356139fb81613951565b92506020840135613a0b81613951565b929592945050506040919091013590565b600060208284031215613a2e57600080fd5b5035919050565b801515811461160d57600080fd5b60008060408385031215613a5657600080fd5b823591506020830135613a6881613a35565b809150509250929050565b60008060408385031215613a8657600080fd5b8235613a9181613951565b91506020830135613a6881613a35565b60008060408385031215613ab457600080fd5b8235613abf81613951565b91506020830135613a6881613951565b600060208284031215613ae157600080fd5b813561123a81613a35565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613b3357600080fd5b815161123a81613951565b634e487b7160e01b600052601160045260246000fd5b60008219821115613b6757613b67613b3e565b500190565b634e487b7160e01b600052603260045260246000fd5b600082821015613b9457613b94613b3e565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613bc357613bc3613b3e565b5060010190565b600082613be757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613bfe57600080fd5b5051919050565b600060208284031215613c1757600080fd5b815161123a81613a35565b600080600060608486031215613c3757600080fd5b8351925060208401519150604084015190509250925092565b6000816000190483118215151615613c6a57613c6a613b3e565b500290565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613cbf5784516001600160a01b031683529383019391830191600101613c9a565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c65c2c74637b8e06d0c7d562bacf43daa2a615f914b85c6e46809275ed2db27d64736f6c63430008090033
0x60806040526009805461ffff19166101011790556200002e6c4bbb0bace1a6bd937d80000000600019620003b0565b6200003c90600019620003f6565b600d55600f546010556012546013556001601581905560006016819055600960178190556018929092556019819055601a91909155601b8190556025805461ffff60a81b1916905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506103e8600d54620000d5919062000410565b620000e290601462000427565b33600090815260056020526040902055600d5462000104906103e89062000410565b62000112906103d462000427565b306000908152600560205260409020556103e86200013f6c4bbb0bace1a6bd937d80000000600a62000427565b6200014b919062000410565b6020556127106200016b6c4bbb0bace1a6bd937d80000000600562000427565b62000177919062000410565b602355600380546001600160a01b03191673f6eb450744558c4f8a3480352cf0b17f9a8ecdde179055620001b36000546001600160a01b031690565b600480546001600160a01b0319166001600160a01b039283161790556000805482168152600a6020526040808220805460ff1990811660019081179092553084528284208054821683179055600354851684529183208054909216179055546200022091166001620002dd565b6200022d306001620002dd565b6200023c61dead6001620002dd565b336000600080516020620041bc8339815191526103e86200026c6c4bbb0bace1a6bd937d80000000601462000427565b62000278919062000410565b60405190815260200160405180910390a3306000600080516020620041bc8339815191526103e8620002ba6c4bbb0bace1a6bd937d800000006103d462000427565b620002c6919062000410565b60405190815260200160405180910390a362000449565b6000546001600160a01b0316331462000356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082620003c257620003c262000381565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156200040b576200040b620003c7565b500390565b60008262000422576200042262000381565b500490565b6000816000190483118215151615620004445762000444620003c7565b500290565b613d6380620004596000396000f3fe6080604052600436106103b15760003560e01c80635bb988c9116101e7578063a9059cbb1161010d578063dc44b6a0116100a0578063ee40166e1161006f578063ee40166e14610b1c578063efcc52de14610b32578063f2fde38b14610b48578063f5648a4f14610b6857600080fd5b8063dc44b6a014610a8b578063dd62ed3e14610aa1578063e884f26014610ae7578063ea2f0b3714610afc57600080fd5b8063c5d24189116100dc578063c5d2418914610a2f578063c860795214610a45578063c876d0b914610a5b578063c8c8ebe414610a7557600080fd5b8063a9059cbb1461099e578063b62496f5146109be578063bbc0c742146109ee578063c49b9a8014610a0f57600080fd5b806385ecfd281161018557806395d89b411161015457806395d89b411461091c5780639a7a23d614610949578063a073d37f14610969578063a457c2d71461097e57600080fd5b806385ecfd281461087f57806388790a68146108af57806388f82020146108c55780638da5cb5b146108fe57600080fd5b8063715018a6116101c1578063715018a614610815578063751039fc1461082a5780637571336a1461083f5780638366e79a1461085f57600080fd5b80635bb988c9146107c0578063602bc62b146107e057806370a08231146107f557600080fd5b8063313ce567116102d757806349bd5a5e1161026a57806352390c021161023957806352390c0214610734578063525fa81f146107545780635342acb414610774578063557ed1ba146107ad57600080fd5b806349bd5a5e146106bf5780634a62bb65146106df5780634a74bb02146106fe57806351f205e41461071f57600080fd5b80634047ea3e116102a65780634047ea3e14610649578063437823ec1461065f57806343af92321461067f5780634549b0391461069f57600080fd5b8063313ce567146105cd5780633221c93f146105e95780633685d41914610609578063395093511461062957600080fd5b806318160ddd1161034f57806323b872dd1161031e57806323b872dd1461055757806324171f321461057757806325519cf21461058d5780632d838119146105ad57600080fd5b806318160ddd146104ec5780631d865c301461050b5780631fc851bd1461052b578063200a692d1461054157600080fd5b80630ea1b8bb1161038b5780630ea1b8bb1461044357806310d5de531461046557806313114a9d146104955780631694505e146104b457600080fd5b806301339c21146103bd57806306fdde03146103e7578063095ea7b31461042357600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610b7d565b60405190151581526020015b60405180910390f35b3480156103f357600080fd5b5060408051808201909152600a815269436865656d7320496e7560b01b60208201525b6040516103de91906138fc565b34801561042f57600080fd5b506103d261043e366004613966565b610ea4565b34801561044f57600080fd5b5061046361045e366004613992565b610ebb565b005b34801561047157600080fd5b506103d2610480366004613992565b60216020526000908152604090205460ff1681565b3480156104a157600080fd5b50600e545b6040519081526020016103de565b3480156104c057600080fd5b506024546104d4906001600160a01b031681565b6040516001600160a01b0390911681526020016103de565b3480156104f857600080fd5b506897761759c34d7b26fb601f1b6104a6565b34801561051757600080fd5b506104636105263660046139af565b610f95565b34801561053757600080fd5b506104a6601d5481565b34801561054d57600080fd5b506104a660185481565b34801561056357600080fd5b506103d26105723660046139db565b611078565b34801561058357600080fd5b506104a6601f5481565b34801561059957600080fd5b506104636105a83660046139af565b6110e1565b3480156105b957600080fd5b506104a66105c8366004613a1c565b6111bd565b3480156105d957600080fd5b50604051600981526020016103de565b3480156105f557600080fd5b506004546104d4906001600160a01b031681565b34801561061557600080fd5b50610463610624366004613992565b611241565b34801561063557600080fd5b506103d2610644366004613966565b6113f8565b34801561065557600080fd5b506104a6601e5481565b34801561066b57600080fd5b5061046361067a366004613992565b61142e565b34801561068b57600080fd5b506003546104d4906001600160a01b031681565b3480156106ab57600080fd5b506104a66106ba366004613a43565b6114b3565b3480156106cb57600080fd5b506025546104d4906001600160a01b031681565b3480156106eb57600080fd5b506009546103d290610100900460ff1681565b34801561070a57600080fd5b506025546103d290600160a81b900460ff1681565b34801561072b57600080fd5b5061046361154a565b34801561074057600080fd5b5061046361074f366004613992565b611610565b34801561076057600080fd5b5061046361076f366004613992565b6117fd565b34801561078057600080fd5b506103d261078f366004613992565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156107b957600080fd5b50426104a6565b3480156107cc57600080fd5b506104636107db366004613992565b6118c5565b3480156107ec57600080fd5b506002546104a6565b34801561080157600080fd5b506104a6610810366004613992565b611938565b34801561082157600080fd5b50610463611997565b34801561083657600080fd5b506103d2611a0b565b34801561084b57600080fd5b5061046361085a366004613a73565b611a47565b34801561086b57600080fd5b506103d261087a366004613aa1565b611a9c565b34801561088b57600080fd5b506103d261089a366004613992565b601c6020526000908152604090205460ff1681565b3480156108bb57600080fd5b506104a660195481565b3480156108d157600080fd5b506103d26108e0366004613992565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561090a57600080fd5b506000546001600160a01b03166104d4565b34801561092857600080fd5b5060408051808201909152600481526343494e5560e01b6020820152610416565b34801561095557600080fd5b50610463610964366004613a73565b611cc2565b34801561097557600080fd5b506023546104a6565b34801561098a57600080fd5b506103d2610999366004613966565b611d7a565b3480156109aa57600080fd5b506103d26109b9366004613966565b611dc9565b3480156109ca57600080fd5b506103d26109d9366004613992565b60226020526000908152604090205460ff1681565b3480156109fa57600080fd5b506025546103d290600160b01b900460ff1681565b348015610a1b57600080fd5b50610463610a2a366004613acf565b611dd6565b348015610a3b57600080fd5b506104a660175481565b348015610a5157600080fd5b506104a6601a5481565b348015610a6757600080fd5b506009546103d29060ff1681565b348015610a8157600080fd5b506104a660205481565b348015610a9757600080fd5b506104a660165481565b348015610aad57600080fd5b506104a6610abc366004613aa1565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610af357600080fd5b506103d2611e4d565b348015610b0857600080fd5b50610463610b17366004613992565b611e88565b348015610b2857600080fd5b506104a6601b5481565b348015610b3e57600080fd5b506104a660155481565b348015610b5457600080fd5b50610463610b63366004613992565b611f03565b348015610b7457600080fd5b50610463611fed565b600080546001600160a01b03163314610bb15760405162461bcd60e51b8152600401610ba890613aec565b60405180910390fd5b602554600160b01b900460ff1615610c1f5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ba8565b610c276120d3565b737a250d5630b4cf539739df2c5dacb4c659f2488d610c47816001611a47565b602480546001600160a01b0319166001600160a01b038316908117909155610c7d9030906897761759c34d7b26fb601f1b612128565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cb657600080fd5b505afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee9190613b21565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3657600080fd5b505afa158015610d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6e9190613b21565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610db657600080fd5b505af1158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee9190613b21565b602580546001600160a01b0319166001600160a01b03929092169182179055610e18906001611a47565b602554610e2f906001600160a01b0316600161224c565b3031610e895760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ba8565b610e9c610e9530611938565b30316122a7565b600191505090565b6000610eb1338484612128565b5060015b92915050565b6000546001600160a01b03163314610ee55760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b038116610f455760405162461bcd60e51b815260206004820152602160248201527f696e766573744164647265737320616464726573732063616e6e6f74206265206044820152600360fc1b6064820152608401610ba8565b600380546001600160a01b039081166000908152600a6020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b03163314610fbf5760405162461bcd60e51b8152600401610ba890613aec565b60188390556019828155601a82905581610fd98486613b54565b610fe39190613b54565b11156110315760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032352500006044820152606401610ba8565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b600061108584848461236d565b6110d784336110d285604051806060016040528060288152602001613ce1602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612be4565b612128565b5060019392505050565b6000546001600160a01b0316331461110b5760405162461bcd60e51b8152600401610ba890613aec565b601583905560168290556017819055600f816111278486613b54565b6111319190613b54565b111561117f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610ba8565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a7736209060600161106b565b6000600d548211156112245760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ba8565b600061122e612c1e565b905061123a8382612c41565b9392505050565b6000546001600160a01b0316331461126b5760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b0381166000908152600b602052604090205460ff166112d35760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610ba8565b60005b600c548110156113f457816001600160a01b0316600c82815481106112fd576112fd613b6c565b6000918252602090912001546001600160a01b031614156113e257600c805461132890600190613b82565b8154811061133857611338613b6c565b600091825260209091200154600c80546001600160a01b03909216918390811061136457611364613b6c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600b90925220805460ff19169055600c8054806113bc576113bc613b99565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806113ec81613baf565b9150506112d6565b5050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610eb19185906110d29086612c83565b6000546001600160a01b031633146114585760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006897761759c34d7b26fb601f1b8311156115115760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ba8565b8161153057600061152184612ce2565b50939550610eb5945050505050565b600061153b84612ce2565b50929550610eb5945050505050565b6000546001600160a01b031633146115745760405162461bcd60e51b8152600401610ba890613aec565b600061157f30611938565b905061159860646897761759c34d7b26fb601f1b613bca565b8110156116055760405162461bcd60e51b815260206004820152603560248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e206044820152740c49481d1bdad95b9cc81bdb8818dbdb9d1c9858dd605a1b6064820152608401610ba8565b61160d612d31565b50565b6000546001600160a01b0316331461163a5760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b0381166000908152600b602052604090205460ff16156116a35760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ba8565b600c546032906116b4906001613b54565b111561173d5760405162461bcd60e51b815260206004820152604c60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e20496e636c75646520612070726576696f75736c79206578636c7560648201526b3232b21030b2323932b9b99760a11b608482015260a401610ba8565b6001600160a01b03811660009081526005602052604090205415611797576001600160a01b03811660009081526005602052604090205461177d906111bd565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031633146118275760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b03811661188b5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610ba8565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b0381166000818152601c6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600b602052604081205460ff161561197557506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610eb5906111bd565b6000546001600160a01b031633146119c15760405162461bcd60e51b8152600401610ba890613aec565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611a365760405162461bcd60e51b8152600401610ba890613aec565b506009805461ffff19169055600190565b6000546001600160a01b03163314611a715760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611ac75760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b038316611b1d5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ba8565b6001600160a01b038316301415611b765760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610ba8565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611bb857600080fd5b505afa158015611bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf09190613bec565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611c3e57600080fd5b505af1158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c769190613c05565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611cec5760405162461bcd60e51b8152600401610ba890613aec565b6025546001600160a01b0383811691161415611d705760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ba8565b6113f4828261224c565b6000610eb133846110d285604051806060016040528060258152602001613d09602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612be4565b6000610eb133848461236d565b6000546001600160a01b03163314611e005760405162461bcd60e51b8152600401610ba890613aec565b60258054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906114a890831515815260200190565b600080546001600160a01b03163314611e785760405162461bcd60e51b8152600401610ba890613aec565b506009805460ff19169055600190565b6000546001600160a01b03163314611eb25760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016114a8565b6000546001600160a01b03163314611f2d5760405162461bcd60e51b8152600401610ba890613aec565b6001600160a01b038116611f925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120175760405162461bcd60e51b8152600401610ba890613aec565b602554600160b01b900460ff16156120855760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610ba8565b60405160009033903031908381818185875af1925050503d80600081146120c8576040519150601f19603f3d011682016040523d82523d6000602084013e6120cd565b606091505b50505050565b6000546001600160a01b031633146120fd5760405162461bcd60e51b8152600401610ba890613aec565b6025805461ffff60a81b191661010160a81b17905543601b55612123426203f480613b54565b601d55565b6001600160a01b03831661218a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba8565b6001600160a01b0382166121eb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba8565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216600090815260226020908152604080832080548515801560ff19928316811790935560219094529190932080549091169092179091556122995761229982611610565b806113f4576113f482611241565b6024546122bf9030906001600160a01b031684612128565b602480546004805460405163f305d71960e01b8152309281019290925292810185905260006044820181905260648201526001600160a01b0392831660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561232d57600080fd5b505af1158015612341573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123669190613c22565b5050505050565b6001600160a01b0383166123d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ba8565b6001600160a01b0382166124335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba8565b600081116124955760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ba8565b602554600160b01b900460ff16612531576001600160a01b0383166000908152600a602052604090205460ff16806124e557506001600160a01b0382166000908152600a602052604090205460ff165b6125315760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f742061637469766520796574210000000000000000006044820152606401610ba8565b600954610100900460ff16156128be576000546001600160a01b0384811691161480159061256d57506000546001600160a01b03838116911614155b801561258157506001600160a01b03821615155b801561259857506001600160a01b03821661dead14155b80156125ae5750602554600160a01b900460ff16155b156128be576000546001600160a01b038481169116148015906125df57506025546001600160a01b03838116911614155b80156125ec5750601b5443145b1561263b576001600160a01b0382166000818152601c6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60095460ff161561274c576000546001600160a01b0383811691161480159061267257506024546001600160a01b03838116911614155b801561268c57506025546001600160a01b03838116911614155b1561274c576001600160a01b03821660009081526008602052604090205443116127305760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610ba8565b6001600160a01b03821660009081526008602052604090204390555b6001600160a01b03831660009081526022602052604090205460ff16801561278d57506001600160a01b03821660009081526021602052604090205460ff16155b15612807576020548111156128025760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610ba8565b6128be565b6001600160a01b03821660009081526022602052604090205460ff16801561284857506001600160a01b03831660009081526021602052604090205460ff16155b156128be576020548111156128be5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610ba8565b60006128d7601f54601e54612c8390919063ffffffff16565b905060006128e430611938565b60235460255491925082101590600160a01b900460ff161580156129115750602554600160a81b900460ff165b80156129325750602554600090612930906001600160a01b0316611938565b115b801561293e5750600083115b801561296357506001600160a01b0385166000908152600a602052604090205460ff16155b801561298857506001600160a01b0386166000908152600a602052604090205460ff16155b80156129ac57506001600160a01b03851660009081526022602052604090205460ff165b80156129b55750805b156129c2576129c2612d31565b6001600160a01b0386166000908152600a602052604090205460019060ff1680612a0457506001600160a01b0386166000908152600a602052604090205460ff165b15612a16575060036014556000612bcf565b6001600160a01b03871660009081526022602052604090205460ff1615612a6257612a3f612ecf565b601554600f55601754601654612a559190613b54565b6012556001601455612bcf565b6001600160a01b03861660009081526022602052604090205460ff1615612aff57612a8b612ecf565b601854600f55601a54601954612aa19190613b54565b60125560026014556001600160a01b0387166000908152601c602052604090205460ff168015612ad2575042601d54115b15612afa57600f54612ae5906005613c50565b600f55601254612af6906005613c50565b6012555b612bcf565b6001600160a01b0387166000908152601c602052604090205460ff161580612b29575042601d5411155b612bc15760405162461bcd60e51b815260206004820152605f60248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e20444d20612043494e552061646d696e2e00608482015260a401610ba8565b612bc9612ecf565b60036014555b612bdb87878784612efd565b50505050505050565b60008184841115612c085760405162461bcd60e51b8152600401610ba891906138fc565b506000612c158486613b82565b95945050505050565b6000806000612c2b613022565b9092509050612c3a8282612c41565b9250505090565b600061123a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131ca565b600080612c908385613b54565b90508381101561123a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ba8565b6000806000806000806000806000612cf98a6131f8565b9250925092506000806000612d178d8686612d12612c1e565b61323a565b919f909e50909c50959a5093985091965092945050505050565b6025805460ff60a01b1916600160a01b1790556000612d4f30611938565b90506000601f54601e54612d639190613b54565b90506000612d7d6002601e54612c4190919063ffffffff16565b90506000612d8b848361328a565b90503031612d98826132cc565b6000612da530318361328a565b90506000612dc886612dc2601f548561343590919063ffffffff16565b90612c41565b90506000612dd6838361328a565b6000601e819055601f81905560035460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114612e33576040519150601f19603f3d011682016040523d82523d6000602084013e612e38565b606091505b50909150508615612e4d57612e4d87836122a7565b67016345785d8a000030311115612eb7576003546040516001600160a01b0390911690303190600081818185875af1925050503d8060008114612eac576040519150601f19603f3d011682016040523d82523d6000602084013e612eb1565b606091505b50909150505b50506025805460ff60a01b1916905550505050505050565b600f54158015612edf5750601254155b15612ee657565b600f80546010556012805460135560009182905555565b80612f0a57612f0a612ecf565b6001600160a01b0384166000908152600b602052604090205460ff168015612f4b57506001600160a01b0383166000908152600b602052604090205460ff16155b15612f6057612f5b8484846134b4565b61300c565b6001600160a01b0384166000908152600b602052604090205460ff16158015612fa157506001600160a01b0383166000908152600b602052604090205460ff165b15612fb157612f5b8484846135da565b6001600160a01b0384166000908152600b602052604090205460ff168015612ff157506001600160a01b0383166000908152600b602052604090205460ff165b1561300157612f5b848484613683565b61300c8484846136f6565b806120cd576120cd601054600f55601354601255565b600d5460009081906897761759c34d7b26fb601f1b825b600c54811015613187578260056000600c848154811061305b5761305b613b6c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806130c657508160066000600c848154811061309f5761309f613b6c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130e5575050600d54936897761759c34d7b26fb601f1b9350915050565b61312b60056000600c84815481106130ff576130ff613b6c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061328a565b925061317360066000600c848154811061314757613147613b6c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061328a565b91508061317f81613baf565b915050613039565b50600d546131a1906897761759c34d7b26fb601f1b612c41565b8210156131c1575050600d54926897761759c34d7b26fb601f1b92509050565b90939092509050565b600081836131eb5760405162461bcd60e51b8152600401610ba891906138fc565b506000612c158486613bca565b6000806000806132078561373a565b9050600061321486613756565b9050600061322c82613226898661328a565b9061328a565b979296509094509092505050565b60008080806132498886613435565b905060006132578887613435565b905060006132658888613435565b9050600061327782613226868661328a565b939b939a50919850919650505050505050565b600061123a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612be4565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061330157613301613b6c565b6001600160a01b03928316602091820292909201810191909152602454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561335557600080fd5b505afa158015613369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338d9190613b21565b816001815181106133a0576133a0613b6c565b6001600160a01b0392831660209182029290920101526024546133c69130911684612128565b60245460405163791ac94760e01b81526001600160a01b039091169063791ac947906133ff908590600090869030904290600401613c6f565b600060405180830381600087803b15801561341957600080fd5b505af115801561342d573d6000803e3d6000fd5b505050505050565b60008261344457506000610eb5565b60006134508385613c50565b90508261345d8583613bca565b1461123a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ba8565b6000806000806000806134c687612ce2565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506134f8908861328a565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054613527908761328a565b6001600160a01b03808b1660009081526005602052604080822093909355908a16815220546135569086612c83565b6001600160a01b03891660009081526005602052604090205561357881613772565b61358284836138d8565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135c791815260200190565b60405180910390a3505050505050505050565b6000806000806000806135ec87612ce2565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061361e908761328a565b6001600160a01b03808b16600090815260056020908152604080832094909455918b168152600690915220546136549084612c83565b6001600160a01b0389166000908152600660209081526040808320939093556005905220546135569086612c83565b60008060008060008061369587612ce2565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506136c7908861328a565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461361e908761328a565b60008060008060008061370887612ce2565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613527908761328a565b6000610eb56064612dc2600f548561343590919063ffffffff16565b6000610eb56064612dc26012548561343590919063ffffffff16565b600160145414156137e35760125460165461378d9083613c50565b6137979190613bca565b601e60008282546137a89190613b54565b90915550506012546017546137bd9083613c50565b6137c79190613bca565b601f60008282546137d89190613b54565b9091555061384f9050565b6002601454141561384f576012546019546137fe9083613c50565b6138089190613bca565b601e60008282546138199190613b54565b9091555050601254601a5461382e9083613c50565b6138389190613bca565b601f60008282546138499190613b54565b90915550505b6000613859612c1e565b905060006138678383613435565b306000908152600560205260409020549091506138849082612c83565b30600090815260056020908152604080832093909355600b9052205460ff16156138d357306000908152600660205260409020546138c29084612c83565b306000908152600660205260409020555b505050565b600d546138e5908361328a565b600d55600e546138f59082612c83565b600e555050565b600060208083528351808285015260005b818110156139295785810183015185820160400152820161390d565b8181111561393b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461160d57600080fd5b6000806040838503121561397957600080fd5b823561398481613951565b946020939093013593505050565b6000602082840312156139a457600080fd5b813561123a81613951565b6000806000606084860312156139c457600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156139f057600080fd5b83356139fb81613951565b92506020840135613a0b81613951565b929592945050506040919091013590565b600060208284031215613a2e57600080fd5b5035919050565b801515811461160d57600080fd5b60008060408385031215613a5657600080fd5b823591506020830135613a6881613a35565b809150509250929050565b60008060408385031215613a8657600080fd5b8235613a9181613951565b91506020830135613a6881613a35565b60008060408385031215613ab457600080fd5b8235613abf81613951565b91506020830135613a6881613951565b600060208284031215613ae157600080fd5b813561123a81613a35565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613b3357600080fd5b815161123a81613951565b634e487b7160e01b600052601160045260246000fd5b60008219821115613b6757613b67613b3e565b500190565b634e487b7160e01b600052603260045260246000fd5b600082821015613b9457613b94613b3e565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613bc357613bc3613b3e565b5060010190565b600082613be757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613bfe57600080fd5b5051919050565b600060208284031215613c1757600080fd5b815161123a81613a35565b600080600060608486031215613c3757600080fd5b8351925060208401519150604084015190509250925092565b6000816000190483118215151615613c6a57613c6a613b3e565b500290565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613cbf5784516001600160a01b031683529383019391830191600101613c9a565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c65c2c74637b8e06d0c7d562bacf43daa2a615f914b85c6e46809275ed2db27d64736f6c63430008090033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef