0x60806040526001600860146101000a81548160ff02191690831515021790555034801561002a575f80fd5b50604051612937380380612937833981810160405281019061004c9190610970565b806040518060400160405280601581526020017f427572676572733f2062792053746f6e65746f737300000000000000000000008152506040518060400160405280600781526020017f425552474552530000000000000000000000000000000000000000000000000081525081600390816100c89190610bd5565b5080600490816100d89190610bd5565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361014b575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101429190610cb3565b60405180910390fd5b61015a8161019960201b60201c565b506101933361016d61025c60201b60201c565b600a6101799190610e34565b639c41165a6101889190610e7e565b61026460201b60201c565b5061103b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102d4575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102cb9190610cb3565b60405180910390fd5b6102e55f83836102e960201b60201c565b5050565b600860149054906101000a900460ff168015610308575063675e083642115b156104855760075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156103b0575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156103ca576103c5828261049b60201b60201c565b610484565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614801561046d575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561048357610482838261059260201b60201c565b5b5b5b6104968383836106f960201b60201c565b505050565b60405180604001604052804267ffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681525060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151815f0160086101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055509050505050565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060400160405290815f82015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160089054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681525050905042601e825f015161067f9190610ed2565b67ffffffffffffffff16101580156106b5575081816020015177ffffffffffffffffffffffffffffffffffffffffffffffff1610155b6106f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106eb90610f8d565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610749578060025f82825461073d9190610fab565b92505081905550610817565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156107d2578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016107c993929190610fed565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361085e578060025f82825403925050819055506108a8565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109059190611022565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61093f82610916565b9050919050565b61094f81610935565b8114610959575f80fd5b50565b5f8151905061096a81610946565b92915050565b5f6020828403121561098557610984610912565b5b5f6109928482850161095c565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610a1657607f821691505b602082108103610a2957610a286109d2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610a50565b610a958683610a50565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610ad9610ad4610acf84610aad565b610ab6565b610aad565b9050919050565b5f819050919050565b610af283610abf565b610b06610afe82610ae0565b848454610a5c565b825550505050565b5f90565b610b1a610b0e565b610b25818484610ae9565b505050565b5b81811015610b4857610b3d5f82610b12565b600181019050610b2b565b5050565b601f821115610b8d57610b5e81610a2f565b610b6784610a41565b81016020851015610b76578190505b610b8a610b8285610a41565b830182610b2a565b50505b505050565b5f82821c905092915050565b5f610bad5f1984600802610b92565b1980831691505092915050565b5f610bc58383610b9e565b9150826002028217905092915050565b610bde8261099b565b67ffffffffffffffff811115610bf757610bf66109a5565b5b610c0182546109ff565b610c0c828285610b4c565b5f60209050601f831160018114610c3d575f8415610c2b578287015190505b610c358582610bba565b865550610c9c565b601f198416610c4b86610a2f565b5f5b82811015610c7257848901518255600182019150602085019450602081019050610c4d565b86831015610c8f5784890151610c8b601f891682610b9e565b8355505b6001600288020188555050505b505050505050565b610cad81610935565b82525050565b5f602082019050610cc65f830184610ca4565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610d4e57808604811115610d2a57610d29610ccc565b5b6001851615610d395780820291505b8081029050610d4785610cf9565b9450610d0e565b94509492505050565b5f82610d665760019050610e21565b81610d73575f9050610e21565b8160018114610d895760028114610d9357610dc2565b6001915050610e21565b60ff841115610da557610da4610ccc565b5b8360020a915084821115610dbc57610dbb610ccc565b5b50610e21565b5060208310610133831016604e8410600b8410161715610df75782820a905083811115610df257610df1610ccc565b5b610e21565b610e048484846001610d05565b92509050818404811115610e1b57610e1a610ccc565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610e3e82610aad565b9150610e4983610e28565b9250610e767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610d57565b905092915050565b5f610e8882610aad565b9150610e9383610aad565b9250828202610ea181610aad565b91508282048414831517610eb857610eb7610ccc565b5b5092915050565b5f67ffffffffffffffff82169050919050565b5f610edc82610ebf565b9150610ee783610ebf565b9250828201905067ffffffffffffffff811115610f0757610f06610ccc565b5b92915050565b5f82825260208201905092915050565b7f536e697065725574696c6974793a2043616e27742062757920262073656c6c205f8201527f696e206f6e6520626c6f636b2e00000000000000000000000000000000000000602082015250565b5f610f77602d83610f0d565b9150610f8282610f1d565b604082019050919050565b5f6020820190508181035f830152610fa481610f6b565b9050919050565b5f610fb582610aad565b9150610fc083610aad565b9250828201905080821115610fd857610fd7610ccc565b5b92915050565b610fe781610aad565b82525050565b5f6060820190506110005f830186610ca4565b61100d6020830185610fde565b61101a6040830184610fde565b949350505050565b5f6020820190506110355f830184610fde565b92915050565b6118ef806110485f395ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c8063715018a6116100a0578063a9059cbb1161006f578063a9059cbb14610294578063dd62ed3e146102c4578063dd6d838f146102f4578063ddf45def14610324578063f2fde38b1461034257610114565b8063715018a61461023257806389a99cb61461023c5780638da5cb5b1461025857806395d89b411461027657610114565b806323b872dd116100e757806323b872dd1461018e578063313ce567146101be578063591eb1cc146101dc5780635fe837d5146101e657806370a082311461020257610114565b806306fdde0314610118578063095ea7b314610136578063143492c21461016657806318160ddd14610170575b5f80fd5b61012061035e565b60405161012d9190611373565b60405180910390f35b610150600480360381019061014b9190611428565b6103ee565b60405161015d9190611480565b60405180910390f35b61016e610410565b005b61017861045a565b60405161018591906114a8565b60405180910390f35b6101a860048036038101906101a391906114c1565b610463565b6040516101b59190611480565b60405180910390f35b6101c6610491565b6040516101d3919061152c565b60405180910390f35b6101e4610499565b005b61020060048036038101906101fb9190611545565b6104d2565b005b61021c60048036038101906102179190611545565b61051d565b60405161022991906114a8565b60405180910390f35b61023a610562565b005b610256600480360381019061025191906115fb565b610575565b005b610260610616565b60405161026d9190611667565b60405180910390f35b61027e61063e565b60405161028b9190611373565b60405180910390f35b6102ae60048036038101906102a99190611428565b6106ce565b6040516102bb9190611480565b60405180910390f35b6102de60048036038101906102d99190611680565b6106f0565b6040516102eb91906114a8565b60405180910390f35b61030e60048036038101906103099190611545565b610772565b60405161031b9190611480565b60405180910390f35b61032c61078f565b6040516103399190611667565b60405180910390f35b61035c60048036038101906103579190611545565b6107b4565b005b60606003805461036d906116eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610399906116eb565b80156103e45780601f106103bb576101008083540402835291602001916103e4565b820191905f5260205f20905b8154815290600101906020018083116103c757829003601f168201915b5050505050905090565b5f806103f8610838565b905061040581858561083f565b600191505092915050565b610418610851565b5f60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f600254905090565b5f8061046d610838565b905061047a8582856108d8565b61048585858561096a565b60019150509392505050565b5f6012905090565b6104a1610851565b5f600860149054906101000a900460ff1690508015600860146101000a81548160ff02191690831515021790555050565b6104da610851565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61056a610851565b6105735f610a5a565b565b61057d610851565b5f5b83839050811015610610578160075f8686858181106105a1576105a061171b565b5b90506020020160208101906105b69190611545565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080600101905061057f565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461064d906116eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610679906116eb565b80156106c45780601f1061069b576101008083540402835291602001916106c4565b820191905f5260205f20905b8154815290600101906020018083116106a757829003601f168201915b5050505050905090565b5f806106d8610838565b90506106e581858561096a565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6007602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6107bc610851565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361082c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108239190611667565b60405180910390fd5b61083581610a5a565b50565b5f33905090565b61084c8383836001610b1d565b505050565b610859610838565b73ffffffffffffffffffffffffffffffffffffffff16610877610616565b73ffffffffffffffffffffffffffffffffffffffff16146108d65761089a610838565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016108cd9190611667565b60405180910390fd5b565b5f6108e384846106f0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109645781811015610955578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161094c93929190611748565b60405180910390fd5b61096384848484035f610b1d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109da575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109d19190611667565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a4a575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a419190611667565b60405180910390fd5b610a55838383610cec565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b8d575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610b849190611667565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bfd575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610bf49190611667565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610ce6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610cdd91906114a8565b60405180910390a35b50505050565b600860149054906101000a900460ff168015610d0b575063675e083642115b15610e7c5760075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015610db3575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610dc757610dc28282610e8c565b610e7b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015610e6a575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610e7a57610e798382610f83565b5b5b5b610e878383836110ea565b505050565b60405180604001604052804267ffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681525060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151815f0160086101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055509050505050565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060400160405290815f82015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160089054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681525050905042601e825f015161107091906117bd565b67ffffffffffffffff16101580156110a6575081816020015177ffffffffffffffffffffffffffffffffffffffffffffffff1610155b6110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90611868565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361113a578060025f82825461112e9190611886565b92505081905550611208565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156111c3578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016111ba93929190611748565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361124f578060025f8282540392505081905550611299565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112f691906114a8565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61134582611303565b61134f818561130d565b935061135f81856020860161131d565b6113688161132b565b840191505092915050565b5f6020820190508181035f83015261138b818461133b565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6113c48261139b565b9050919050565b6113d4816113ba565b81146113de575f80fd5b50565b5f813590506113ef816113cb565b92915050565b5f819050919050565b611407816113f5565b8114611411575f80fd5b50565b5f81359050611422816113fe565b92915050565b5f806040838503121561143e5761143d611393565b5b5f61144b858286016113e1565b925050602061145c85828601611414565b9150509250929050565b5f8115159050919050565b61147a81611466565b82525050565b5f6020820190506114935f830184611471565b92915050565b6114a2816113f5565b82525050565b5f6020820190506114bb5f830184611499565b92915050565b5f805f606084860312156114d8576114d7611393565b5b5f6114e5868287016113e1565b93505060206114f6868287016113e1565b925050604061150786828701611414565b9150509250925092565b5f60ff82169050919050565b61152681611511565b82525050565b5f60208201905061153f5f83018461151d565b92915050565b5f6020828403121561155a57611559611393565b5b5f611567848285016113e1565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261159157611590611570565b5b8235905067ffffffffffffffff8111156115ae576115ad611574565b5b6020830191508360208202830111156115ca576115c9611578565b5b9250929050565b6115da81611466565b81146115e4575f80fd5b50565b5f813590506115f5816115d1565b92915050565b5f805f6040848603121561161257611611611393565b5b5f84013567ffffffffffffffff81111561162f5761162e611397565b5b61163b8682870161157c565b9350935050602061164e868287016115e7565b9150509250925092565b611661816113ba565b82525050565b5f60208201905061167a5f830184611658565b92915050565b5f806040838503121561169657611695611393565b5b5f6116a3858286016113e1565b92505060206116b4858286016113e1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061170257607f821691505b602082108103611715576117146116be565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60608201905061175b5f830186611658565b6117686020830185611499565b6117756040830184611499565b949350505050565b5f67ffffffffffffffff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6117c78261177d565b91506117d28361177d565b9250828201905067ffffffffffffffff8111156117f2576117f1611790565b5b92915050565b7f536e697065725574696c6974793a2043616e27742062757920262073656c6c205f8201527f696e206f6e6520626c6f636b2e00000000000000000000000000000000000000602082015250565b5f611852602d8361130d565b915061185d826117f8565b604082019050919050565b5f6020820190508181035f83015261187f81611846565b9050919050565b5f611890826113f5565b915061189b836113f5565b92508282019050808211156118b3576118b2611790565b5b9291505056fea26469706673582212200287a15a6d0d0b78e426c69323bafbe3d442c1ce252c7fc83841511c6794eddd64736f6c634300081a003300000000000000000000000085b4008de137daf1dc6aeb658f540e106b2b07fd