0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063b187bd2611610066578063b187bd26146101f8578063b5a110111461021b578063bee518a41461022e578063f2fde38b1461026c57600080fd5b80638da5cb5b146101a15780639d2aede5146101bf578063b0f479a1146101d257600080fd5b80632874d8bf116100c85780632874d8bf1461013f5780632b6e5d631461014757806379ba50971461018657806385572ffb1461018e57600080fd5b806301ffc9a7146100ef57806316c38b3c146101175780631892b9061461012c575b600080fd5b6101026100fd366004610b10565b61027f565b60405190151581526020015b60405180910390f35b61012a610125366004610b59565b610318565b005b61012a61013a366004610b98565b61036a565b61012a6103c5565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010e565b61012a610401565b61012a61019c366004610bb3565b610503565b60005473ffffffffffffffffffffffffffffffffffffffff16610161565b61012a6101cd366004610c12565b610588565b7f0000000000000000000000001180be030b7fc11fa2a89d0bda5d4e11559d37a4610161565b60025474010000000000000000000000000000000000000000900460ff16610102565b61012a610229366004610c2d565b6105d7565b60015474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff909116815260200161010e565b61012a61027a366004610c12565b610679565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061031257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b61032061068a565b6002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b61037261068a565b6001805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6103cd61068a565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556103ff600161070b565b565b60015473ffffffffffffffffffffffffffffffffffffffff163314610487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001180be030b7fc11fa2a89d0bda5d4e11559d37a41614610574576040517fd7f7333400000000000000000000000000000000000000000000000000000000815233600482015260240161047e565b61058561058082610e63565b6109c5565b50565b61059061068a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6105df61068a565b6001805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b61068161068a565b61058581610a1b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161047e565b8060011660010361074e576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1610782565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b60008160405160200161079791815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815260a08301825260025473ffffffffffffffffffffffffffffffffffffffff1660c0808501919091528251808503909101815260e08401835283526020808401829052825160008082529181018452919450929182019083610845565b604080518082019091526000808252602082015281526020019060019003908161081e5790505b50815260035473ffffffffffffffffffffffffffffffffffffffff1660208083019190915260408051808301825262030d4090819052815160248082019290925282518082039092018252604401825291820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f97a657c900000000000000000000000000000000000000000000000000000000179052909101526001546040517f96f4e9f90000000000000000000000000000000000000000000000000000000081529192507f0000000000000000000000001180be030b7fc11fa2a89d0bda5d4e11559d37a473ffffffffffffffffffffffffffffffffffffffff16916396f4e9f99161097c917401000000000000000000000000000000000000000090910467ffffffffffffffff16908590600401610f74565b6020604051808303816000875af115801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf9190611086565b50505050565b600081606001518060200190518101906109df9190611086565b60025490915074010000000000000000000000000000000000000000900460ff16610a1757610a17610a1282600161109f565b61070b565b5050565b3373ffffffffffffffffffffffffffffffffffffffff821603610a9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161047e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610b2257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610b5257600080fd5b9392505050565b600060208284031215610b6b57600080fd5b81358015158114610b5257600080fd5b803567ffffffffffffffff81168114610b9357600080fd5b919050565b600060208284031215610baa57600080fd5b610b5282610b7b565b600060208284031215610bc557600080fd5b813567ffffffffffffffff811115610bdc57600080fd5b820160a08185031215610b5257600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610b9357600080fd5b600060208284031215610c2457600080fd5b610b5282610bee565b60008060408385031215610c4057600080fd5b610c4983610b7b565b9150610c5760208401610bee565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610cb257610cb2610c60565b60405290565b60405160a0810167ffffffffffffffff81118282101715610cb257610cb2610c60565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610d2257610d22610c60565b604052919050565b600082601f830112610d3b57600080fd5b813567ffffffffffffffff811115610d5557610d55610c60565b610d8660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610cdb565b818152846020838601011115610d9b57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610dc957600080fd5b8135602067ffffffffffffffff821115610de557610de5610c60565b610df3818360051b01610cdb565b82815260069290921b84018101918181019086841115610e1257600080fd5b8286015b84811015610e585760408189031215610e2f5760008081fd5b610e37610c8f565b610e4082610bee565b81528185013585820152835291830191604001610e16565b509695505050505050565b600060a08236031215610e7557600080fd5b610e7d610cb8565b82358152610e8d60208401610b7b565b6020820152604083013567ffffffffffffffff80821115610ead57600080fd5b610eb936838701610d2a565b60408401526060850135915080821115610ed257600080fd5b610ede36838701610d2a565b60608401526080850135915080821115610ef757600080fd5b50610f0436828601610db8565b60808301525092915050565b6000815180845260005b81811015610f3657602081850181015186830182015201610f1a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6000604067ffffffffffffffff8516835260208181850152845160a083860152610fa160e0860182610f10565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080878403016060880152610fdc8383610f10565b88860151888203830160808a01528051808352908601945060009350908501905b8084101561103c578451805173ffffffffffffffffffffffffffffffffffffffff16835286015186830152938501936001939093019290860190610ffd565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a015295506110788187610f10565b9a9950505050505050505050565b60006020828403121561109857600080fd5b5051919050565b80820180821115610312577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c6343000813000a