60a060405234801561000f575f80fd5b506040518060400160405280600781526020017f595a51436f696e000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f595a510000000000000000000000000000000000000000000000000000000000815250816003908161008b91906105c8565b50806004908161009b91906105c8565b5050506100b733683635c9adc5dea000006100f060201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506107ac565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610160575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161015791906106d6565b60405180910390fd5b6101715f838361017560201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036101c5578060025f8282546101b9919061071c565b92505081905550610293565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561024e578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102459392919061075e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102da578060025f8282540392505081905550610324565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103819190610793565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061040957607f821691505b60208210810361041c5761041b6103c5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261047e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610443565b6104888683610443565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104cc6104c76104c2846104a0565b6104a9565b6104a0565b9050919050565b5f819050919050565b6104e5836104b2565b6104f96104f1826104d3565b84845461044f565b825550505050565b5f90565b61050d610501565b6105188184846104dc565b505050565b5b8181101561053b576105305f82610505565b60018101905061051e565b5050565b601f8211156105805761055181610422565b61055a84610434565b81016020851015610569578190505b61057d61057585610434565b83018261051d565b50505b505050565b5f82821c905092915050565b5f6105a05f1984600802610585565b1980831691505092915050565b5f6105b88383610591565b9150826002028217905092915050565b6105d18261038e565b67ffffffffffffffff8111156105ea576105e9610398565b5b6105f482546103f2565b6105ff82828561053f565b5f60209050601f831160018114610630575f841561061e578287015190505b61062885826105ad565b86555061068f565b601f19841661063e86610422565b5f5b8281101561066557848901518255600182019150602085019450602081019050610640565b86831015610682578489015161067e601f891682610591565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106c082610697565b9050919050565b6106d0816106b6565b82525050565b5f6020820190506106e95f8301846106c7565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610726826104a0565b9150610731836104a0565b9250828201905080821115610749576107486106ef565b5b92915050565b610758816104a0565b82525050565b5f6060820190506107715f8301866106c7565b61077e602083018561074f565b61078b604083018461074f565b949350505050565b5f6020820190506107a65f83018461074f565b92915050565b6080516111586107c45f395f61058701526111585ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c80634451d89f1161006f5780634451d89f1461016557806370a082311461016f57806395d89b411461019f578063a9059cbb146101bd578063dd62ed3e146101ed578063ffc614871461021d576100a7565b806306fdde03146100ab578063095ea7b3146100c957806318160ddd146100f957806323b872dd14610117578063313ce56714610147575b5f80fd5b6100b3610227565b6040516100c09190610cdb565b60405180910390f35b6100e360048036038101906100de9190610d8c565b6102b7565b6040516100f09190610de4565b60405180910390f35b6101016102d9565b60405161010e9190610e0c565b60405180910390f35b610131600480360381019061012c9190610e25565b6102e2565b60405161013e9190610de4565b60405180910390f35b61014f610310565b60405161015c9190610e90565b60405180910390f35b61016d610318565b005b61018960048036038101906101849190610ea9565b61040c565b6040516101969190610e0c565b60405180910390f35b6101a7610451565b6040516101b49190610cdb565b60405180910390f35b6101d760048036038101906101d29190610d8c565b6104e1565b6040516101e49190610de4565b60405180910390f35b61020760048036038101906102029190610ed4565b610503565b6040516102149190610e0c565b60405180910390f35b610225610585565b005b60606003805461023690610f3f565b80601f016020809104026020016040519081016040528092919081815260200182805461026290610f3f565b80156102ad5780601f10610284576101008083540402835291602001916102ad565b820191905f5260205f20905b81548152906001019060200180831161029057829003601f168201915b5050505050905090565b5f806102c1610669565b90506102ce818585610670565b600191505092915050565b5f600254905090565b5f806102ec610669565b90506102f9858285610682565b610304858585610714565b60019150509392505050565b5f6012905090565b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156103a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039990610fdf565b60405180910390fd5b6103b5336801158e460913d00000610804565b600160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461046090610f3f565b80601f016020809104026020016040519081016040528092919081815260200182805461048c90610f3f565b80156104d75780601f106104ae576101008083540402835291602001916104d7565b820191905f5260205f20905b8154815290600101906020018083116104ba57829003601f168201915b5050505050905090565b5f806104eb610669565b90506104f8818585610714565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060a90611047565b60405180910390fd5b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550565b5f33905090565b61067d8383836001610883565b505050565b5f61068d8484610503565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461070e57818110156106ff578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106f693929190611074565b60405180910390fd5b61070d84848484035f610883565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610784575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161077b91906110a9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107f4575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107eb91906110a9565b60405180910390fd5b6107ff838383610a52565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610874575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161086b91906110a9565b60405180910390fd5b61087f5f8383610a52565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036108f3575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016108ea91906110a9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610963575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161095a91906110a9565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610a4c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a439190610e0c565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610aa2578060025f828254610a9691906110ef565b92505081905550610b70565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610b2b578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610b2293929190611074565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bb7578060025f8282540392505081905550610c01565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c5e9190610e0c565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610cad82610c6b565b610cb78185610c75565b9350610cc7818560208601610c85565b610cd081610c93565b840191505092915050565b5f6020820190508181035f830152610cf38184610ca3565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d2882610cff565b9050919050565b610d3881610d1e565b8114610d42575f80fd5b50565b5f81359050610d5381610d2f565b92915050565b5f819050919050565b610d6b81610d59565b8114610d75575f80fd5b50565b5f81359050610d8681610d62565b92915050565b5f8060408385031215610da257610da1610cfb565b5b5f610daf85828601610d45565b9250506020610dc085828601610d78565b9150509250929050565b5f8115159050919050565b610dde81610dca565b82525050565b5f602082019050610df75f830184610dd5565b92915050565b610e0681610d59565b82525050565b5f602082019050610e1f5f830184610dfd565b92915050565b5f805f60608486031215610e3c57610e3b610cfb565b5b5f610e4986828701610d45565b9350506020610e5a86828701610d45565b9250506040610e6b86828701610d78565b9150509250925092565b5f60ff82169050919050565b610e8a81610e75565b82525050565b5f602082019050610ea35f830184610e81565b92915050565b5f60208284031215610ebe57610ebd610cfb565b5b5f610ecb84828501610d45565b91505092915050565b5f8060408385031215610eea57610ee9610cfb565b5b5f610ef785828601610d45565b9250506020610f0885828601610d45565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610f5657607f821691505b602082108103610f6957610f68610f12565b5b50919050565b7f4561636820706572736f6e2063616e206f6e6c792072656365697665203230205f8201527f595a51206f6e6365000000000000000000000000000000000000000000000000602082015250565b5f610fc9602883610c75565b9150610fd482610f6f565b604082019050919050565b5f6020820190508181035f830152610ff681610fbd565b9050919050565b7f4f6e6c792074657374206279204f776e657200000000000000000000000000005f82015250565b5f611031601283610c75565b915061103c82610ffd565b602082019050919050565b5f6020820190508181035f83015261105e81611025565b9050919050565b61106e81610d1e565b82525050565b5f6060820190506110875f830186611065565b6110946020830185610dfd565b6110a16040830184610dfd565b949350505050565b5f6020820190506110bc5f830184611065565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6110f982610d59565b915061110483610d59565b925082820190508082111561111c5761111b6110c2565b5b9291505056fea2646970667358221220f435ac50d1c37363888adfde83211df1eef8caf11ff65d326d18612c7a59752564736f6c63430008190033