0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611631806100606000396000f3006080604052600436106100a4576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631428aac1146100a657806325a58b56146100da5780632e1a7d4d1461011357806341c0e1b51461014057806347ef8ee81461015757806352e99d65146101bb578063aef700b91461020b578063aefaea7a14610236578063cb05fc481461024d578063cc6f41421461027a575b005b6100d86004803603810190808035906020019092919080359060200190929190803590602001909291905050506102ca565b005b3480156100e657600080fd5b506100ef610518565b604051808264ffffffffff1664ffffffffff16815260200191505060405180910390f35b34801561011f57600080fd5b5061013e6004803603810190808035906020019092919050505061052f565b005b34801561014c57600080fd5b5061015561066b565b005b6101b960048036038101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035600019169060200190929190803560001916906020019092919050505061078f565b005b61020960048036038101908080359060200190929190803590602001909291908035906020019092919080356000191690602001909291908035600019169060200190929190505050610dc4565b005b34801561021757600080fd5b50610220610f8a565b6040518082815260200191505060405180910390f35b34801561024257600080fd5b5061024b61105b565b005b34801561025957600080fd5b506102786004803603810190808035906020019092919050505061120a565b005b6102c8600480360381019080803590602001909291908035906020019092919080359060200190929190803560001916906020019092919080356000191690602001909291905050506114c2565b005b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156103b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b828540604051602001808381526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561041d57805182526020820191506020810190506020830392506103f8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091506064826001900481151561045c57fe5b069050838110151561046d57600080fd5b73d1ceeeefa68a6af0a5f6046132d986066c7f942673ffffffffffffffffffffffffffffffffffffffff16630d2cbe138460006040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050505050565b600260009054906101000a900464ffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600081141561063d573073ffffffffffffffffffffffffffffffffffffffff163190505b6106686000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826115cb565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b600060606000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561087d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b670800000000000000860195508660018190555084600154604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b6020831015156108e957805182526020820191506020810190506020830392506108c4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206001900414151561092657600080fd5b85431115151561099e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f436f6d6d69742068617320657870697265642e0000000000000000000000000081525060200191505060405180910390fd5b8585604051602001808364ffffffffff1664ffffffffff167b01000000000000000000000000000000000000000000000000000000028152600501828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515610a275780518252602082019150602081019050602083039250610a02565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150600182601b8686604051600081526020016040526040518085600019166000191681526020018460ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610acb573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1673b00b5a8fe396189ba4bc3bf1d6da03dd2adefe5773ffffffffffffffffffffffffffffffffffffffff16141515610b8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4543445341207369676e6174757265206973206e6f742076616c69642e00000081525060200191505060405180910390fd5b6001604051908082528060200260200182016040528015610bbb5781602001602082028038833980820191505090505b50905084816000815181101515610bce57fe5b906020019060200201818152505073d1ceeeefa68a6af0a5f6046132d986066c7f942673ffffffffffffffffffffffffffffffffffffffff1663ef115542826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019060200280838360005b83811015610c7b578082015181840152602081019050610c60565b5050505090500192505050600060405180830381600087803b158015610ca057600080fd5b505af1158015610cb4573d6000803e3d6000fd5b5050505043600260006101000a81548164ffffffffff021916908364ffffffffff1602179055508760038190555073d1ceeeefa68a6af0a5f6046132d986066c7f942673ffffffffffffffffffffffffffffffffffffffff16635e83b4638a60035460648a8a8a8a6040518863ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808781526020018681526020018581526020018481526020018360001916600019168152602001826000191660001916815260200196505050505050506000604051808303818588803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b5050505050505050505050505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610eb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610eb9610f8a565b915060035482101515610ecb57600080fd5b6001549050610edd87878787876114c2565b73d1ceeeefa68a6af0a5f6046132d986066c7f942673ffffffffffffffffffffffffffffffffffffffff16630d2cbe138260006040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b5050505050505050505050565b6000806000600154600260009054906101000a900464ffffffffff1664ffffffffff1640604051602001808381526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156110115780518252602082019150602081019050602083039250610fec565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091506064826001900481151561105057fe5b069050809250505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611147576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61114f610f8a565b90506003548110151561116157600080fd5b73d1ceeeefa68a6af0a5f6046132d986066c7f942673ffffffffffffffffffffffffffffffffffffffff16630d2cbe1360015460006040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b5050505050565b60606000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b73d1ceeeefa68a6af0a5f6046132d986066c7f942673ffffffffffffffffffffffffffffffffffffffff1663e1fdb4b4836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b5050505060016040519080825280602002602001820160405280156113c15781602001602082028038833980820191505090505b509050818160008151811015156113d457fe5b906020019060200201818152505073d1ceeeefa68a6af0a5f6046132d986066c7f942673ffffffffffffffffffffffffffffffffffffffff1663ef115542826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019060200280838360005b83811015611481578082015181840152602081019050611466565b5050505090500192505050600060405180830381600087803b1580156114a657600080fd5b505af11580156114ba573d6000803e3d6000fd5b505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d81526020017f6f776e65722e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6115c4671b73448525b900006032878787878761078f565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050505050505600a165627a7a72305820b5340c548462a3f261b923b7189c0105a1c2e1d9da4913e7c595a58c3c4925aa0029