60806040526040518060400160405280600481526020017f5465726e00000000000000000000000000000000000000000000000000000000815250600090816200004a9190620003af565b506040518060400160405280600481526020017f5465726e0000000000000000000000000000000000000000000000000000000081525060019081620000919190620003af565b5063767695c6600255348015620000a757600080fd5b50600254600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000496565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001b757607f821691505b602082108103620001cd57620001cc6200016f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620001f8565b620002438683620001f8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002906200028a62000284846200025b565b62000265565b6200025b565b9050919050565b6000819050919050565b620002ac836200026f565b620002c4620002bb8262000297565b84845462000205565b825550505050565b600090565b620002db620002cc565b620002e8818484620002a1565b505050565b5b81811015620003105762000304600082620002d1565b600181019050620002ee565b5050565b601f8211156200035f576200032981620001d3565b6200033484620001e8565b8101602085101562000344578190505b6200035c6200035385620001e8565b830182620002ed565b50505b505050565b600082821c905092915050565b6000620003846000198460080262000364565b1980831691505092915050565b60006200039f838362000371565b9150826002028217905092915050565b620003ba8262000135565b67ffffffffffffffff811115620003d657620003d562000140565b5b620003e282546200019e565b620003ef82828562000314565b600060209050601f83116001811462000427576000841562000412578287015190505b6200041e858262000391565b8655506200048e565b601f1984166200043786620001d3565b60005b8281101562000461578489015182556001820191506020850194506020810190506200043a565b868310156200048157848901516200047d601f89168262000371565b8355505b6001600288020188555050505b505050505050565b610b9480620004a66000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80638da5cb5b116100715780638da5cb5b1461015257806395d89b41146101705780639f7b59821461018e578063a9059cbb146101aa578063c541c4fa146101c6578063f200ede6146101e2576100a9565b806306fdde03146100ae57806318160ddd146100cc57806323f536f4146100ea57806335cd349d1461010657806370a0823114610122575b600080fd5b6100b66101fe565b6040516100c39190610765565b60405180910390f35b6100d461028c565b6040516100e191906107a0565b60405180910390f35b61010460048036038101906100ff919061084a565b610292565b005b610120600480360381019061011b91906108b1565b6102ea565b005b61013c600480360381019061013791906108f1565b61033c565b60405161014991906107a0565b60405180910390f35b61015a610385565b604051610167919061092d565b60405180910390f35b6101786103ab565b6040516101859190610765565b60405180910390f35b6101a860048036038101906101a3919061084a565b610439565b005b6101c460048036038101906101bf91906108b1565b610491565b005b6101e060048036038101906101db9190610948565b610628565b005b6101fc60048036038101906101f7919061084a565b61067d565b005b6000805461020b906109ca565b80601f0160208091040260200160405190810160405280929190818152602001828054610237906109ca565b80156102845780601f1061025957610100808354040283529160200191610284565b820191906000526020600020905b81548152906001019060200180831161026757829003601f168201915b505050505081565b60025481565b8373ffffffffffffffffffffffffffffffffffffffff167f07269859690d3c791e28ce3ce6f7d0c8e17fd3d36689c6e48a2b4d6f146fcbed8484846040516102dc939291906109fb565b60405180910390a250505050565b8173ffffffffffffffffffffffffffffffffffffffff167ffa2e69a1d57914112c1b7f903da8ec85069a6b8539f226468430cd7c5d2bbf9e8260405161033091906107a0565b60405180910390a25050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600180546103b8906109ca565b80601f01602080910402602001604051908101604052809291908181526020018280546103e4906109ca565b80156104315780601f1061040657610100808354040283529160200191610431565b820191906000526020600020905b81548152906001019060200180831161041457829003601f168201915b505050505081565b8373ffffffffffffffffffffffffffffffffffffffff167fcb2b04e1cfa07cb64e3ecf935a1727fac4881e04c916a8b15791b34f61f665c9848484604051610483939291906109fb565b60405180910390a250505050565b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050a90610a7e565b60405180910390fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105629190610acd565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105b89190610b01565b925050819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161061c91906107a0565b60405180910390a35050565b8273ffffffffffffffffffffffffffffffffffffffff167f27305087ddeea396f5959d8da805711b9b7a7bd91d4c2e6c605109dc4e3f38f28383604051610670929190610b35565b60405180910390a2505050565b8373ffffffffffffffffffffffffffffffffffffffff167f91733f3a8d633fef593654b6b8a1cc6f105f60d6d269ab0488d6b81b0aa52dc98484846040516106c7939291906109fb565b60405180910390a250505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561070f5780820151818401526020810190506106f4565b60008484015250505050565b6000601f19601f8301169050919050565b6000610737826106d5565b61074181856106e0565b93506107518185602086016106f1565b61075a8161071b565b840191505092915050565b6000602082019050818103600083015261077f818461072c565b905092915050565b6000819050919050565b61079a81610787565b82525050565b60006020820190506107b56000830184610791565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107eb826107c0565b9050919050565b6107fb816107e0565b811461080657600080fd5b50565b600081359050610818816107f2565b92915050565b61082781610787565b811461083257600080fd5b50565b6000813590506108448161081e565b92915050565b60008060008060808587031215610864576108636107bb565b5b600061087287828801610809565b945050602061088387828801610835565b935050604061089487828801610835565b92505060606108a587828801610835565b91505092959194509250565b600080604083850312156108c8576108c76107bb565b5b60006108d685828601610809565b92505060206108e785828601610835565b9150509250929050565b600060208284031215610907576109066107bb565b5b600061091584828501610809565b91505092915050565b610927816107e0565b82525050565b6000602082019050610942600083018461091e565b92915050565b600080600060608486031215610961576109606107bb565b5b600061096f86828701610809565b935050602061098086828701610835565b925050604061099186828701610835565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806109e257607f821691505b6020821081036109f5576109f461099b565b5b50919050565b6000606082019050610a106000830186610791565b610a1d6020830185610791565b610a2a6040830184610791565b949350505050565b7f4e6f7420656e6f75676820746f6b656e73000000000000000000000000000000600082015250565b6000610a686011836106e0565b9150610a7382610a32565b602082019050919050565b60006020820190508181036000830152610a9781610a5b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610ad882610787565b9150610ae383610787565b9250828203905081811115610afb57610afa610a9e565b5b92915050565b6000610b0c82610787565b9150610b1783610787565b9250828201905080821115610b2f57610b2e610a9e565b5b92915050565b6000604082019050610b4a6000830185610791565b610b576020830184610791565b939250505056fea2646970667358221220f92077398727b8c708f78cda75f55dc333660246c29386688224f44c60f181fb64736f6c63430008130033