0x608060405234801561001057600080fd5b506114d6806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80634d53f31a1461005c5780637c4610aa1461008c57806388da259a146100a8578063a39b06e3146100c4578063de6f24bb146100f4575b600080fd5b61007660048036038101906100719190610b6a565b610110565b6040516100839190610bc5565b60405180910390f35b6100a660048036038101906100a19190610be0565b6101f4565b005b6100c260048036038101906100bd9190610be0565b6103d1565b005b6100de60048036038101906100d99190610b6a565b61061c565b6040516100eb9190610c9d565b60405180910390f35b61010e60048036038101906101099190610df4565b61087e565b005b600082828173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061017957508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6101b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101af90610e9c565b60405180910390fd5b60006101c48686610ac5565b905060008082815260200190815260200160002060010160149054906101000a900460ff16935050505092915050565b60006102003383610ac5565b905060008082815260200190815260200160002060010160149054906101000a900460ff16610264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025b90610f08565b60405180910390fd5b60008082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610333575060008082815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036990610f74565b60405180910390fd5b600080600083815260200190815260200160002060010160146101000a81548160ff021916908315150217905550807f2c681178b8f16aa81e8ee8393effe0b77a957c888306324f09be9b2e228c823860405160405180910390a25050565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043690610fe0565b60405180910390fd5b600061044b3383610ac5565b905060008082815260200190815260200160002060010160149054906101000a900460ff16156104b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a79061104c565b60405180910390fd5b60405180606001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020016001151581525060008083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff0219169083151502179055509050508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16827f776325c1f38bef6797f1c9e171ec4f73da887bdea4c92f0d7e6a01bebb062c8560405160405180910390a45050565b6060600061062a8484610ac5565b905060008082815260200190815260200160002060010160149054906101000a900460ff1661068e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068590610f08565b60405180910390fd5b60008082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061075d575060008082815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61079c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610793906110b8565b60405180910390fd5b6001600082815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080546107f790611107565b80601f016020809104026020016040519081016040528092919081815260200182805461082390611107565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b505050505091505092915050565b600061088a3384610ac5565b905060008082815260200190815260200160002060010160149054906101000a900460ff166108ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e590610f08565b60405180910390fd5b60008082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109bd575060008082815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6109fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f390611184565b60405180910390fd5b816001600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209081610a59919061135a565b508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16827f6b0f42f7091afe23c5084379a2887abba1e36cd5a38e5e2e7c16dc0437940b6485604051610ab89190610c9d565b60405180910390a4505050565b60008282604051602001610ada929190611474565b60405160208183030381529060405280519060200120905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b3782610b0c565b9050919050565b610b4781610b2c565b8114610b5257600080fd5b50565b600081359050610b6481610b3e565b92915050565b60008060408385031215610b8157610b80610b02565b5b6000610b8f85828601610b55565b9250506020610ba085828601610b55565b9150509250929050565b60008115159050919050565b610bbf81610baa565b82525050565b6000602082019050610bda6000830184610bb6565b92915050565b600060208284031215610bf657610bf5610b02565b5b6000610c0484828501610b55565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c47578082015181840152602081019050610c2c565b60008484015250505050565b6000601f19601f8301169050919050565b6000610c6f82610c0d565b610c798185610c18565b9350610c89818560208601610c29565b610c9281610c53565b840191505092915050565b60006020820190508181036000830152610cb78184610c64565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610d0182610c53565b810181811067ffffffffffffffff82111715610d2057610d1f610cc9565b5b80604052505050565b6000610d33610af8565b9050610d3f8282610cf8565b919050565b600067ffffffffffffffff821115610d5f57610d5e610cc9565b5b610d6882610c53565b9050602081019050919050565b82818337600083830152505050565b6000610d97610d9284610d44565b610d29565b905082815260208101848484011115610db357610db2610cc4565b5b610dbe848285610d75565b509392505050565b600082601f830112610ddb57610dda610cbf565b5b8135610deb848260208601610d84565b91505092915050565b60008060408385031215610e0b57610e0a610b02565b5b6000610e1985828601610b55565b925050602083013567ffffffffffffffff811115610e3a57610e39610b07565b5b610e4685828601610dc6565b9150509250929050565b7f4e6f7420617574686f72697a6564000000000000000000000000000000000000600082015250565b6000610e86600e83610c18565b9150610e9182610e50565b602082019050919050565b60006020820190508181036000830152610eb581610e79565b9050919050565b7f43686174206e6f74206f70656e65640000000000000000000000000000000000600082015250565b6000610ef2600f83610c18565b9150610efd82610ebc565b602082019050919050565b60006020820190508181036000830152610f2181610ee5565b9050919050565b7f4e6f7420617574686f72697a656420746f20636c6f7365206368617400000000600082015250565b6000610f5e601c83610c18565b9150610f6982610f28565b602082019050919050565b60006020820190508181036000830152610f8d81610f51565b9050919050565b7f43616e6e6f74206f70656e2063686174207769746820796f757273656c660000600082015250565b6000610fca601e83610c18565b9150610fd582610f94565b602082019050919050565b60006020820190508181036000830152610ff981610fbd565b9050919050565b7f4368617420616c7265616479206f70656e656400000000000000000000000000600082015250565b6000611036601383610c18565b915061104182611000565b602082019050919050565b6000602082019050818103600083015261106581611029565b9050919050565b7f4e6f7420617574686f72697a656420746f2076696577206d6573736167650000600082015250565b60006110a2601e83610c18565b91506110ad8261106c565b602082019050919050565b600060208201905081810360008301526110d181611095565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061111f57607f821691505b602082108103611132576111316110d8565b5b50919050565b7f4e6f7420617574686f72697a656420746f2073656e64206d6573736167650000600082015250565b600061116e601e83610c18565b915061117982611138565b602082019050919050565b6000602082019050818103600083015261119d81611161565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026112067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826111c9565b61121086836111c9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061125761125261124d84611228565b611232565b611228565b9050919050565b6000819050919050565b6112718361123c565b61128561127d8261125e565b8484546111d6565b825550505050565b600090565b61129a61128d565b6112a5818484611268565b505050565b5b818110156112c9576112be600082611292565b6001810190506112ab565b5050565b601f82111561130e576112df816111a4565b6112e8846111b9565b810160208510156112f7578190505b61130b611303856111b9565b8301826112aa565b50505b505050565b600082821c905092915050565b600061133160001984600802611313565b1980831691505092915050565b600061134a8383611320565b9150826002028217905092915050565b61136382610c0d565b67ffffffffffffffff81111561137c5761137b610cc9565b5b6113868254611107565b6113918282856112cd565b600060209050601f8311600181146113c457600084156113b2578287015190505b6113bc858261133e565b865550611424565b601f1984166113d2866111a4565b60005b828110156113fa578489015182556001820191506020850194506020810190506113d5565b868310156114175784890151611413601f891682611320565b8355505b6001600288020188555050505b505050505050565b60008160601b9050919050565b60006114448261142c565b9050919050565b600061145682611439565b9050919050565b61146e61146982610b2c565b61144b565b82525050565b6000611480828561145d565b601482019150611490828461145d565b601482019150819050939250505056fea2646970667358221220c1a5f19d0063ee1cab380d973940f59d4aab89f6197b7672342264c3df27f9c164736f6c63430008120033