60806040526040518060400160405280600a81526020017f54657468657220555344000000000000000000000000000000000000000000008152505f908161004791906103c6565b506040518060400160405280600481526020017f55534454000000000000000000000000000000000000000000000000000000008152506001908161008c91906103c6565b50600660025f6101000a81548160ff021916908360ff1602179055503480156100b3575f5ffd5b506040516114af3803806114af83398181016040528101906100d591906104c3565b8060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550806003819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161017b91906104fd565b60405180910390a350610516565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061020457607f821691505b602082108103610217576102166101c0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026102797fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261023e565b610283868361023e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6102c76102c26102bd8461029b565b6102a4565b61029b565b9050919050565b5f819050919050565b6102e0836102ad565b6102f46102ec826102ce565b84845461024a565b825550505050565b5f5f905090565b61030b6102fc565b6103168184846102d7565b505050565b5b818110156103395761032e5f82610303565b60018101905061031c565b5050565b601f82111561037e5761034f8161021d565b6103588461022f565b81016020851015610367578190505b61037b6103738561022f565b83018261031b565b50505b505050565b5f82821c905092915050565b5f61039e5f1984600802610383565b1980831691505092915050565b5f6103b6838361038f565b9150826002028217905092915050565b6103cf82610189565b67ffffffffffffffff8111156103e8576103e7610193565b5b6103f282546101ed565b6103fd82828561033d565b5f60209050601f83116001811461042e575f841561041c578287015190505b61042685826103ab565b86555061048d565b601f19841661043c8661021d565b5f5b828110156104635784890151825560018201915060208501945060208101905061043e565b86831015610480578489015161047c601f89168261038f565b8355505b6001600288020188555050505b505050505050565b5f5ffd5b6104a28161029b565b81146104ac575f5ffd5b50565b5f815190506104bd81610499565b92915050565b5f602082840312156104d8576104d7610495565b5b5f6104e5848285016104af565b91505092915050565b6104f78161029b565b82525050565b5f6020820190506105105f8301846104ee565b92915050565b610f8c806105235f395ff3fe608060405234801561000f575f5ffd5b50600436106100a7575f3560e01c806340c10f191161006f57806340c10f191461013d57806370a082311461015957806395d89b41146101895780639dc29fac146101a7578063a9059cbb146101c3578063dd62ed3e146101df576100a7565b806306fdde03146100ab578063095ea7b3146100c957806318160ddd146100e557806323b872dd14610103578063313ce5671461011f575b5f5ffd5b6100b361020f565b6040516100c09190610ac2565b60405180910390f35b6100e360048036038101906100de9190610b73565b61029a565b005b6100ed610380565b6040516100fa9190610bc0565b60405180910390f35b61011d60048036038101906101189190610bd9565b610386565b005b6101276104de565b6040516101349190610c44565b60405180910390f35b61015760048036038101906101529190610b73565b6104f0565b005b610173600480360381019061016e9190610c5d565b610632565b6040516101809190610bc0565b60405180910390f35b610191610647565b60405161019e9190610ac2565b60405180910390f35b6101c160048036038101906101bc9190610b73565b6106d3565b005b6101dd60048036038101906101d89190610b73565b610826565b005b6101f960048036038101906101f49190610c88565b610835565b6040516102069190610bc0565b60405180910390f35b5f805461021b90610cf3565b80601f016020809104026020016040519081016040528092919081815260200182805461024790610cf3565b80156102925780601f1061026957610100808354040283529160200191610292565b820191905f5260205f20905b81548152906001019060200180831161027557829003601f168201915b505050505081565b8060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516103749190610bc0565b60405180910390a35050565b60035481565b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043c90610d6d565b60405180910390fd5b81816104519190610db8565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506104d8848484610855565b50505050565b60025f9054906101000a900460ff1681565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361055e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055590610e35565b60405180910390fd5b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546105aa9190610e53565b925050819055508060035f8282546105c29190610e53565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106269190610bc0565b60405180910390a35050565b6004602052805f5260405f205f915090505481565b6001805461065490610cf3565b80601f016020809104026020016040519081016040528092919081815260200182805461068090610cf3565b80156106cb5780601f106106a2576101008083540402835291602001916106cb565b820191905f5260205f20905b8154815290600101906020018083116106ae57829003601f168201915b505050505081565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074e90610ed0565b60405180910390fd5b81816107639190610db8565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f8282546107b59190610db8565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108199190610bc0565b60405180910390a3505050565b610831338383610855565b5050565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba90610e35565b60405180910390fd5b5f60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e90610f38565b60405180910390fd5b81816109539190610db8565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109e09190610e53565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a449190610bc0565b60405180910390a350505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610a9482610a52565b610a9e8185610a5c565b9350610aae818560208601610a6c565b610ab781610a7a565b840191505092915050565b5f6020820190508181035f830152610ada8184610a8a565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b0f82610ae6565b9050919050565b610b1f81610b05565b8114610b29575f5ffd5b50565b5f81359050610b3a81610b16565b92915050565b5f819050919050565b610b5281610b40565b8114610b5c575f5ffd5b50565b5f81359050610b6d81610b49565b92915050565b5f5f60408385031215610b8957610b88610ae2565b5b5f610b9685828601610b2c565b9250506020610ba785828601610b5f565b9150509250929050565b610bba81610b40565b82525050565b5f602082019050610bd35f830184610bb1565b92915050565b5f5f5f60608486031215610bf057610bef610ae2565b5b5f610bfd86828701610b2c565b9350506020610c0e86828701610b2c565b9250506040610c1f86828701610b5f565b9150509250925092565b5f60ff82169050919050565b610c3e81610c29565b82525050565b5f602082019050610c575f830184610c35565b92915050565b5f60208284031215610c7257610c71610ae2565b5b5f610c7f84828501610b2c565b91505092915050565b5f5f60408385031215610c9e57610c9d610ae2565b5b5f610cab85828601610b2c565b9250506020610cbc85828601610b2c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610d0a57607f821691505b602082108103610d1d57610d1c610cc6565b5b50919050565b7f416c6c6f77616e636520657863656564656400000000000000000000000000005f82015250565b5f610d57601283610a5c565b9150610d6282610d23565b602082019050919050565b5f6020820190508181035f830152610d8481610d4b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610dc282610b40565b9150610dcd83610b40565b9250828203905081811115610de557610de4610d8b565b5b92915050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f610e1f600f83610a5c565b9150610e2a82610deb565b602082019050919050565b5f6020820190508181035f830152610e4c81610e13565b9050919050565b5f610e5d82610b40565b9150610e6883610b40565b9250828201905080821115610e8057610e7f610d8b565b5b92915050565b7f4275726e20616d6f756e7420657863656564732062616c616e636500000000005f82015250565b5f610eba601b83610a5c565b9150610ec582610e86565b602082019050919050565b5f6020820190508181035f830152610ee781610eae565b9050919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f610f22601483610a5c565b9150610f2d82610eee565b602082019050919050565b5f6020820190508181035f830152610f4f81610f16565b905091905056fea2646970667358221220597e8ea41659a455a320e848d27a608624247d2d2efb35a3d73da109a836d7a564736f6c634300081b0033000000000000000000000000000000000000000000000000000009184e72a000