0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80638c5143ea11610104578063b36d6919116100a2578063e7cd4a0411610071578063e7cd4a0414610507578063f2fde38b1461052d578063f99031a714610553578063fb7822e114610579576101da565b8063b36d691914610478578063e300b7511461049e578063e4997dc5146104bb578063e5975bdc146104e1576101da565b8063a0748154116100de578063a07481541461041c578063a4d68e7714610442578063a91ee0dc1461044a578063abf410e514610470576101da565b80638c5143ea146103e65780638da5cb5b1461040c5780638f32d59b14610414576101da565b80632d55feaf1161017c578063715018a61161014b578063715018a6146103a857806373dcc5b8146103b05780638456cb59146103d657806388b45046146103de576101da565b80632d55feaf1461033457806358ce34e41461035a5780635c975abb146103985780635e3b474a146103a0576101da565b80631c3101d3116101b85780631c3101d31461027d5780632042e5c2146102a35780632917173a146102c957806329c1f716146102fb576101da565b8063036ebef9146101df5780630ecb93c01461022f57806312a2919814610257575b600080fd5b61021b600480360360808110156101f557600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356105a7565b604080519115158252519081900360200190f35b6102556004803603602081101561024557600080fd5b50356001600160a01b0316610991565b005b6102556004803603602081101561026d57600080fd5b50356001600160a01b0316610acd565b6102556004803603602081101561029357600080fd5b50356001600160a01b0316610b35565b610255600480360360208110156102b957600080fd5b50356001600160a01b0316610ba0565b610255600480360360608110156102df57600080fd5b506001600160a01b038135169060208101359060400135610ce0565b6103186004803603602081101561031157600080fd5b5035610dfb565b604080516001600160a01b039092168252519081900360200190f35b6102556004803603602081101561034a57600080fd5b50356001600160a01b0316610ec5565b6103866004803603604081101561037057600080fd5b506001600160a01b038135169060200135610f2d565b60408051918252519081900360200190f35b61021b610f4a565b610386610f5a565b610255610f60565b610386600480360360208110156103c657600080fd5b50356001600160a01b0316610ff1565b610255611003565b610386611054565b61021b600480360360208110156103fc57600080fd5b50356001600160a01b0316611063565b610318611092565b61021b6110a1565b61021b6004803603602081101561043257600080fd5b50356001600160a01b03166110c5565b6103866110f4565b6102556004803603602081101561046057600080fd5b50356001600160a01b03166110fa565b610318611163565b61021b6004803603602081101561048e57600080fd5b50356001600160a01b0316611172565b610255600480360360208110156104b457600080fd5b5035611187565b610255600480360360208110156104d157600080fd5b50356001600160a01b03166111d0565b610255600480360360208110156104f757600080fd5b50356001600160a01b031661130d565b6102556004803603602081101561051d57600080fd5b50356001600160a01b031661137b565b6102556004803603602081101561054357600080fd5b50356001600160a01b03166114ba565b61021b6004803603602081101561056957600080fd5b50356001600160a01b031661150d565b6102556004803603604081101561058f57600080fd5b506001600160a01b0381358116916020013516611522565b6000336001600160a01b0385166105ef5760405162461bcd60e51b815260040180806020018281038252602e815260200180611e4a602e913960400191505060405180910390fd5b60008411610644576040805162461bcd60e51b815260206004820152601d60248201527f546f6b656e5472616e736665723a20616d6f756e74206973207a65726f000000604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff161561069c5760405162461bcd60e51b8152600401808060200182810382526028815260200180611d346028913960400191505060405180910390fd5b6001600160a01b0386166106e15760405162461bcd60e51b8152600401808060200182810382526021815260200180611d136021913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff168061072057506001600160a01b03851660009081526009602052604090205460ff165b6108755760006107476006546107416007548861176390919063ffffffff16565b906117ac565b905083811461079d576040805162461bcd60e51b815260206004820152601e60248201527f546f6b656e5472616e736665723a20636f737420697320696e76616c69640000604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018790529151918916916323b872dd916064808201926020929091908290030181600087803b1580156107f657600080fd5b505af115801561080a573d6000803e3d6000fd5b505050506040513d602081101561082057600080fd5b505161085d5760405162461bcd60e51b815260040180806020018281038252602f815260200180611d5c602f913960400191505060405180910390fd5b61087387673a3930b739b332b960c11b86611805565b505b856001600160a01b03166323b872dd8287876040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156108dd57600080fd5b505af11580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b50516109445760405162461bcd60e51b815260040180806020018281038252602f815260200180611c6b602f913960400191505060405180910390fd5b83856001600160a01b0316826001600160a01b03167f3844b7075ed6e7d4b61342769cb2b1b325cba410a62932affaa90aee247dadf560405160405180910390a450600195945050505050565b61099a336110c5565b6109d55760405162461bcd60e51b8152600401808060200182810382526025815260200180611df36025913960400191505060405180910390fd5b6001600160a01b038116610a1a5760405162461bcd60e51b8152600401808060200182810382526024815260200180611e786024913960400191505060405180910390fd5b6001600160a01b03811660009081526008602052604090205460ff1615610a725760405162461bcd60e51b815260040180806020018281038252602c815260200180611ce7602c913960400191505060405180910390fd5b6001600160a01b038116600081815260086020908152604091829020805460ff19166001179055815142815291517fdbfeddba9d330348adcf52f97e442dd93686b1f616ac457efa2dd2f138a19d5b9281900390910190a250565b610ad56110a1565b610b14576040805162461bcd60e51b81526020600482018190526024820152600080516020611dd3833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600260205260409020805460ff19169055565b610b3d6110a1565b610b7c576040805162461bcd60e51b81526020600482018190526024820152600080516020611dd3833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b610ba86110a1565b610be7576040805162461bcd60e51b81526020600482018190526024820152600080516020611dd3833981519152604482015290519081900360640190fd5b6001600160a01b038116610c2c5760405162461bcd60e51b8152600401808060200182810382526024815260200180611e786024913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff161515600114610c885760405162461bcd60e51b8152600401808060200182810382526027815260200180611d8b6027913960400191505060405180910390fd5b6001600160a01b038116600081815260096020908152604091829020805460ff19169055815142815291517fa38087a3e461b48c01f959b86ba70f93f31db7b0f87f1bbed5b545501d82c94d9281900390910190a250565b610ce933611063565b610d2f576040805162461bcd60e51b81526020600482015260126024820152711c9bdb194e9b9bdd081c9958da5c1a595b9d60721b604482015290519081900360640190fd5b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b505050506040513d6020811015610da857600080fd5b5051610deb576040805162461bcd60e51b815260206004820152600d60248201526c3937b6329d3a3930b739b332b960991b604482015290519081900360640190fd5b610df68383836118c4565b505050565b6005546040805163ec25982f60e01b815260048101849052905160009283926001600160a01b039091169163ec25982f91602480820192602092909190829003018186803b158015610e4c57600080fd5b505afa158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b505190506001600160a01b038116610ebf5760405162461bcd60e51b8152600401808060200182810382526032815260200180611e186032913960400191505060405180910390fd5b92915050565b610ecd6110a1565b610f0c576040805162461bcd60e51b81526020600482018190526024820152600080516020611dd3833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b600360209081526000928352604080842090915290825290205481565b600554600160a01b900460ff1690565b60075481565b610f686110a1565b610fa7576040805162461bcd60e51b81526020600482018190526024820152600080516020611dd3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60046020526000908152604090205481565b61100b6110a1565b61104a576040805162461bcd60e51b81526020600482018190526024820152600080516020611dd3833981519152604482015290519081900360640190fd5b611052611983565b565b673a3930b739b332b960c11b81565b6001600160a01b03811660009081526002602052604081205460ff16151560011480610ebf5750610ebf6110a1565b6000546001600160a01b031690565b600080546001600160a01b03166110b6611a2e565b6001600160a01b031614905090565b6001600160a01b038116600090815260016020819052604082205460ff1615151480610ebf5750610ebf6110a1565b60065481565b6111026110a1565b611141576040805162461bcd60e51b81526020600482018190526024820152600080516020611dd3833981519152604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031681565b60086020526000908152604090205460ff1681565b611190336110c5565b6111cb5760405162461bcd60e51b8152600401808060200182810382526025815260200180611df36025913960400191505060405180910390fd5b600655565b6111d9336110c5565b6112145760405162461bcd60e51b8152600401808060200182810382526025815260200180611df36025913960400191505060405180910390fd5b6001600160a01b0381166112595760405162461bcd60e51b8152600401808060200182810382526024815260200180611e786024913960400191505060405180910390fd5b6001600160a01b03811660009081526008602052604090205460ff1615156001146112b55760405162461bcd60e51b8152600401808060200182810382526027815260200180611cc06027913960400191505060405180910390fd5b6001600160a01b038116600081815260086020908152604091829020805460ff19169055815142815291517f7edc4cd823ee36c559d96c76022fecea96abe1af904ca0443fe246f70a8bcea89281900390910190a250565b6113156110a1565b611354576040805162461bcd60e51b81526020600482018190526024820152600080516020611dd3833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6113836110a1565b6113c2576040805162461bcd60e51b81526020600482018190526024820152600080516020611dd3833981519152604482015290519081900360640190fd5b6001600160a01b0381166114075760405162461bcd60e51b8152600401808060200182810382526024815260200180611e786024913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff161561145f5760405162461bcd60e51b815260040180806020018281038252602c815260200180611ce7602c913960400191505060405180910390fd5b6001600160a01b038116600081815260096020908152604091829020805460ff19166001179055815142815291517f48323405c6c0efa0904963fe8f484e212d18088eded254e377534dd1040f26f69281900390910190a250565b6114c26110a1565b611501576040805162461bcd60e51b81526020600482018190526024820152600080516020611dd3833981519152604482015290519081900360640190fd5b61150a81611a32565b50565b60096020526000908152604090205460ff1681565b61152b336110c5565b6115665760405162461bcd60e51b8152600401808060200182810382526025815260200180611df36025913960400191505060405180910390fd5b6001600160a01b0381166115ab5760405162461bcd60e51b8152600401808060200182810382526021815260200180611d136021913960400191505060405180910390fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156115fa57600080fd5b505afa15801561160e573d6000803e3d6000fd5b505050506040513d602081101561162457600080fd5b505190508015611728576001600160a01b038216600090815260046020526040902054611652908290611ad2565b9050816001600160a01b031663a9059cbb84836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156116ab57600080fd5b505af11580156116bf573d6000803e3d6000fd5b505050506040513d60208110156116d557600080fd5b5051611728576040805162461bcd60e51b815260206004820152601d60248201527f546f6b656e5472616e736665723a207472616e73666572206572726f72000000604482015290519081900360640190fd5b60405181906001600160a01b038516907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490600090a3505050565b60006117a583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b14565b9392505050565b6000826117bb57506000610ebf565b828202828482816117c857fe5b04146117a55760405162461bcd60e51b8152600401808060200182810382526021815260200180611db26021913960400191505060405180910390fd5b6001600160a01b03831660009081526003602090815260408083208584529091529020546118339082611bb6565b6001600160a01b03841660008181526003602090815260408083208784528252808320949094559181526004909152205461186e9082611bb6565b6001600160a01b038416600081815260046020908152604091829020939093558051848152905185937fb0f41cf026f52c40a21ba9aef99af31acdc604f6f05b5f4d2631c03fc9fe10fd928290030190a3505050565b6001600160a01b03831660009081526003602090815260408083208584529091529020546118f29082611ad2565b6001600160a01b03841660008181526003602090815260408083208784528252808320949094559181526004909152205461192d9082611ad2565b6001600160a01b038416600081815260046020908152604091829020939093558051848152905185937feb8adae4f0812520cfc1cc79f1430bafbe76a2a5e17407be2a0b60b1bb0c13d5928290030190a3505050565b600554600160a01b900460ff16156119d5576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a11611a2e565b604080516001600160a01b039092168252519081900360200190a1565b3390565b6001600160a01b038116611a775760405162461bcd60e51b8152600401808060200182810382526026815260200180611c9a6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006117a583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c10565b60008183611ba05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b65578181015183820152602001611b4d565b50505050905090810190601f168015611b925780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611bac57fe5b0495945050505050565b6000828201838110156117a5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008184841115611c625760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611b65578181015183820152602001611b4d565b50505090039056fe546f6b656e5472616e736665723a206661696c656420746f2073656e6420746f6b656e20746f2074686520757365724f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373546f6b656e5472616e736665723a206973206e6f7420426c61636b4c6973742061646472657373546f6b656e5472616e736665723a206164647265737320697320616c72656164792072656769737465726564546f6b656e5472616e736665723a206973206e6f742077656d697820746f6b656e546f6b656e5472616e736665723a2073656e64657220697320626c61636b206c6973742075736572546f6b656e5472616e736665723a206661696c656420746f2073656e6420746f6b656e20746f20636f6e7472616374546f6b656e5472616e736665723a206973206e6f742057686974654c6973742061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572456469746f72526f6c65203a206d73672073656e646572206973206e6f7420656469746f72416363657373436f6e74726163745265676973747279203a205f6164647220697320746865207a65726f2061646472657373546f6b656e5472616e736665723a20726563697069656e742063616e206e6f742062652061646472657373283029546f6b656e5472616e736665723a20616464726573732069732061646472657373283029a2646970667358221220805b9a4a91cc3be49edba1b3112ebd2ac9e229c7953bd9b0d0e6881d57bae27364736f6c634300060c0033