0x6080604052600436106102295760003560e01c806375cb1bd111610123578063b6a5d7de116100ab578063f0b37c041161006f578063f0b37c04146106a3578063f2fde38b146106c3578063f887ea40146106e3578063fb11160214610708578063fe9fbb801461072857600080fd5b8063b6a5d7de146105ea578063c1f1b1b51461060a578063d469801614610628578063dd62ed3e14610648578063ea3105d91461068e57600080fd5b8063893d20e8116100f2578063893d20e81461054957806395d89b41146105675780639d9241ec14610594578063a8aa1b31146105aa578063a9059cbb146105ca57600080fd5b806375cb1bd1146104dd57806375f0a874146104fd57806378109e541461051d5780637d1db4a51461053357600080fd5b8063313ce567116101b15780635c85974f116101755780635c85974f146104265780635d0044ca1461044657806367243482146104665780636ddd17131461048657806370a08231146104a757600080fd5b8063313ce56714610387578063364333f4146103a3578063571ac8b0146103b857806359927044146103d857806359b107b91461041057600080fd5b80630f683e90116101f85780630f683e90146102ee57806318160ddd1461030e57806323b872dd14610323578063293230b8146103435780632f54bf6e1461035857600080fd5b80630445b6671461023557806306fdde031461025e578063095ea7b31461029c5780630d075d9c146102cc57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b60205481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5060408051808201909152600c81526b536865706865726420496e7560a01b60208201525b6040516102559190611db0565b3480156102a857600080fd5b506102bc6102b7366004611e16565b610748565b6040519015158152602001610255565b3480156102d857600080fd5b506102ec6102e7366004611e42565b6107b5565b005b3480156102fa57600080fd5b506102ec610309366004611e42565b610874565b34801561031a57600080fd5b5060045461024b565b34801561032f57600080fd5b506102bc61033e366004611e6e565b61091c565b34801561034f57600080fd5b506102ec610a2c565b34801561036457600080fd5b506102bc610373366004611eaf565b6000546001600160a01b0391821691161490565b34801561039357600080fd5b5060405160098152602001610255565b3480156103af57600080fd5b506102ec610ab0565b3480156103c457600080fd5b506102bc6103d3366004611eaf565b610b13565b3480156103e457600080fd5b506019546103f8906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561041c57600080fd5b5061024b600e5481565b34801561043257600080fd5b506102ec610441366004611ecc565b610b21565b34801561045257600080fd5b506102ec610461366004611ecc565b610b75565b34801561047257600080fd5b506102ec610481366004611f31565b610bc9565b34801561049257600080fd5b50601f546102bc90600160a01b900460ff1681565b3480156104b357600080fd5b5061024b6104c2366004611eaf565b6001600160a01b031660009081526007602052604090205490565b3480156104e957600080fd5b506102ec6104f8366004611f9d565b610e44565b34801561050957600080fd5b506018546103f8906001600160a01b031681565b34801561052957600080fd5b5061024b60065481565b34801561053f57600080fd5b5061024b60055481565b34801561055557600080fd5b506000546001600160a01b03166103f8565b34801561057357600080fd5b5060408051808201909152600481526353494e5560e01b602082015261028f565b3480156105a057600080fd5b5061024b60125481565b3480156105b657600080fd5b50601f546103f8906001600160a01b031681565b3480156105d657600080fd5b506102bc6105e5366004611e16565b610ea8565b3480156105f657600080fd5b506102ec610605366004611eaf565b610eda565b34801561061657600080fd5b50601f546001600160a01b03166103f8565b34801561063457600080fd5b506017546103f8906001600160a01b031681565b34801561065457600080fd5b5061024b610663366004611fe8565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561069a57600080fd5b506102ec610f2b565b3480156106af57600080fd5b506102ec6106be366004611eaf565b610f5c565b3480156106cf57600080fd5b506102ec6106de366004611eaf565b610fa7565b3480156106ef57600080fd5b50601e546103f89061010090046001600160a01b031681565b34801561071457600080fd5b506102ec610723366004612036565b61103d565b34801561073457600080fd5b506102bc610743366004611eaf565b6110ad565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107a39086815260200190565b60405180910390a35060015b92915050565b6107be336110ad565b6107e35760405162461bcd60e51b81526004016107da9061207c565b60405180910390fd5b60966107f9826107f3868661118f565b9061118f565b111561080457600080fd5b600b839055600c829055600d819055600f54610820908461118f565b601355601054610830908361118f565b601455601154610840908261118f565b601555610851816107f3858561118f565b600e5560155460135460145461086c92916107f3919061118f565b601655505050565b61087d336110ad565b6108995760405162461bcd60e51b81526004016107da9061207c565b60966108a9826107f3868661118f565b11156108b457600080fd5b600f83905560108290556011819055600b546108d0908461118f565b601355600c546108e0908361118f565b601455600d546108f0908261118f565b601555610901816107f3858561118f565b60125560155460135460145461086c92916107f3919061118f565b60006001600160a01b0384166109445760405162461bcd60e51b81526004016107da906120a1565b6001600160a01b03831661096a5760405162461bcd60e51b81526004016107da906120e6565b6004546001600160a01b038516600090815260086020908152604080832033845290915290205414610a17576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526008825283812033825290915291909120546109f29184906111ee565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610a22848484611228565b90505b9392505050565b6000546001600160a01b03163314610a565760405162461bcd60e51b81526004016107da90612129565b601b54610100900460ff1615610a6b57600080fd5b601b805461ffff1916610100179055604051600081527f2b27db57e94e474754b17ad26b358efda13cbcf4a9bbbc7ec92de2926a941f349060200160405180910390a1565b60185460405147916000916001600160a01b0390911690620186a090849084818181858888f193505050503d8060008114610b07576040519150601f19603f3d011682016040523d82523d6000602084013e610b0c565b606091505b5050505050565b60006107af82600454610748565b610b2a336110ad565b610b465760405162461bcd60e51b81526004016107da9061207c565b600a811015610b5457600080fd5b6103e881600454610b65919061215f565b610b6f9190612176565b60055550565b610b7e336110ad565b610b9a5760405162461bcd60e51b81526004016107da9061207c565b600a811015610ba857600080fd5b6103e881600454610bb9919061215f565b610bc39190612176565b60065550565b6000546001600160a01b03163314610bf35760405162461bcd60e51b81526004016107da90612129565b6000838214610c555760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b60648201526084016107da565b60005b84811015610cac576000848483818110610c7457610c74612198565b90506020020135633b9aca00610c8a919061215f565b9050610c9681846121ae565b9250508080610ca4906121c1565b915050610c58565b5033600090815260076020526040902054811115610d0c5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320746f2061697264726f700000000060448201526064016107da565b60005b84811015610e3c576000848483818110610d2b57610d2b612198565b90506020020135633b9aca00610d41919061215f565b90508060076000898986818110610d5a57610d5a612198565b9050602002016020810190610d6f9190611eaf565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610d9e91906121ae565b90915550503360009081526007602052604081208054839290610dc29084906121da565b909155508790508683818110610dda57610dda612198565b9050602002016020810190610def9190611eaf565b6001600160a01b0316336001600160a01b031660008051602061238083398151915283604051610e2191815260200190565b60405180910390a35080610e34816121c1565b915050610d0f565b505050505050565b610e4d336110ad565b610e695760405162461bcd60e51b81526004016107da9061207c565b601880546001600160a01b039485166001600160a01b031991821617909155601780549385169382169390931790925560198054919093169116179055565b60008054336001600160a01b0390911603610ecf57610ec833848461152c565b90506107af565b610ec8338484611228565b6000546001600160a01b03163314610f045760405162461bcd60e51b81526004016107da90612129565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610f34336110ad565b610f505760405162461bcd60e51b81526004016107da9061207c565b601e805460ff19169055565b6000546001600160a01b03163314610f865760405162461bcd60e51b81526004016107da90612129565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314610fd15760405162461bcd60e51b81526004016107da90612129565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b611046336110ad565b6110625760405162461bcd60e51b81526004016107da9061207c565b601f805460ff60a01b1916600160a01b861515021790556110856009600a6122d1565b61108f908461215f565b6020556021919091556022805460ff19169115159190911790555050565b6001600160a01b031660009081526001602052604090205460ff1690565b6000826000036110dd575060006107af565b60006110e9838561215f565b9050826110f68583612176565b14610a255760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107da565b6000610a2583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611600565b60008061119c83856121ae565b905083811015610a255760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107da565b600081848411156112125760405162461bcd60e51b81526004016107da9190611db0565b50600061121f84866121da565b95945050505050565b60006001600160a01b0384166112505760405162461bcd60e51b81526004016107da906120a1565b6001600160a01b0383166112765760405162461bcd60e51b81526004016107da906120e6565b6001600160a01b03841660009081526001602052604090205460ff16806112b557506001600160a01b03831660009081526001602052604090205460ff165b156112cc576112c584848461152c565b9050610a25565b602254610100900460ff16156112e7576112c584848461152c565b6001600160a01b03841660009081526001602052604090205460ff1615801561132957506001600160a01b03831660009081526001602052604090205460ff16155b1561137c57601b5460ff16151560010361137c5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107da565b601e5460ff16156113925761139284848461162e565b61139c828461180f565b156113aa576113aa826118d2565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600790915291909120546113fc9184906111ee565b6001600160a01b03808616600090815260076020526040812092909255601f548582169116148061143a5750601f546001600160a01b038681169116145b611444578261144f565b61144f858585611cbc565b6001600160a01b038516600090815260076020526040902054909150611475908261118f565b6001600160a01b03808616600090815260076020526040902091909155601f54868216911614806114b35750601f546001600160a01b038581169116145b80156114c857506001600160a01b0384163014155b156114e6576001601a60008282546114e091906121ae565b90915550505b836001600160a01b0316856001600160a01b03166000805160206123808339815191528360405161151991815260200190565b60405180910390a3506001949350505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260079091529182205461157d9184906111ee565b6001600160a01b0380861660009081526007602052604080822093909355908516815220546115ac908361118f565b6001600160a01b038085166000818152600760205260409081902093909355915190861690600080516020612380833981519152906115ee9086815260200190565b60405180910390a35060019392505050565b600081836116215760405162461bcd60e51b81526004016107da9190611db0565b50600061121f8486612176565b6001600160a01b03831660009081526001602052604090205460ff1615801561166057506001600160a01b0382163014155b801561167557506001600160a01b0383163014155b801561168f57506002546001600160a01b03838116911614155b80156116a95750601f546001600160a01b03838116911614155b80156116c357506018546001600160a01b03838116911614155b80156116dd57506017546001600160a01b03838116911614155b1561177e576001600160a01b03821660009081526007602052604090205460065461170883836121ae565b111561177c5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016107da565b505b600554811115806117a757506001600160a01b0383166000908152600a602052604090205460ff165b806117ca57506001600160a01b0382166000908152600a602052604090205460ff165b61180a5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107da565b505050565b6000804261182a601c54601d5461118f90919063ffffffff16565b601f54911191506001600160a01b0384811691161480156118485750805b801561185c5750602254610100900460ff16155b80156118715750601f54600160a01b900460ff165b8015611890575060208054306000908152600790925260409091205410155b80156118ca57506118b760646118b1602154876110cb90919063ffffffff16565b9061114d565b3060009081526007602052604090205410155b949350505050565b6022805461ff001981166101001790915560009060ff166118f55760205461190f565b61190f60646118b1602154856110cb90919063ffffffff16565b90506020548111611924575060205480611926565b805b5060008060145411611939576000611959565b61195960026118b16016546118b1601454876110cb90919063ffffffff16565b905060006119678383611d6e565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106119a1576119a1612198565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106119e9576119e9612198565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b815247926101009092049091169063791ac94790611a389086906000908790309042906004016122e0565b600060405180830381600087803b158015611a5257600080fd5b505af1158015611a66573d6000803e3d6000fd5b50505050600080611a808347611d6e90919063ffffffff16565b905060008060145411611a9557601654611ab0565b601454611ab090611aa790600261114d565b60165490611d6e565b60155490915015611b38576000611ad6826118b1601554866110cb90919063ffffffff16565b6019546040519192506001600160a01b031690620186a09083906000818181858888f193505050503d8060008114611b2a576040519150601f19603f3d011682016040523d82523d6000602084013e611b2f565b606091505b50600095505050505b8615611c39576000611b5e60026118b1846118b1601454886110cb90919063ffffffff16565b601e5460175460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350610100909104169063f305d71990839060c40160606040518083038185885af1158015611bd6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bfb9190612351565b505060408051838152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a1505b60135415611ca25760185460405147916001600160a01b031690620186a09083906000818181858888f193505050503d8060008114611c94576040519150601f19603f3d011682016040523d82523d6000602084013e611c99565b606091505b50600095505050505b505042601d5550506022805461ff00191690555050505050565b601f5460009081906001600160a01b03858116911614611cde57600e54611ce2565b6012545b90506000611cf66103e86118b186856110cb565b30600090815260076020526040902054909150611d13908261118f565b30600081815260076020526040908190209290925590516001600160a01b0388169060008051602061238083398151915290611d529085815260200190565b60405180910390a3611d648482611d6e565b9695505050505050565b6000610a2583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506111ee565b600060208083528351808285015260005b81811015611ddd57858101830151858201604001528201611dc1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611e1357600080fd5b50565b60008060408385031215611e2957600080fd5b8235611e3481611dfe565b946020939093013593505050565b600080600060608486031215611e5757600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611e8357600080fd5b8335611e8e81611dfe565b92506020840135611e9e81611dfe565b929592945050506040919091013590565b600060208284031215611ec157600080fd5b8135610a2581611dfe565b600060208284031215611ede57600080fd5b5035919050565b60008083601f840112611ef757600080fd5b50813567ffffffffffffffff811115611f0f57600080fd5b6020830191508360208260051b8501011115611f2a57600080fd5b9250929050565b60008060008060408587031215611f4757600080fd5b843567ffffffffffffffff80821115611f5f57600080fd5b611f6b88838901611ee5565b90965094506020870135915080821115611f8457600080fd5b50611f9187828801611ee5565b95989497509550505050565b600080600060608486031215611fb257600080fd5b8335611fbd81611dfe565b92506020840135611fcd81611dfe565b91506040840135611fdd81611dfe565b809150509250925092565b60008060408385031215611ffb57600080fd5b823561200681611dfe565b9150602083013561201681611dfe565b809150509250929050565b8035801515811461203157600080fd5b919050565b6000806000806080858703121561204c57600080fd5b61205585612021565b9350602085013592506040850135915061207160608601612021565b905092959194509250565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107af576107af612149565b60008261219357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b808201808211156107af576107af612149565b6000600182016121d3576121d3612149565b5060010190565b818103818111156107af576107af612149565b600181815b8085111561222857816000190482111561220e5761220e612149565b8085161561221b57918102915b93841c93908002906121f2565b509250929050565b60008261223f575060016107af565b8161224c575060006107af565b8160018114612262576002811461226c57612288565b60019150506107af565b60ff84111561227d5761227d612149565b50506001821b6107af565b5060208310610133831016604e8410600b84101617156122ab575081810a6107af565b6122b583836121ed565b80600019048211156122c9576122c9612149565b029392505050565b6000610a2560ff841683612230565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123305784516001600160a01b03168352938301939183019160010161230b565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561236657600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122029f3766e797bae48926a462a3d8471c6e2f7d3fe83a23bfb7842d7712de33a2d64736f6c63430008110033
0x6080604052600280546001600160a01b031990811661dead17909155600380549091169055620000326009600a620007cc565b6200004190620f4240620007dd565b6004556200007b6064620000676002600454620004cc60201b620010cb1790919060201c565b6200056360201b6200114d1790919060201c565b600555620000a16064620000676002600454620004cc60201b620010cb1790919060201c565b6006556014600b55600a600c55600a600d55620000ec600d54620000d8600c54600b54620005ad60201b6200118f1790919060201c565b620005ad60201b6200118f1790919060201c565b600e556014600f55600a601055600a60115562000123601154620000d8601054600f54620005ad60201b6200118f1790919060201c565b60125562000144600f54600b54620005ad60201b6200118f1790919060201c565b60135562000165601054600c54620005ad60201b6200118f1790919060201c565b60145562000186601154600d54620005ad60201b6200118f1790919060201c565b601555620001ae601554620000d8601354601454620005ad60201b6200118f1790919060201c565b6016556001601a819055601b805461ffff191682179055601c819055601e805460ff19169091179055601f8054600160a01b60ff60a01b199091161790556004546200021290620186a0906200006790600a620004cc602090811b620010cb17901c565b60205560286021556022805460ff191660011790553480156200023457600080fd5b50600080546001600160a01b031916339081178255815260016020818152604092839020805460ff1916909217909155601e8054747a250d5630b4cf539739df2c5dacb4c659f2488d00610100600160a81b03199091161790819055825163c45a015560e01b815292516101009091046001600160a01b03169263c45a01559260048083019391928290030181865afa158015620002d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fc9190620007f7565b6040516364e329cb60e11b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201523060248201526001600160a01b03919091169063c9c65396906044016020604051808303816000875af11580156200035f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003859190620007f7565b601f80546001600160a01b039283166001600160a01b03199182161790915560048054306000908152600860209081526040808320601e8054610100908190048a1686529184528285209590955533845260098352818420805460ff199081166001908117909255600a90945291909320805490921617905560178054851673b196eb57cf174fe67abc25d0cec5d7519d6a70cb90811790915560188054861673dd87ed7984a5ab6f631cc9c50f339a372c1ed06e17905560198054909516179093555490546200045e93929091049091169062000610565b50601f546004546200047a916001600160a01b03169062000610565b5060045433600081815260076020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620008ab565b600082600003620004e0575060006200055d565b6000620004ee8385620007dd565b905082620004fd858362000822565b146200055a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200055a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200067d60201b60201c565b600080620005bc838562000845565b9050838110156200055a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000551565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906200066c9086815260200190565b60405180910390a350600192915050565b60008183620006a15760405162461bcd60e51b81526004016200055191906200085b565b506000620006b0848662000822565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000710578160001904821115620006f457620006f4620006b9565b808516156200070257918102915b93841c9390800290620006d4565b509250929050565b60008262000729575060016200055d565b8162000738575060006200055d565b81600181146200075157600281146200075c576200077c565b60019150506200055d565b60ff841115620007705762000770620006b9565b50506001821b6200055d565b5060208310610133831016604e8410600b8410161715620007a1575081810a6200055d565b620007ad8383620006cf565b8060001904821115620007c457620007c4620006b9565b029392505050565b60006200055a60ff84168362000718565b80820281158282048414176200055d576200055d620006b9565b6000602082840312156200080a57600080fd5b81516001600160a01b03811681146200055a57600080fd5b6000826200084057634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200055d576200055d620006b9565b600060208083528351808285015260005b818110156200088a578581018301518582016040015282016200086c565b506000604082860101526040601f19601f8301168501019250505092915050565b6123d580620008bb6000396000f3fe6080604052600436106102295760003560e01c806375cb1bd111610123578063b6a5d7de116100ab578063f0b37c041161006f578063f0b37c04146106a3578063f2fde38b146106c3578063f887ea40146106e3578063fb11160214610708578063fe9fbb801461072857600080fd5b8063b6a5d7de146105ea578063c1f1b1b51461060a578063d469801614610628578063dd62ed3e14610648578063ea3105d91461068e57600080fd5b8063893d20e8116100f2578063893d20e81461054957806395d89b41146105675780639d9241ec14610594578063a8aa1b31146105aa578063a9059cbb146105ca57600080fd5b806375cb1bd1146104dd57806375f0a874146104fd57806378109e541461051d5780637d1db4a51461053357600080fd5b8063313ce567116101b15780635c85974f116101755780635c85974f146104265780635d0044ca1461044657806367243482146104665780636ddd17131461048657806370a08231146104a757600080fd5b8063313ce56714610387578063364333f4146103a3578063571ac8b0146103b857806359927044146103d857806359b107b91461041057600080fd5b80630f683e90116101f85780630f683e90146102ee57806318160ddd1461030e57806323b872dd14610323578063293230b8146103435780632f54bf6e1461035857600080fd5b80630445b6671461023557806306fdde031461025e578063095ea7b31461029c5780630d075d9c146102cc57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b60205481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5060408051808201909152600c81526b536865706865726420496e7560a01b60208201525b6040516102559190611db0565b3480156102a857600080fd5b506102bc6102b7366004611e16565b610748565b6040519015158152602001610255565b3480156102d857600080fd5b506102ec6102e7366004611e42565b6107b5565b005b3480156102fa57600080fd5b506102ec610309366004611e42565b610874565b34801561031a57600080fd5b5060045461024b565b34801561032f57600080fd5b506102bc61033e366004611e6e565b61091c565b34801561034f57600080fd5b506102ec610a2c565b34801561036457600080fd5b506102bc610373366004611eaf565b6000546001600160a01b0391821691161490565b34801561039357600080fd5b5060405160098152602001610255565b3480156103af57600080fd5b506102ec610ab0565b3480156103c457600080fd5b506102bc6103d3366004611eaf565b610b13565b3480156103e457600080fd5b506019546103f8906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561041c57600080fd5b5061024b600e5481565b34801561043257600080fd5b506102ec610441366004611ecc565b610b21565b34801561045257600080fd5b506102ec610461366004611ecc565b610b75565b34801561047257600080fd5b506102ec610481366004611f31565b610bc9565b34801561049257600080fd5b50601f546102bc90600160a01b900460ff1681565b3480156104b357600080fd5b5061024b6104c2366004611eaf565b6001600160a01b031660009081526007602052604090205490565b3480156104e957600080fd5b506102ec6104f8366004611f9d565b610e44565b34801561050957600080fd5b506018546103f8906001600160a01b031681565b34801561052957600080fd5b5061024b60065481565b34801561053f57600080fd5b5061024b60055481565b34801561055557600080fd5b506000546001600160a01b03166103f8565b34801561057357600080fd5b5060408051808201909152600481526353494e5560e01b602082015261028f565b3480156105a057600080fd5b5061024b60125481565b3480156105b657600080fd5b50601f546103f8906001600160a01b031681565b3480156105d657600080fd5b506102bc6105e5366004611e16565b610ea8565b3480156105f657600080fd5b506102ec610605366004611eaf565b610eda565b34801561061657600080fd5b50601f546001600160a01b03166103f8565b34801561063457600080fd5b506017546103f8906001600160a01b031681565b34801561065457600080fd5b5061024b610663366004611fe8565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561069a57600080fd5b506102ec610f2b565b3480156106af57600080fd5b506102ec6106be366004611eaf565b610f5c565b3480156106cf57600080fd5b506102ec6106de366004611eaf565b610fa7565b3480156106ef57600080fd5b50601e546103f89061010090046001600160a01b031681565b34801561071457600080fd5b506102ec610723366004612036565b61103d565b34801561073457600080fd5b506102bc610743366004611eaf565b6110ad565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107a39086815260200190565b60405180910390a35060015b92915050565b6107be336110ad565b6107e35760405162461bcd60e51b81526004016107da9061207c565b60405180910390fd5b60966107f9826107f3868661118f565b9061118f565b111561080457600080fd5b600b839055600c829055600d819055600f54610820908461118f565b601355601054610830908361118f565b601455601154610840908261118f565b601555610851816107f3858561118f565b600e5560155460135460145461086c92916107f3919061118f565b601655505050565b61087d336110ad565b6108995760405162461bcd60e51b81526004016107da9061207c565b60966108a9826107f3868661118f565b11156108b457600080fd5b600f83905560108290556011819055600b546108d0908461118f565b601355600c546108e0908361118f565b601455600d546108f0908261118f565b601555610901816107f3858561118f565b60125560155460135460145461086c92916107f3919061118f565b60006001600160a01b0384166109445760405162461bcd60e51b81526004016107da906120a1565b6001600160a01b03831661096a5760405162461bcd60e51b81526004016107da906120e6565b6004546001600160a01b038516600090815260086020908152604080832033845290915290205414610a17576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526008825283812033825290915291909120546109f29184906111ee565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610a22848484611228565b90505b9392505050565b6000546001600160a01b03163314610a565760405162461bcd60e51b81526004016107da90612129565b601b54610100900460ff1615610a6b57600080fd5b601b805461ffff1916610100179055604051600081527f2b27db57e94e474754b17ad26b358efda13cbcf4a9bbbc7ec92de2926a941f349060200160405180910390a1565b60185460405147916000916001600160a01b0390911690620186a090849084818181858888f193505050503d8060008114610b07576040519150601f19603f3d011682016040523d82523d6000602084013e610b0c565b606091505b5050505050565b60006107af82600454610748565b610b2a336110ad565b610b465760405162461bcd60e51b81526004016107da9061207c565b600a811015610b5457600080fd5b6103e881600454610b65919061215f565b610b6f9190612176565b60055550565b610b7e336110ad565b610b9a5760405162461bcd60e51b81526004016107da9061207c565b600a811015610ba857600080fd5b6103e881600454610bb9919061215f565b610bc39190612176565b60065550565b6000546001600160a01b03163314610bf35760405162461bcd60e51b81526004016107da90612129565b6000838214610c555760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b60648201526084016107da565b60005b84811015610cac576000848483818110610c7457610c74612198565b90506020020135633b9aca00610c8a919061215f565b9050610c9681846121ae565b9250508080610ca4906121c1565b915050610c58565b5033600090815260076020526040902054811115610d0c5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320746f2061697264726f700000000060448201526064016107da565b60005b84811015610e3c576000848483818110610d2b57610d2b612198565b90506020020135633b9aca00610d41919061215f565b90508060076000898986818110610d5a57610d5a612198565b9050602002016020810190610d6f9190611eaf565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610d9e91906121ae565b90915550503360009081526007602052604081208054839290610dc29084906121da565b909155508790508683818110610dda57610dda612198565b9050602002016020810190610def9190611eaf565b6001600160a01b0316336001600160a01b031660008051602061238083398151915283604051610e2191815260200190565b60405180910390a35080610e34816121c1565b915050610d0f565b505050505050565b610e4d336110ad565b610e695760405162461bcd60e51b81526004016107da9061207c565b601880546001600160a01b039485166001600160a01b031991821617909155601780549385169382169390931790925560198054919093169116179055565b60008054336001600160a01b0390911603610ecf57610ec833848461152c565b90506107af565b610ec8338484611228565b6000546001600160a01b03163314610f045760405162461bcd60e51b81526004016107da90612129565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610f34336110ad565b610f505760405162461bcd60e51b81526004016107da9061207c565b601e805460ff19169055565b6000546001600160a01b03163314610f865760405162461bcd60e51b81526004016107da90612129565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314610fd15760405162461bcd60e51b81526004016107da90612129565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b611046336110ad565b6110625760405162461bcd60e51b81526004016107da9061207c565b601f805460ff60a01b1916600160a01b861515021790556110856009600a6122d1565b61108f908461215f565b6020556021919091556022805460ff19169115159190911790555050565b6001600160a01b031660009081526001602052604090205460ff1690565b6000826000036110dd575060006107af565b60006110e9838561215f565b9050826110f68583612176565b14610a255760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107da565b6000610a2583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611600565b60008061119c83856121ae565b905083811015610a255760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107da565b600081848411156112125760405162461bcd60e51b81526004016107da9190611db0565b50600061121f84866121da565b95945050505050565b60006001600160a01b0384166112505760405162461bcd60e51b81526004016107da906120a1565b6001600160a01b0383166112765760405162461bcd60e51b81526004016107da906120e6565b6001600160a01b03841660009081526001602052604090205460ff16806112b557506001600160a01b03831660009081526001602052604090205460ff165b156112cc576112c584848461152c565b9050610a25565b602254610100900460ff16156112e7576112c584848461152c565b6001600160a01b03841660009081526001602052604090205460ff1615801561132957506001600160a01b03831660009081526001602052604090205460ff16155b1561137c57601b5460ff16151560010361137c5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107da565b601e5460ff16156113925761139284848461162e565b61139c828461180f565b156113aa576113aa826118d2565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600790915291909120546113fc9184906111ee565b6001600160a01b03808616600090815260076020526040812092909255601f548582169116148061143a5750601f546001600160a01b038681169116145b611444578261144f565b61144f858585611cbc565b6001600160a01b038516600090815260076020526040902054909150611475908261118f565b6001600160a01b03808616600090815260076020526040902091909155601f54868216911614806114b35750601f546001600160a01b038581169116145b80156114c857506001600160a01b0384163014155b156114e6576001601a60008282546114e091906121ae565b90915550505b836001600160a01b0316856001600160a01b03166000805160206123808339815191528360405161151991815260200190565b60405180910390a3506001949350505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260079091529182205461157d9184906111ee565b6001600160a01b0380861660009081526007602052604080822093909355908516815220546115ac908361118f565b6001600160a01b038085166000818152600760205260409081902093909355915190861690600080516020612380833981519152906115ee9086815260200190565b60405180910390a35060019392505050565b600081836116215760405162461bcd60e51b81526004016107da9190611db0565b50600061121f8486612176565b6001600160a01b03831660009081526001602052604090205460ff1615801561166057506001600160a01b0382163014155b801561167557506001600160a01b0383163014155b801561168f57506002546001600160a01b03838116911614155b80156116a95750601f546001600160a01b03838116911614155b80156116c357506018546001600160a01b03838116911614155b80156116dd57506017546001600160a01b03838116911614155b1561177e576001600160a01b03821660009081526007602052604090205460065461170883836121ae565b111561177c5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016107da565b505b600554811115806117a757506001600160a01b0383166000908152600a602052604090205460ff165b806117ca57506001600160a01b0382166000908152600a602052604090205460ff165b61180a5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107da565b505050565b6000804261182a601c54601d5461118f90919063ffffffff16565b601f54911191506001600160a01b0384811691161480156118485750805b801561185c5750602254610100900460ff16155b80156118715750601f54600160a01b900460ff165b8015611890575060208054306000908152600790925260409091205410155b80156118ca57506118b760646118b1602154876110cb90919063ffffffff16565b9061114d565b3060009081526007602052604090205410155b949350505050565b6022805461ff001981166101001790915560009060ff166118f55760205461190f565b61190f60646118b1602154856110cb90919063ffffffff16565b90506020548111611924575060205480611926565b805b5060008060145411611939576000611959565b61195960026118b16016546118b1601454876110cb90919063ffffffff16565b905060006119678383611d6e565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106119a1576119a1612198565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106119e9576119e9612198565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b815247926101009092049091169063791ac94790611a389086906000908790309042906004016122e0565b600060405180830381600087803b158015611a5257600080fd5b505af1158015611a66573d6000803e3d6000fd5b50505050600080611a808347611d6e90919063ffffffff16565b905060008060145411611a9557601654611ab0565b601454611ab090611aa790600261114d565b60165490611d6e565b60155490915015611b38576000611ad6826118b1601554866110cb90919063ffffffff16565b6019546040519192506001600160a01b031690620186a09083906000818181858888f193505050503d8060008114611b2a576040519150601f19603f3d011682016040523d82523d6000602084013e611b2f565b606091505b50600095505050505b8615611c39576000611b5e60026118b1846118b1601454886110cb90919063ffffffff16565b601e5460175460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350610100909104169063f305d71990839060c40160606040518083038185885af1158015611bd6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bfb9190612351565b505060408051838152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a1505b60135415611ca25760185460405147916001600160a01b031690620186a09083906000818181858888f193505050503d8060008114611c94576040519150601f19603f3d011682016040523d82523d6000602084013e611c99565b606091505b50600095505050505b505042601d5550506022805461ff00191690555050505050565b601f5460009081906001600160a01b03858116911614611cde57600e54611ce2565b6012545b90506000611cf66103e86118b186856110cb565b30600090815260076020526040902054909150611d13908261118f565b30600081815260076020526040908190209290925590516001600160a01b0388169060008051602061238083398151915290611d529085815260200190565b60405180910390a3611d648482611d6e565b9695505050505050565b6000610a2583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506111ee565b600060208083528351808285015260005b81811015611ddd57858101830151858201604001528201611dc1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611e1357600080fd5b50565b60008060408385031215611e2957600080fd5b8235611e3481611dfe565b946020939093013593505050565b600080600060608486031215611e5757600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611e8357600080fd5b8335611e8e81611dfe565b92506020840135611e9e81611dfe565b929592945050506040919091013590565b600060208284031215611ec157600080fd5b8135610a2581611dfe565b600060208284031215611ede57600080fd5b5035919050565b60008083601f840112611ef757600080fd5b50813567ffffffffffffffff811115611f0f57600080fd5b6020830191508360208260051b8501011115611f2a57600080fd5b9250929050565b60008060008060408587031215611f4757600080fd5b843567ffffffffffffffff80821115611f5f57600080fd5b611f6b88838901611ee5565b90965094506020870135915080821115611f8457600080fd5b50611f9187828801611ee5565b95989497509550505050565b600080600060608486031215611fb257600080fd5b8335611fbd81611dfe565b92506020840135611fcd81611dfe565b91506040840135611fdd81611dfe565b809150509250925092565b60008060408385031215611ffb57600080fd5b823561200681611dfe565b9150602083013561201681611dfe565b809150509250929050565b8035801515811461203157600080fd5b919050565b6000806000806080858703121561204c57600080fd5b61205585612021565b9350602085013592506040850135915061207160608601612021565b905092959194509250565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107af576107af612149565b60008261219357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b808201808211156107af576107af612149565b6000600182016121d3576121d3612149565b5060010190565b818103818111156107af576107af612149565b600181815b8085111561222857816000190482111561220e5761220e612149565b8085161561221b57918102915b93841c93908002906121f2565b509250929050565b60008261223f575060016107af565b8161224c575060006107af565b8160018114612262576002811461226c57612288565b60019150506107af565b60ff84111561227d5761227d612149565b50506001821b6107af565b5060208310610133831016604e8410600b84101617156122ab575081810a6107af565b6122b583836121ed565b80600019048211156122c9576122c9612149565b029392505050565b6000610a2560ff841683612230565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123305784516001600160a01b03168352938301939183019160010161230b565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561236657600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122029f3766e797bae48926a462a3d8471c6e2f7d3fe83a23bfb7842d7712de33a2d64736f6c63430008110033