608060405234801561000f575f80fd5b5060405161148d38038061148d83398181016040528101906100319190610163565b6040518060400160405280601081526020017f457870657269656e636520546f6b656e000000000000000000000000000000008152506040518060400160405280600481526020017f4d5244520000000000000000000000000000000000000000000000000000000081525081600390816100ac91906103c8565b5080600490816100bc91906103c8565b5050508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610497565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61013282610109565b9050919050565b61014281610128565b811461014c575f80fd5b50565b5f8151905061015d81610139565b92915050565b5f6020828403121561017857610177610105565b5b5f6101858482850161014f565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061020957607f821691505b60208210810361021c5761021b6101c5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261027e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610243565b6102888683610243565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6102cc6102c76102c2846102a0565b6102a9565b6102a0565b9050919050565b5f819050919050565b6102e5836102b2565b6102f96102f1826102d3565b84845461024f565b825550505050565b5f90565b61030d610301565b6103188184846102dc565b505050565b5b8181101561033b576103305f82610305565b60018101905061031e565b5050565b601f8211156103805761035181610222565b61035a84610234565b81016020851015610369578190505b61037d61037585610234565b83018261031d565b50505b505050565b5f82821c905092915050565b5f6103a05f1984600802610385565b1980831691505092915050565b5f6103b88383610391565b9150826002028217905092915050565b6103d18261018e565b67ffffffffffffffff8111156103ea576103e9610198565b5b6103f482546101f2565b6103ff82828561033f565b5f60209050601f831160018114610430575f841561041e578287015190505b61042885826103ad565b86555061048f565b601f19841661043e86610222565b5f5b8281101561046557848901518255600182019150602085019450602081019050610440565b86831015610482578489015161047e601f891682610391565b8355505b6001600288020188555050505b505050505050565b610fe9806104a45f395ff3fe608060405234801561000f575f80fd5b506004361061009c575f3560e01c806340c10f191161006457806340c10f191461015a57806370a082311461017657806395d89b41146101a6578063a9059cbb146101c4578063dd62ed3e146101f45761009c565b806306fdde03146100a0578063095ea7b3146100be57806318160ddd146100ee57806323b872dd1461010c578063313ce5671461013c575b5f80fd5b6100a8610224565b6040516100b59190610bd4565b60405180910390f35b6100d860048036038101906100d39190610c85565b6102b4565b6040516100e59190610cdd565b60405180910390f35b6100f66102d6565b6040516101039190610d05565b60405180910390f35b61012660048036038101906101219190610d1e565b6102df565b6040516101339190610cdd565b60405180910390f35b61014461030d565b6040516101519190610d89565b60405180910390f35b610174600480360381019061016f9190610c85565b610315565b005b610190600480360381019061018b9190610da2565b6103e9565b60405161019d9190610d05565b60405180910390f35b6101ae61042e565b6040516101bb9190610bd4565b60405180910390f35b6101de60048036038101906101d99190610c85565b6104be565b6040516101eb9190610cdd565b60405180910390f35b61020e60048036038101906102099190610dcd565b6104e0565b60405161021b9190610d05565b60405180910390f35b60606003805461023390610e38565b80601f016020809104026020016040519081016040528092919081815260200182805461025f90610e38565b80156102aa5780601f10610281576101008083540402835291602001916102aa565b820191905f5260205f20905b81548152906001019060200180831161028d57829003601f168201915b5050505050905090565b5f806102be610562565b90506102cb818585610569565b600191505092915050565b5f600254905090565b5f806102e9610562565b90506102f685828561057b565b61030185858561060d565b60019150509392505050565b5f6012905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039b90610ed8565b60405180910390fd5b6103ae82826106fd565b7f9b88b9675691fbfec3a363ad9b90d05c990d7441465c35930396f7d536e65935816040516103dd9190610d05565b60405180910390a15050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461043d90610e38565b80601f016020809104026020016040519081016040528092919081815260200182805461046990610e38565b80156104b45780601f1061048b576101008083540402835291602001916104b4565b820191905f5260205f20905b81548152906001019060200180831161049757829003601f168201915b5050505050905090565b5f806104c8610562565b90506104d581858561060d565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b610576838383600161077c565b505050565b5f61058684846104e0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461060757818110156105f8578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016105ef93929190610f05565b60405180910390fd5b61060684848484035f61077c565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361067d575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016106749190610f3a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106ed575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106e49190610f3a565b60405180910390fd5b6106f883838361094b565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361076d575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107649190610f3a565b60405180910390fd5b6107785f838361094b565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036107ec575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016107e39190610f3a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361085c575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016108539190610f3a565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610945578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161093c9190610d05565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361099b578060025f82825461098f9190610f80565b92505081905550610a69565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610a24578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610a1b93929190610f05565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ab0578060025f8282540392505081905550610afa565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b579190610d05565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610ba682610b64565b610bb08185610b6e565b9350610bc0818560208601610b7e565b610bc981610b8c565b840191505092915050565b5f6020820190508181035f830152610bec8184610b9c565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c2182610bf8565b9050919050565b610c3181610c17565b8114610c3b575f80fd5b50565b5f81359050610c4c81610c28565b92915050565b5f819050919050565b610c6481610c52565b8114610c6e575f80fd5b50565b5f81359050610c7f81610c5b565b92915050565b5f8060408385031215610c9b57610c9a610bf4565b5b5f610ca885828601610c3e565b9250506020610cb985828601610c71565b9150509250929050565b5f8115159050919050565b610cd781610cc3565b82525050565b5f602082019050610cf05f830184610cce565b92915050565b610cff81610c52565b82525050565b5f602082019050610d185f830184610cf6565b92915050565b5f805f60608486031215610d3557610d34610bf4565b5b5f610d4286828701610c3e565b9350506020610d5386828701610c3e565b9250506040610d6486828701610c71565b9150509250925092565b5f60ff82169050919050565b610d8381610d6e565b82525050565b5f602082019050610d9c5f830184610d7a565b92915050565b5f60208284031215610db757610db6610bf4565b5b5f610dc484828501610c3e565b91505092915050565b5f8060408385031215610de357610de2610bf4565b5b5f610df085828601610c3e565b9250506020610e0185828601610c3e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610e4f57607f821691505b602082108103610e6257610e61610e0b565b5b50919050565b7f4f6e6c79207468652062616e6b2063616e206d696e74206e657720546f6b656e5f8201527f7321000000000000000000000000000000000000000000000000000000000000602082015250565b5f610ec2602283610b6e565b9150610ecd82610e68565b604082019050919050565b5f6020820190508181035f830152610eef81610eb6565b9050919050565b610eff81610c17565b82525050565b5f606082019050610f185f830186610ef6565b610f256020830185610cf6565b610f326040830184610cf6565b949350505050565b5f602082019050610f4d5f830184610ef6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f8a82610c52565b9150610f9583610c52565b9250828201905080821115610fad57610fac610f53565b5b9291505056fea264697066735822122043f90448a5ddda28fd3975178f0106ac473c7cb907b1120d8a9ddb417341aa6764736f6c634300081a0033000000000000000000000000d6d78d3eb0bfacac41b120059fa58d4453b7d899