0x608060405234801561001057600080fd5b5060405161161538038061161583398101604081905261002f916100cc565b600080546001600160a01b0319166001600160a01b0386161790556001839055600282905560648111156100a95760405162461bcd60e51b815260206004820152601360248201527f496e76616c696420626f6e75732076616c756500000000000000000000000000604482015260640160405180910390fd5b5050506001600160a01b0316600090815260046020526040902060649055610117565b600080600080608085870312156100e257600080fd5b84516001600160a01b03811681146100f957600080fd5b60208601516040870151606090970151919890975090945092505050565b6114ef806101266000396000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063c6154f0811610059578063c6154f081461027b578063db8d55f11461029b578063f2fde38b146102c3578063f5778694146102e357600080fd5b80638da5cb5b146101dd578063932fec4014610205578063a48bc25c14610225578063b36dee231461024557600080fd5b80634bd22766116100c65780634bd22766146101805780635905ebaa146101a0578063715018a6146101b357806387943859146101c857600080fd5b806309779838146100f85780631d16c3ee1461011a5780633509aa051461014d57806345e4e7f51461016d575b600080fd5b34801561010457600080fd5b50610118610113366004611000565b610303565b005b34801561012657600080fd5b5061013a610135366004611024565b610343565b6040519081526020015b60405180910390f35b34801561015957600080fd5b50610118610168366004611050565b6103a6565b61011861017b3660046111ac565b6103db565b34801561018c57600080fd5b5061011861019b366004611024565b61056f565b6101186101ae366004611235565b610677565b3480156101bf57600080fd5b506101186108b4565b3480156101d457600080fd5b5060035461013a565b3480156101e957600080fd5b506000546040516001600160a01b039091168152602001610144565b34801561021157600080fd5b506101186102203660046112ad565b610928565b34801561023157600080fd5b506101186102403660046112ee565b610a1a565b34801561025157600080fd5b5061013a610260366004611000565b6001600160a01b031660009081526004602052604090205490565b34801561028757600080fd5b50610118610296366004611307565b610a8a565b3480156102a757600080fd5b5060015460025460408051928352602083019190915201610144565b3480156102cf57600080fd5b506101186102de366004611000565b610b31565b3480156102ef57600080fd5b506101186102fe366004611024565b610b64565b6000546001600160a01b031633146103365760405162461bcd60e51b815260040161032d90611340565b60405180910390fd5b610340814761056f565b50565b60008082600254610354919061138b565b60015461036191906113aa565b6001600160a01b038516600090815260046020526040902054909150606461038982826113c2565b610393908461138b565b61039d91906113d9565b95945050505050565b6000546001600160a01b031633146103d05760405162461bcd60e51b815260040161032d90611340565b600191909155600255565b8251825181146104205760405162461bcd60e51b815260206004820152601060248201526f0a0c2e4c2dae640dcdee840dac2e8c6d60831b604482015260640161032d565b600061042c3383610343565b9050803410156104725760405162461bcd60e51b815260206004820152601160248201527008ccaca40d2e640dcdee840cadcdeeaced607b1b604482015260640161032d565b60005b828110156104e1576104cf33878381518110610493576104936113fb565b60200260200101518784815181106104ad576104ad6113fb565b60200260200101518a6001600160a01b0316610c2b909392919063ffffffff16565b806104d981611411565b915050610475565b506000811180156104f457506000600354115b801561050857506001600160a01b03831615155b801561051d57506001600160a01b0383163314155b156105675760035460009061053383606461138b565b61053d91906113d9565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f15050505050505b505050505050565b6000546001600160a01b031633146105995760405162461bcd60e51b815260040161032d90611340565b6001600160a01b0382166105de5760405162461bcd60e51b815260206004820152600c60248201526b05061796565206973203078360a41b604482015260640161032d565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610614573d6000803e3d6000fd5b50816001600160a01b03166106316000546001600160a01b031690565b6001600160a01b03167f94c0c9648f44e27ff77f68e457219cb803cf319b29a83403156a3ef21747101e8360405161066b91815260200190565b60405180910390a35050565b8251825181146106bc5760405162461bcd60e51b815260206004820152601060248201526f0a0c2e4c2dae640dcdee840dac2e8c6d60831b604482015260640161032d565b3460006106c93384610343565b90508082101561070f5760405162461bcd60e51b815260206004820152601160248201527008ccaca40d2e640dcdee840cadcdeeaced607b1b604482015260640161032d565b61071981836113c2565b915060005b8381101561082757858181518110610738576107386113fb565b60200260200101518361074b91906113c2565b92506000878281518110610761576107616113fb565b60200260200101516001600160a01b0316878381518110610784576107846113fb565b602002602001015160405160006040518083038185875af1925050503d80600081146107cc576040519150601f19603f3d011682016040523d82523d6000602084013e6107d1565b606091505b50509050806108145760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161032d565b508061081f81611411565b91505061071e565b5060008111801561083a57506000600354115b801561084e57506001600160a01b03841615155b801561086357506001600160a01b0384163314155b156105675760035460009061087983606461138b565b61088391906113d9565b6040519091506001600160a01b0386169082156108fc029083906000818181858888f1505050505050505050505050565b6000546001600160a01b031633146108de5760405162461bcd60e51b815260040161032d90611340565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146109525760405162461bcd60e51b815260040161032d90611340565b6001600160a01b0382166109975760405162461bcd60e51b815260206004820152600c60248201526b05061796565206973203078360a41b604482015260640161032d565b826109ac6001600160a01b0382168484610c9c565b836001600160a01b0316836001600160a01b03166109d26000546001600160a01b031690565b6001600160a01b03167f56c1cd1f689399e63bdf3ecfdacdcca785863ed74befc4cfa246c7381e34383085604051610a0c91815260200190565b60405180910390a450505050565b6000546001600160a01b03163314610a445760405162461bcd60e51b815260040161032d90611340565b6064811115610a855760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420626f6e757360981b604482015260640161032d565b600355565b6000546001600160a01b03163314610ab45760405162461bcd60e51b815260040161032d90611340565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1f919061142c565b9050610b2c838383610928565b505050565b6000546001600160a01b03163314610b5b5760405162461bcd60e51b815260040161032d90611340565b61034081610ccc565b6000546001600160a01b03163314610b8e5760405162461bcd60e51b815260040161032d90611340565b6064811115610bd25760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908191a5cd8dbdd5b9d60821b604482015260640161032d565b6001600160a01b03821660008181526004602052604090819020839055517fe35b909b17de5a2876ac73576328cc78b7c94fb590556794cd448aa31dd9496e90610c1f9084815260200190565b60405180910390a25050565b6040516001600160a01b0380851660248301528316604482015260648101829052610c969085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610d8c565b50505050565b6040516001600160a01b038316602482015260448101829052610b2c90849063a9059cbb60e01b90606401610c5f565b6001600160a01b038116610d315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161032d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610de1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610e5e9092919063ffffffff16565b805190915015610b2c5780806020019051810190610dff9190611445565b610b2c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161032d565b6060610e6d8484600085610e75565b949350505050565b606082471015610ed65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161032d565b600080866001600160a01b03168587604051610ef29190611493565b60006040518083038185875af1925050503d8060008114610f2f576040519150601f19603f3d011682016040523d82523d6000602084013e610f34565b606091505b5091509150610f4587838387610f50565b979650505050505050565b60608315610fbc578251610fb5576001600160a01b0385163b610fb55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161032d565b5081610e6d565b610e6d8383815115610fd15781518083602001fd5b8060405162461bcd60e51b815260040161032d91906114af565b6001600160a01b038116811461034057600080fd5b60006020828403121561101257600080fd5b813561101d81610feb565b9392505050565b6000806040838503121561103757600080fd5b823561104281610feb565b946020939093013593505050565b6000806040838503121561106357600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156110b1576110b1611072565b604052919050565b600067ffffffffffffffff8211156110d3576110d3611072565b5060051b60200190565b600082601f8301126110ee57600080fd5b813560206111036110fe836110b9565b611088565b82815260059290921b8401810191818101908684111561112257600080fd5b8286015b8481101561114657803561113981610feb565b8352918301918301611126565b509695505050505050565b600082601f83011261116257600080fd5b813560206111726110fe836110b9565b82815260059290921b8401810191818101908684111561119157600080fd5b8286015b848110156111465780358352918301918301611195565b600080600080608085870312156111c257600080fd5b84356111cd81610feb565b9350602085013567ffffffffffffffff808211156111ea57600080fd5b6111f6888389016110dd565b9450604087013591508082111561120c57600080fd5b5061121987828801611151565b925050606085013561122a81610feb565b939692955090935050565b60008060006060848603121561124a57600080fd5b833567ffffffffffffffff8082111561126257600080fd5b61126e878388016110dd565b9450602086013591508082111561128457600080fd5b5061129186828701611151565b92505060408401356112a281610feb565b809150509250925092565b6000806000606084860312156112c257600080fd5b83356112cd81610feb565b925060208401356112dd81610feb565b929592945050506040919091013590565b60006020828403121561130057600080fd5b5035919050565b6000806040838503121561131a57600080fd5b823561132581610feb565b9150602083013561133581610feb565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156113a5576113a5611375565b500290565b600082198211156113bd576113bd611375565b500190565b6000828210156113d4576113d4611375565b500390565b6000826113f657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141561142557611425611375565b5060010190565b60006020828403121561143e57600080fd5b5051919050565b60006020828403121561145757600080fd5b8151801515811461101d57600080fd5b60005b8381101561148257818101518382015260200161146a565b83811115610c965750506000910152565b600082516114a5818460208701611467565b9190910192915050565b60208152600082518060208401526114ce816040850160208701611467565b601f01601f1916919091016040019291505056fea164736f6c634300080a000a000000000000000000000000d000ffaf421901f5acf62c06d065b7063c88ae68000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a