0x608060405260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550674563918244f4000060035567016345785d8a00006004553480156100ed57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061264f8061013d6000396000f3fe60806040526004361061010c576000357c01000000000000000000000000000000000000000000000000000000009004806301f602171461010e5780630cf9349d146101395780630d2cbe13146101645780631c692c0b146101a9578063387d9037146101e457806341c0e1b51461020f5780634d61537f146102265780635e83b4631461027d5780636540742f146102dd5780636b5c5f39146103085780638da5cb5b1461035f578063abb8303b146103b6578063b539cd55146103e1578063c10753291461040c578063d6d30a5114610467578063d702087f146104a2578063e1fdb4b4146104f3578063e63ea2811461052e578063f8bb201c14610559578063fbd668a9146105aa575b005b34801561011a57600080fd5b506101236105e5565b6040518082815260200191505060405180910390f35b34801561014557600080fd5b5061014e6105eb565b6040518082815260200191505060405180910390f35b34801561017057600080fd5b506101a76004803603604081101561018757600080fd5b8101908080359060200190929190803590602001909291905050506105f7565b005b3480156101b557600080fd5b506101e2600480360360208110156101cc57600080fd5b8101908080359060200190929190505050610942565b005b3480156101f057600080fd5b506101f9610a36565b6040518082815260200191505060405180910390f35b34801561021b57600080fd5b50610224610a3c565b005b34801561023257600080fd5b5061023b610b60565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102db600480360360c081101561029357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610b86565b005b3480156102e957600080fd5b506102f261148d565b6040518082815260200191505060405180910390f35b34801561031457600080fd5b5061031d611498565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561036b57600080fd5b506103746114be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c257600080fd5b506103cb6114e3565b6040518082815260200191505060405180910390f35b3480156103ed57600080fd5b506103f66114e9565b6040518082815260200191505060405180910390f35b34801561041857600080fd5b506104656004803603604081101561042f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114ef565b005b34801561047357600080fd5b506104a06004803603602081101561048a57600080fd5b8101908080359060200190929190505050611737565b005b3480156104ae57600080fd5b506104f1600480360360208110156104c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611992565b005b3480156104ff57600080fd5b5061052c6004803603602081101561051657600080fd5b8101908080359060200190929190505050611ac0565b005b34801561053a57600080fd5b50610543611d5f565b6040518082815260200191505060405180910390f35b34801561056557600080fd5b506105a86004803603602081101561057c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d65565b005b3480156105b657600080fd5b506105e3600480360360208110156105cd57600080fd5b8101908080359060200190929190505050611e93565b005b6103e881565b67016345785d8a000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e81526020017f6f6e2d63726f75706965722e000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000826040516020018082815260200191505060405160208183030381529060405280519060200120600190049050600060076000838152602001908152602001600020905060008160010160029054906101000a900464ffffffffff1664ffffffffff16905080431115156107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001807f736574746c6542657420696e207468652073616d6520626c6f636b206173207081526020017f6c6163654265742c206f72206265666f72652e0000000000000000000000000081525060400191505060405180910390fd5b60fa81014311151515610887576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f426c6f636b686173682063616e2774206265207175657269656420627920455681526020017f4d2e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b838260000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16141515610930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f446f6573206e6f74206d61746368656420646966666963756c74792e0000000081525060200191505060405180910390fd5b61093b82868661202e565b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8060048190555050565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff1681600101600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610c8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f616c72656164792062657474696e672073616d6520636f6d6d6974206e756d6281526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000349050600187118015610ca1575060648711155b1515610d15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e000081525060200191505060405180910390fd5b662386f26fc100008110158015610d365750693f870857a3e0e38000008111155b1515610daa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416d6f756e742073686f756c642062652077697468696e2072616e67652e000081525060200191505060405180910390fd5b600088118015610dbd5750602860020a88105b1515610e31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d61736b2073686f756c642062652077697468696e2072616e67652e0000000081525060200191505060405180910390fd5b854311151515610ea9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f436f6d6d69742068617320657870697265642e0000000000000000000000000081525060200191505060405180910390fd5b60606040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152509050600081876040516020018083805190602001908083835b602083101515610f1f5780518252602082019150602081019050602083039250610efa565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200192505050604051602081830303815290604052805190602001209050600181601c888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610fbe573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4543445341207369676e6174757265206973206e6f742076616c69642e00000081525060200191505060405180910390fd5b600060288a1115156110e957603f7e010410410410410410410410410410410410410410410410410410410410417920000000001000000000080000000004000000000200000000018d02168115156110e157fe5b069050611197565b60008b1180156110f95750898b11155b1515611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676581526020017f72207468616e206d6f64756c6f2e00000000000000000000000000000000000081525060400191505060405180910390fd5b8a90505b6000806111a5868d8561236d565b809250819350505060035486018211151515611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6d617850726f666974206c696d69742076696f6c6174696f6e2e00000000000081525060200191505060405180910390fd5b816fffffffffffffffffffffffffffffffff16600560008282540192505081905550806fffffffffffffffffffffffffffffffff166006600082825401925050819055503073ffffffffffffffffffffffffffffffffffffffff16316005546006540111151515611302576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e0081525060200191505060405180910390fd5b7facafc53544c2ca5cd4dbfda9282c25a35859f0d4ceb77a8275dca1660b1ed3ad8a83604051808381526020018281526020019250505060405180910390a1858760000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550448760000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508b8760010160006101000a81548160ff021916908360ff160217905550828760010160016101000a81548160ff021916908360ff160217905550438760010160026101000a81548164ffffffffff021916908364ffffffffff1602179055508c8760010160076101000a81548164ffffffffff021916908364ffffffffff1602179055503387600101600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505050505050565b662386f26fc1000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60035481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1631811115151561168e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6181526020017f6e63652e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff163181600554600654010111151515611725576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f7420656e6f7567682066756e64732e00000000000000000000000000000081525060200191505060405180910390fd5b611733600183836000612501565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611821576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff163181111515156118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f496e63726561736520616d6f756e74206c6172676572207468616e2062616c6181526020017f6e63652e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16318160055460065401011115151561196d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f7420656e6f7567682066756e64732e00000000000000000000000000000081525060200191505060405180910390fd5b806fffffffffffffffffffffffffffffffff1660066000828254019250508190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060076000838152602001908152602001600020905060008160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008114151515611bad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f4265742073686f756c6420626520696e20616e2027616374697665272073746181526020017f746500000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60fa8260010160029054906101000a900464ffffffffff1664ffffffffff160143111515611c69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f426c6f636b686173682063616e2774206265207175657269656420627920455681526020017f4d2e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008260000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550600080611cdb838560010160009054906101000a900460ff1660ff168660010160019054906101000a900460ff1660ff1661236d565b8092508193505050816fffffffffffffffffffffffffffffffff16600560008282540392505081905550806fffffffffffffffffffffffffffffffff16600660008282540392505081905550611d588585600101600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856000612501565b5050505050565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b693f870857a3e0e380000081101515612024576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f6d617850726f6669742073686f756c6420626520612073616e65206e756d626581526020017f722e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8060038190555050565b600082604051602001808281526020019150506040516020818303038152906040528051906020012060019004905060008460000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008560010160009054906101000a900460ff1660ff16905060008660010160019054906101000a900460ff1660ff169050600087600101600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000841415151561218e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f4265742073686f756c6420626520696e20616e2027616374697665272073746181526020017f746500000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008860000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550600087876040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050600084826001900481151561220e57fe5b06905060008061221f88888861236d565b80925081935050506000809050600080905060288911151561226f5760008e60010160079054906101000a900464ffffffffff1664ffffffffff168660020a1614151561226a578391505b61227c565b8785101561227b578391505b5b836fffffffffffffffffffffffffffffffff1660056000828254039250508190555067016345785d8a00008a101580156122ba575060045460065410155b156122f95760006103e88a88600190048115156122d357fe5b048115156122dd57fe5b06905060008114156122f757600654915060006006819055505b505b6000811115612351578673ffffffffffffffffffffffffffffffffffffffff167fc388db0e8aa560a59633c094a0d0aa21322cd6234836fd5bac00fc5ae63b5783826040518082815260200191505060405180910390a25b61235d8b888484612501565b5050505050505050505050505050565b6000808260001080156123805750838311155b15156123f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f57696e2070726f626162696c697479206f7574206f662072616e67652e00000081525060200191505060405180910390fd5b67016345785d8a000085101561240b576000612414565b66038d7ea4c680005b9050600060646001870281151561242757fe5b049050660110d9316ec00081101561244457660110d9316ec00090505b85828201111515156124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f42657420646f65736e2774206576656e20636f76657220686f7573652065646781526020017f652e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b83858383890303028115156124f557fe5b04925050935093915050565b6000808284011461251457818301612517565b60015b905060008390508473ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050156125bb578473ffffffffffffffffffffffffffffffffffffffff167f18cd56b3b5d7c0d015402709124a50282389601c018b30730138c1fd30b249e187838660405180848152602001838152602001828152602001935050505060405180910390a261261b565b8473ffffffffffffffffffffffffffffffffffffffff167fe781ffba117fc05b201ed9a3830783e7eb5c6b6496655520584ecf315dc86f378784600060405180848152602001838152602001828152602001935050505060405180910390a25b50505050505056fea165627a7a72305820e2d911fe936edd9277bcbb20d394cf6e24f6cce4b2e0e78555d21a9b8d6058ec0029