0x608060405234801561001057600080fd5b506115b2806100206000396000f3fe6080604052600436106101b65760003560e01c806374cd9f90116100ec57806399fdb3201161008a578063cc99336d11610064578063cc99336d14610538578063d2de16e114610576578063d82e396214610596578063f2fde38b146105b657600080fd5b806399fdb320146104e3578063b88a802f14610503578063c4d66de81461051857600080fd5b806387fbee32116100c657806387fbee32146104585780638b0e9f3f146104855780638da5cb5b1461049b578063966a666c146104b957600080fd5b806374cd9f90146103f5578063750142e61461042257806386f43a411461043857600080fd5b80631fe48fb6116101595780634fbdea4d116101335780634fbdea4d14610390578063500a1564146103a65780635ec2dc8d146103d8578063715018a6146103e057600080fd5b80631fe48fb6146102f55780632a4918771461032b5780633ecba07e1461035857600080fd5b80631095b6d7116101955780631095b6d71461025b57806311d58b2c1461027b57806312290cfb146102a85780631dbb2a22146102d557600080fd5b8062e152f1146101bb57806302ef6c86146101dd5780631057436414610210575b600080fd5b3480156101c757600080fd5b506101db6101d63660046112e2565b6105d6565b005b3480156101e957600080fd5b506101fd6101f836600461130e565b610619565b6040519081526020015b60405180910390f35b34801561021c57600080fd5b5061024b61022b366004611344565b606d60209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610207565b34801561026757600080fd5b506101db610276366004611379565b61071b565b34801561028757600080fd5b506101fd6102963660046113ba565b60696020526000908152604090205481565b3480156102b457600080fd5b506101fd6102c336600461130e565b606c6020526000908152604090205481565b3480156102e157600080fd5b506101db6102f03660046113d5565b610737565b34801561030157600080fd5b506101fd61031036600461130e565b6001600160a01b03166000908152606c602052604090205490565b34801561033757600080fd5b506101fd61034636600461130e565b60716020526000908152604090205481565b34801561036457600080fd5b506101fd610373366004611344565b606e60209081526000928352604080842090915290825290205481565b34801561039c57600080fd5b506101fd60685481565b3480156103b257600080fd5b506065546001600160a01b03165b6040516001600160a01b039091168152602001610207565b6101db61091b565b3480156103ec57600080fd5b506101db61092d565b34801561040157600080fd5b506101fd6104103660046113ba565b606b6020526000908152604090205481565b34801561042e57600080fd5b506101fd60675481565b34801561044457600080fd5b506101db6104533660046113d5565b610941565b34801561046457600080fd5b506101fd6104733660046113ba565b606a6020526000908152604090205481565b34801561049157600080fd5b506101fd60665481565b3480156104a757600080fd5b506033546001600160a01b03166103c0565b3480156104c557600080fd5b506104ce610b87565b60405163ffffffff9091168152602001610207565b3480156104ef57600080fd5b506065546103c0906001600160a01b031681565b34801561050f57600080fd5b506101db610b9b565b34801561052457600080fd5b506101db61053336600461130e565b610c42565b34801561054457600080fd5b506104ce610553366004611344565b606f60209081526000928352604080842090915290825290205463ffffffff1681565b34801561058257600080fd5b506104ce6105913660046112e2565b610d6b565b3480156105a257600080fd5b506101fd6105b136600461130e565b610db4565b3480156105c257600080fd5b506101db6105d136600461130e565b610e5c565b6105de610ed5565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610614573d6000803e3d6000fd5b505050565b600080805b6001600160a01b03841660009081526070602052604090205463ffffffff82161015610714576001600160a01b0384166000908152607060205260408120805463ffffffff8416908110610674576106746113ee565b600091825260208083206008830401546001600160a01b0389168452606f8252604080852060079094166004026101000a90910463ffffffff908116808652939092529092205490925042911611610701576001600160a01b0385166000908152606e6020908152604080832063ffffffff80861685529252909120546106fe91859190610f2f16565b92505b508061070c8161141a565b91505061061e565b5092915050565b610723610ed5565b6106146001600160a01b0384168383610f44565b61073f610b9b565b33816107845760405162461bcd60e51b815260206004820152600f60248201526e30b6b7bab73a1034b9903d32b9379760891b60448201526064015b60405180910390fd5b60006107986065546001600160a01b031690565b6040516323b872dd60e01b81526001600160a01b03848116600483015230602483015260448201869052919250908216906323b872dd906064016020604051808303816000875af11580156107f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610815919061143d565b5060405163095ea7b360e01b8152306004820152600060248201526001600160a01b0382169063095ea7b3906044016020604051808303816000875af1158015610863573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610887919061143d565b506001600160a01b0382166000908152606c60205260409020546108ab9084610f2f565b6001600160a01b0383166000908152606c60205260409020556066546108d19084610f2f565b606655604080516001600160a01b0384168152602081018590527f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d910160405180910390a1505050565b6067546109289034610f2f565b606755565b610935610ed5565b61093f6000610f96565b565b610949610b9b565b33816109885760405162461bcd60e51b815260206004820152600e60248201526d616d6f756e74206973207a65726f60901b604482015260640161077b565b8160665410156109f35760405162461bcd60e51b815260206004820152603060248201527f746f74616c5374616b652073686f756c64206c6172676572207468616e206f7260448201526f08195c5d585b081d1bc8185b5bdd5b9d60821b606482015260840161077b565b6001600160a01b0381166000908152606c6020526040902054821115610a725760405162461bcd60e51b815260206004820152602e60248201527f6d79207374616b652073686f756c64206c6172676572207468616e206f72206560448201526d1c5d585b081d1bc8185b5bdd5b9d60921b606482015260840161077b565b6001600160a01b0381166000908152606c6020526040902054610a959083610fe8565b6001600160a01b0382166000908152606c6020526040902055606654610abb9083610fe8565b6066556065546001600160a01b031660405163a9059cbb60e01b81526001600160a01b03838116600483015260248201859052919091169063a9059cbb906044016020604051808303816000875af1158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f919061143d565b50604080516001600160a01b0383168152602081018490527f79d3df6837cc49ff0e09fd3258e6e45594e0703445bb06825e9d75156eaee8f091015b60405180910390a15050565b6000610b964262015180610ff4565b905090565b336000610ba782610db4565b606854909150610bb79082610f2f565b6068556040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610bf0573d6000803e3d6000fd5b506001600160a01b038216600081815260716020908152604091829020429055815192835282018390527f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72419101610b7b565b600054610100900460ff1615808015610c625750600054600160ff909116105b80610c7c5750303b158015610c7c575060005460ff166001145b610cdf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161077b565b6000805460ff191660011790558015610d02576000805461ff0019166101001790555b610d0a611000565b606580546001600160a01b0319166001600160a01b0384161790558015610d67576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610b7b565b5050565b60706020528160005260406000208181548110610d8757600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6001600160a01b0381166000908152607160205260408120548190610dda904290610fe8565b905062278d00811115610ded575062278d005b606654600003610e005750600092915050565b610e5562278d00610e4983610e4f606654610e49606c60008b6001600160a01b03166001600160a01b03168152602001908152602001600020544761102f90919063ffffffff16565b90610ff4565b9061102f565b9392505050565b610e64610ed5565b6001600160a01b038116610ec95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077b565b610ed281610f96565b50565b6033546001600160a01b0316331461093f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077b565b6000610f3b828461145f565b90505b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261061490849061103b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610f3b8284611472565b6000610f3b8284611485565b600054610100900460ff166110275760405162461bcd60e51b815260040161077b906114a7565b61093f61110d565b6000610f3b82846114f2565b6000611090826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661113d9092919063ffffffff16565b80519091501561061457808060200190518101906110ae919061143d565b6106145760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161077b565b600054610100900460ff166111345760405162461bcd60e51b815260040161077b906114a7565b61093f33610f96565b606061114c8484600085611154565b949350505050565b6060824710156111b55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161077b565b600080866001600160a01b031685876040516111d1919061152d565b60006040518083038185875af1925050503d806000811461120e576040519150601f19603f3d011682016040523d82523d6000602084013e611213565b606091505b50915091506112248783838761122f565b979650505050505050565b6060831561129e578251600003611297576001600160a01b0385163b6112975760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161077b565b508161114c565b61114c83838151156112b35781518083602001fd5b8060405162461bcd60e51b815260040161077b9190611549565b6001600160a01b0381168114610ed257600080fd5b600080604083850312156112f557600080fd5b8235611300816112cd565b946020939093013593505050565b60006020828403121561132057600080fd5b8135610e55816112cd565b803563ffffffff8116811461133f57600080fd5b919050565b6000806040838503121561135757600080fd5b8235611362816112cd565b91506113706020840161132b565b90509250929050565b60008060006060848603121561138e57600080fd5b8335611399816112cd565b925060208401356113a9816112cd565b929592945050506040919091013590565b6000602082840312156113cc57600080fd5b610f3b8261132b565b6000602082840312156113e757600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681810361143357611433611404565b6001019392505050565b60006020828403121561144f57600080fd5b81518015158114610e5557600080fd5b80820180821115610f3e57610f3e611404565b81810381811115610f3e57610f3e611404565b6000826114a257634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8082028115828204841417610f3e57610f3e611404565b60005b8381101561152457818101518382015260200161150c565b50506000910152565b6000825161153f818460208701611509565b9190910192915050565b6020815260008251806020840152611568816040850160208701611509565b601f01601f1916919091016040019291505056fea2646970667358221220cae73515a7893b3293ee1c5c15952bca0db3ccb628dd41c8de86aa32406a8b4e64736f6c63430008110033