60806040523480156200001157600080fd5b506040518060400160405280600781526020017f727354726f6c6c000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f727354726f6c6c0000000000000000000000000000000000000000000000000081525081600390816200008f9190620005f8565b508060049081620000a19190620005f8565b505050620000bb336461c9f36800620000c160201b60201c565b62000816565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001365760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200012d919062000724565b60405180910390fd5b6200014a600083836200014e60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620001a457806002600082825462000197919062000770565b925050819055506200027a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000233578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200022a93929190620007bc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002c5578060026000828254039250508190555062000312565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003719190620007f9565b60405180910390a3505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200040057607f821691505b602082108103620004165762000415620003b8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000441565b6200048c868362000441565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004d9620004d3620004cd84620004a4565b620004ae565b620004a4565b9050919050565b6000819050919050565b620004f583620004b8565b6200050d6200050482620004e0565b8484546200044e565b825550505050565b600090565b6200052462000515565b62000531818484620004ea565b505050565b5b8181101562000559576200054d6000826200051a565b60018101905062000537565b5050565b601f821115620005a85762000572816200041c565b6200057d8462000431565b810160208510156200058d578190505b620005a56200059c8562000431565b83018262000536565b50505b505050565b600082821c905092915050565b6000620005cd60001984600802620005ad565b1980831691505092915050565b6000620005e88383620005ba565b9150826002028217905092915050565b62000603826200037e565b67ffffffffffffffff8111156200061f576200061e62000389565b5b6200062b8254620003e7565b620006388282856200055d565b600060209050601f8311600181146200067057600084156200065b578287015190505b620006678582620005da565b865550620006d7565b601f19841662000680866200041c565b60005b82811015620006aa5784890151825560018201915060208501945060208101905062000683565b86831015620006ca5784890151620006c6601f891682620005ba565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200070c82620006df565b9050919050565b6200071e81620006ff565b82525050565b60006020820190506200073b600083018462000713565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200077d82620004a4565b91506200078a83620004a4565b9250828201905080821115620007a557620007a462000741565b5b92915050565b620007b681620004a4565b82525050565b6000606082019050620007d3600083018662000713565b620007e26020830185620007ab565b620007f16040830184620007ab565b949350505050565b6000602082019050620008106000830184620007ab565b92915050565b610e5180620008266000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063313ce56711610066578063313ce5671461013457806370a082311461015257806395d89b4114610182578063a9059cbb146101a0578063dd62ed3e146101d057610093565b806306fdde0314610098578063095ea7b3146100b657806318160ddd146100e657806323b872dd14610104575b600080fd5b6100a0610200565b6040516100ad9190610aa5565b60405180910390f35b6100d060048036038101906100cb9190610b60565b610292565b6040516100dd9190610bbb565b60405180910390f35b6100ee6102b5565b6040516100fb9190610be5565b60405180910390f35b61011e60048036038101906101199190610c00565b6102bf565b60405161012b9190610bbb565b60405180910390f35b61013c6102ee565b6040516101499190610c6f565b60405180910390f35b61016c60048036038101906101679190610c8a565b6102f3565b6040516101799190610be5565b60405180910390f35b61018a61033b565b6040516101979190610aa5565b60405180910390f35b6101ba60048036038101906101b59190610b60565b6103cd565b6040516101c79190610bbb565b60405180910390f35b6101ea60048036038101906101e59190610cb7565b6103f0565b6040516101f79190610be5565b60405180910390f35b60606003805461020f90610d26565b80601f016020809104026020016040519081016040528092919081815260200182805461023b90610d26565b80156102885780601f1061025d57610100808354040283529160200191610288565b820191906000526020600020905b81548152906001019060200180831161026b57829003601f168201915b5050505050905090565b60008061029d610477565b90506102aa81858561047f565b600191505092915050565b6000600254905090565b6000806102ca610477565b90506102d7858285610491565b6102e2858585610525565b60019150509392505050565b600090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461034a90610d26565b80601f016020809104026020016040519081016040528092919081815260200182805461037690610d26565b80156103c35780601f10610398576101008083540402835291602001916103c3565b820191906000526020600020905b8154815290600101906020018083116103a657829003601f168201915b5050505050905090565b6000806103d8610477565b90506103e5818585610525565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b61048c8383836001610619565b505050565b600061049d84846103f0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461051f578181101561050f578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161050693929190610d66565b60405180910390fd5b61051e84848484036000610619565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105975760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161058e9190610d9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106095760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106009190610d9d565b60405180910390fd5b6106148383836107f0565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361068b5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016106829190610d9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106fd5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016106f49190610d9d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156107ea578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516107e19190610be5565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108425780600260008282546108369190610de7565b92505081905550610915565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156108ce578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016108c593929190610d66565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361095e57806002600082825403925050819055506109ab565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a089190610be5565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610a4f578082015181840152602081019050610a34565b60008484015250505050565b6000601f19601f8301169050919050565b6000610a7782610a15565b610a818185610a20565b9350610a91818560208601610a31565b610a9a81610a5b565b840191505092915050565b60006020820190508181036000830152610abf8184610a6c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610af782610acc565b9050919050565b610b0781610aec565b8114610b1257600080fd5b50565b600081359050610b2481610afe565b92915050565b6000819050919050565b610b3d81610b2a565b8114610b4857600080fd5b50565b600081359050610b5a81610b34565b92915050565b60008060408385031215610b7757610b76610ac7565b5b6000610b8585828601610b15565b9250506020610b9685828601610b4b565b9150509250929050565b60008115159050919050565b610bb581610ba0565b82525050565b6000602082019050610bd06000830184610bac565b92915050565b610bdf81610b2a565b82525050565b6000602082019050610bfa6000830184610bd6565b92915050565b600080600060608486031215610c1957610c18610ac7565b5b6000610c2786828701610b15565b9350506020610c3886828701610b15565b9250506040610c4986828701610b4b565b9150509250925092565b600060ff82169050919050565b610c6981610c53565b82525050565b6000602082019050610c846000830184610c60565b92915050565b600060208284031215610ca057610c9f610ac7565b5b6000610cae84828501610b15565b91505092915050565b60008060408385031215610cce57610ccd610ac7565b5b6000610cdc85828601610b15565b9250506020610ced85828601610b15565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610d3e57607f821691505b602082108103610d5157610d50610cf7565b5b50919050565b610d6081610aec565b82525050565b6000606082019050610d7b6000830186610d57565b610d886020830185610bd6565b610d956040830184610bd6565b949350505050565b6000602082019050610db26000830184610d57565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610df282610b2a565b9150610dfd83610b2a565b9250828201905080821115610e1557610e14610db8565b5b9291505056fea2646970667358221220d91feb2473832d3fdde9f683fbbb51f9f45e9199b22f5195b1b61acd35d519bf64736f6c63430008140033