60806040523480156200001157600080fd5b5060405162004b8c38038062004b8c83398181016040528101906200003791906200037f565b33816200004a816200011160201b60201c565b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000c05760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000b791906200047d565b60405180910390fd5b620000d1816200012660201b60201c565b508260049081620000e39190620006e5565b508160059081620000f59190620006e5565b508060069081620001079190620006e5565b50505050620007cc565b8060029081620001229190620006e5565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000255826200020a565b810181811067ffffffffffffffff821117156200027757620002766200021b565b5b80604052505050565b60006200028c620001ec565b90506200029a82826200024a565b919050565b600067ffffffffffffffff821115620002bd57620002bc6200021b565b5b620002c8826200020a565b9050602081019050919050565b60005b83811015620002f5578082015181840152602081019050620002d8565b60008484015250505050565b60006200031862000312846200029f565b62000280565b90508281526020810184848401111562000337576200033662000205565b5b62000344848285620002d5565b509392505050565b600082601f83011262000364576200036362000200565b5b81516200037684826020860162000301565b91505092915050565b6000806000606084860312156200039b576200039a620001f6565b5b600084015167ffffffffffffffff811115620003bc57620003bb620001fb565b5b620003ca868287016200034c565b935050602084015167ffffffffffffffff811115620003ee57620003ed620001fb565b5b620003fc868287016200034c565b925050604084015167ffffffffffffffff81111562000420576200041f620001fb565b5b6200042e868287016200034c565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004658262000438565b9050919050565b620004778162000458565b82525050565b60006020820190506200049460008301846200046c565b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004ed57607f821691505b602082108103620005035762000502620004a5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200056d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200052e565b6200057986836200052e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005c6620005c0620005ba8462000591565b6200059b565b62000591565b9050919050565b6000819050919050565b620005e283620005a5565b620005fa620005f182620005cd565b8484546200053b565b825550505050565b600090565b6200061162000602565b6200061e818484620005d7565b505050565b5b8181101562000646576200063a60008262000607565b60018101905062000624565b5050565b601f82111562000695576200065f8162000509565b6200066a846200051e565b810160208510156200067a578190505b6200069262000689856200051e565b83018262000623565b50505b505050565b600082821c905092915050565b6000620006ba600019846008026200069a565b1980831691505092915050565b6000620006d58383620006a7565b9150826002028217905092915050565b620006f0826200049a565b67ffffffffffffffff8111156200070c576200070b6200021b565b5b620007188254620004d4565b620007258282856200064a565b600060209050601f8311600181146200075d576000841562000748578287015190505b620007548582620006c7565b865550620007c4565b601f1984166200076d8662000509565b60005b82811015620007975784890151825560018201915060208501945060208101905062000770565b86831015620007b75784890151620007b3601f891682620006a7565b8355505b6001600288020188555050505b505050505050565b6143b080620007dc6000396000f3fe60806040526004361061023a5760003560e01c80638da5cb5b1161012e578063daff97b5116100ab578063f2fde38b1161006f578063f2fde38b14610870578063f7d9757714610899578063fc784d49146108c2578063fcae368c146108eb578063fd1767bc146109165761023a565b8063daff97b51461079c578063e03fac3e146107c5578063e09d9127146107ee578063e985e9c51461080a578063f242432a146108475761023a565b8063c457fb37116100f2578063c457fb37146106a7578063c9a9bb18146106e4578063c9ab39501461070d578063cac8d5381461074a578063d8f4a2ec146107735761023a565b80638da5cb5b146105c25780639064ad5c146105ed57806395d89b411461062a578063a22cb46514610655578063b390c0ab1461067e5761023a565b8063208b5059116101bc5780634e1273f4116101805780634e1273f4146104dd5780635b7ac95e1461051a578063715018a6146105435780637996f5711461055a5780637aca9312146105855761023a565b8063208b50591461040c5780632eb2c2d61461042357806332c2a1981461044c5780633ccfd60b14610489578063472d315d146104a05761023a565b806315f31bd11161020357806315f31bd11461034a578063162094c414610361578063176861111461038a57806319b88edb146103b35780631b2ef1ca146103f05761023a565b8062fdd58e1461023f57806301ffc9a71461027c57806306b1cbf6146102b957806306fdde03146102e25780630e89341c1461030d575b600080fd5b34801561024b57600080fd5b5061026660048036038101906102619190612e6f565b610932565b6040516102739190612ebe565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612f31565b61098c565b6040516102b09190612f79565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190612fc0565b61099e565b005b3480156102ee57600080fd5b506102f76109d5565b6040516103049190613090565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f91906130b2565b610a63565b6040516103419190613090565b60405180910390f35b34801561035657600080fd5b5061035f610b7c565b005b34801561036d57600080fd5b5061038860048036038101906103839190613214565b610cc2565b005b34801561039657600080fd5b506103b160048036038101906103ac9190613270565b610d27565b005b3480156103bf57600080fd5b506103da60048036038101906103d591906130b2565b610d73565b6040516103e79190612ebe565b60405180910390f35b61040a6004803603810190610405919061329d565b610d90565b005b34801561041857600080fd5b50610421610e9c565b005b34801561042f57600080fd5b5061044a60048036038101906104459190613446565b610fe2565b005b34801561045857600080fd5b50610473600480360381019061046e91906130b2565b611074565b6040516104809190612f79565b60405180910390f35b34801561049557600080fd5b5061049e61109e565b005b3480156104ac57600080fd5b506104c760048036038101906104c291906130b2565b6110f6565b6040516104d49190612ebe565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff91906135d8565b611113565b604051610511919061370e565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c919061329d565b611222565b005b34801561054f57600080fd5b50610558611246565b005b34801561056657600080fd5b5061056f61125a565b60405161057c919061378f565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a791906130b2565b611280565b6040516105b99190612f79565b60405180910390f35b3480156105ce57600080fd5b506105d76112aa565b6040516105e491906137b9565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f91906130b2565b6112d4565b6040516106219190612f79565b60405180910390f35b34801561063657600080fd5b5061063f6112fe565b60405161064c9190613090565b60405180910390f35b34801561066157600080fd5b5061067c600480360381019061067791906137d4565b61138c565b005b34801561068a57600080fd5b506106a560048036038101906106a0919061329d565b6113ff565b005b3480156106b357600080fd5b506106ce60048036038101906106c991906130b2565b61145a565b6040516106db9190612ebe565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190612fc0565b611477565b005b34801561071957600080fd5b50610734600480360381019061072f91906130b2565b6114ae565b6040516107419190612ebe565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c9190613270565b6114cb565b005b34801561077f57600080fd5b5061079a60048036038101906107959190613814565b611517565b005b3480156107a857600080fd5b506107c360048036038101906107be9190612fc0565b611664565b005b3480156107d157600080fd5b506107ec60048036038101906107e7919061329d565b61169b565b005b6108086004803603810190610803919061329d565b6116bf565b005b34801561081657600080fd5b50610831600480360381019061082c91906138fa565b61186f565b60405161083e9190612f79565b60405180910390f35b34801561085357600080fd5b5061086e6004803603810190610869919061393a565b611903565b005b34801561087c57600080fd5b5061089760048036038101906108929190613270565b611995565b005b3480156108a557600080fd5b506108c060048036038101906108bb919061329d565b611a1b565b005b3480156108ce57600080fd5b506108e960048036038101906108e4919061329d565b611a3f565b005b3480156108f757600080fd5b50610900611a63565b60405161090d919061378f565b60405180910390f35b610930600480360381019061092b919061329d565b611a89565b005b600080600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061099782611c39565b9050919050565b6109a6611d1b565b80600c600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600480546109e290613a00565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e90613a00565b8015610a5b5780601f10610a3057610100808354040283529160200191610a5b565b820191906000526020600020905b815481529060010190602001808311610a3e57829003601f168201915b505050505081565b60606000600860008481526020019081526020016000205411610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab290613aa3565b60405180910390fd5b6000600760008481526020019081526020016000208054610adb90613a00565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0790613a00565b8015610b545780601f10610b2957610100808354040283529160200191610b54565b820191906000526020600020905b815481529060010190602001808311610b3757829003601f168201915b505050505090506000815111610b7257610b6d83611da2565b610b74565b805b915050919050565b610b84611d1b565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c1e91906137b9565b602060405180830381865afa158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f9190613ad8565b6040518363ffffffff1660e01b8152600401610c7c929190613b05565b6020604051808303816000875af1158015610c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbf9190613b43565b50565b610cca611d1b565b80600760008481526020019081526020016000209081610cea9190613d12565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610d1b9190613090565b60405180910390a25050565b610d2f611d1b565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060086000838152602001908152602001600020549050919050565b600a600083815260200190815260200160002060009054906101000a900460ff1615610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de890613e30565b60405180910390fd5b610df96112aa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8d57806009600084815260200190815260200160002054610e4a9190613e7f565b341015610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8390613f0d565b60405180910390fd5b5b610e98338383611e36565b5050565b610ea4611d1b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f3e91906137b9565b602060405180830381865afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f9190613ad8565b6040518363ffffffff1660e01b8152600401610f9c929190613b05565b6020604051808303816000875af1158015610fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdf9190613b43565b50565b610fef8585858585611e56565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611065929190613f2d565b60405180910390a45050505050565b6000600b600083815260200190815260200160002060009054906101000a900460ff169050919050565b6110a6611d1b565b6110ae6112aa565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110f3573d6000803e3d6000fd5b50565b6000600f6000838152602001908152602001600020549050919050565b6060815183511461115f57815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401611156929190613f64565b60405180910390fd5b6000835167ffffffffffffffff81111561117c5761117b6130e9565b5b6040519080825280602002602001820160405280156111aa5781602001602082028036833780820191505090505b50905060005b8451811015611217576111e76111cf8287611efe90919063ffffffff16565b6111e28387611f1290919063ffffffff16565b610932565b8282815181106111fa576111f9613f8d565b5b6020026020010181815250508061121090613fbc565b90506111b0565b508091505092915050565b61122a611d1b565b80600e6000848152602001908152602001600020819055505050565b61124e611d1b565b6112586000611f26565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c600083815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600a600083815260200190815260200160002060009054906101000a900460ff169050919050565b6005805461130b90613a00565b80601f016020809104026020016040519081016040528092919081815260200182805461133790613a00565b80156113845780601f1061135957610100808354040283529160200191611384565b820191906000526020600020905b81548152906001019060200180831161136757829003601f168201915b505050505081565b6113968282611fec565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113f39190612f79565b60405180910390a35050565b8061140a3384610932565b101561144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290614050565b60405180910390fd5b611456338383612002565b5050565b600060096000838152602001908152602001600020549050919050565b61147f611d1b565b80600b600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600e6000838152602001908152602001600020549050919050565b6114d3611d1b565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61151f611d1b565b87600960008b81526020019081526020016000208190555086600860008b81526020019081526020016000208190555085600a60008b815260200190815260200160002060006101000a81548160ff02191690831515021790555082600b60008b815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60008b815260200190815260200160002060006101000a81548160ff02191690831515021790555083600e60008b81526020019081526020016000208190555081600f60008b81526020019081526020016000208190555084600760008b815260200190815260200160002090816116209190613d12565b50887f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b866040516116519190613090565b60405180910390a2505050505050505050565b61166c611d1b565b80600a600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6116a3611d1b565b80600f6000848152602001908152602001600020819055505050565b600b600083815260200190815260200160002060009054906101000a900460ff1615611720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171790613e30565b60405180910390fd5b6117286112aa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461186057600081600e60008581526020019081526020016000205461177b9190613e7f565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016117dc93929190614070565b6020604051808303816000875af11580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181f9190613b43565b61185e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611855906140f3565b60405180910390fd5b505b61186b338383611e36565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61191085858585856120a9565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051611986929190613f64565b60405180910390a45050505050565b61199d611d1b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a0f5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611a0691906137b9565b60405180910390fd5b611a1881611f26565b50565b611a23611d1b565b8060096000848152602001908152602001600020819055505050565b611a47611d1b565b8060086000848152602001908152602001600020819055505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c600083815260200190815260200160002060009054906101000a900460ff1615611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae190613e30565b60405180910390fd5b611af26112aa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c2a57600081600f600085815260200190815260200160002054611b459190613e7f565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611ba693929190614070565b6020604051808303816000875af1158015611bc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be99190613b43565b611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f9061415f565b60405180910390fd5b505b611c35338383611e36565b5050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d0457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d145750611d1382612151565b5b9050919050565b611d236121bb565b73ffffffffffffffffffffffffffffffffffffffff16611d416112aa565b73ffffffffffffffffffffffffffffffffffffffff1614611da057611d646121bb565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611d9791906137b9565b60405180910390fd5b565b606060028054611db190613a00565b80601f0160208091040260200160405190810160405280929190818152602001828054611ddd90613a00565b8015611e2a5780601f10611dff57610100808354040283529160200191611e2a565b820191906000526020600020905b815481529060010190602001808311611e0d57829003601f168201915b50505050509050919050565b611e51838383604051806020016040528060008152506121c3565b505050565b6000611e606121bb565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015611ea55750611ea3868261186f565b155b15611ee95780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401611ee092919061417f565b60405180910390fd5b611ef6868686868661225c565b505050505050565b600060208202602084010151905092915050565b600060208202602084010151905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ffe611ff76121bb565b8383612354565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120745760006040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161206b91906137b9565b60405180910390fd5b60008061208184846124c4565b915091506120a28560008484604051806020016040528060008152506124f4565b5050505050565b60006120b36121bb565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156120f857506120f6868261186f565b155b1561213c5780866040517fe237d92200000000000000000000000000000000000000000000000000000000815260040161213392919061417f565b60405180910390fd5b61214986868686866125a6565b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036122355760006040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161222c91906137b9565b60405180910390fd5b60008061224285856124c4565b915091506122546000878484876124f4565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036122ce5760006040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016122c591906137b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036123405760006040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161233791906137b9565b60405180910390fd5b61234d85858585856124f4565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123c65760006040517fced3e1000000000000000000000000000000000000000000000000000000000081526004016123bd91906137b9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124b79190612f79565b60405180910390a3505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b612500858585856126b1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461259f57600061253e6121bb565b9050600184510361258e57600061255f600086611f1290919063ffffffff16565b90506000612577600086611f1290919063ffffffff16565b9050612587838989858589612a5f565b505061259d565b61259c818787878787612c13565b5b505b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036126185760006040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161260f91906137b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361268a5760006040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161268191906137b9565b60405180910390fd5b60008061269785856124c4565b915091506126a887878484876124f4565b50505050505050565b80518251146126fb57815181516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016126f2929190613f64565b60405180910390fd5b60006127056121bb565b905060005b835181101561291a5760006127288286611f1290919063ffffffff16565b9050600061273f8386611f1290919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461286c57600080600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561281457888183856040517f03dee4c500000000000000000000000000000000000000000000000000000000815260040161280b94939291906141a8565b60405180910390fd5b81810360008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612907578060008084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128ff91906141ed565b925050819055505b50508061291390613fbc565b905061270a565b5060018351036129d957600061293a600085611f1290919063ffffffff16565b90506000612952600085611f1290919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516129ca929190613f64565b60405180910390a45050612a58565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612a4f929190613f2d565b60405180910390a45b5050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163b1115612c0b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ac0959493929190614276565b6020604051808303816000875af1925050508015612afc57506040513d601f19601f82011682018060405250810190612af991906142e5565b60015b612b80573d8060008114612b2c576040519150601f19603f3d011682016040523d82523d6000602084013e612b31565b606091505b506000815103612b7857846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612b6f91906137b9565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c0957846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612c0091906137b9565b60405180910390fd5b505b505050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163b1115612dbf578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612c74959493929190614312565b6020604051808303816000875af1925050508015612cb057506040513d601f19601f82011682018060405250810190612cad91906142e5565b60015b612d34573d8060008114612ce0576040519150601f19603f3d011682016040523d82523d6000602084013e612ce5565b606091505b506000815103612d2c57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612d2391906137b9565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612dbd57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612db491906137b9565b60405180910390fd5b505b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e0682612ddb565b9050919050565b612e1681612dfb565b8114612e2157600080fd5b50565b600081359050612e3381612e0d565b92915050565b6000819050919050565b612e4c81612e39565b8114612e5757600080fd5b50565b600081359050612e6981612e43565b92915050565b60008060408385031215612e8657612e85612dd1565b5b6000612e9485828601612e24565b9250506020612ea585828601612e5a565b9150509250929050565b612eb881612e39565b82525050565b6000602082019050612ed36000830184612eaf565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f0e81612ed9565b8114612f1957600080fd5b50565b600081359050612f2b81612f05565b92915050565b600060208284031215612f4757612f46612dd1565b5b6000612f5584828501612f1c565b91505092915050565b60008115159050919050565b612f7381612f5e565b82525050565b6000602082019050612f8e6000830184612f6a565b92915050565b612f9d81612f5e565b8114612fa857600080fd5b50565b600081359050612fba81612f94565b92915050565b60008060408385031215612fd757612fd6612dd1565b5b6000612fe585828601612e5a565b9250506020612ff685828601612fab565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561303a57808201518184015260208101905061301f565b60008484015250505050565b6000601f19601f8301169050919050565b600061306282613000565b61306c818561300b565b935061307c81856020860161301c565b61308581613046565b840191505092915050565b600060208201905081810360008301526130aa8184613057565b905092915050565b6000602082840312156130c8576130c7612dd1565b5b60006130d684828501612e5a565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61312182613046565b810181811067ffffffffffffffff821117156131405761313f6130e9565b5b80604052505050565b6000613153612dc7565b905061315f8282613118565b919050565b600067ffffffffffffffff82111561317f5761317e6130e9565b5b61318882613046565b9050602081019050919050565b82818337600083830152505050565b60006131b76131b284613164565b613149565b9050828152602081018484840111156131d3576131d26130e4565b5b6131de848285613195565b509392505050565b600082601f8301126131fb576131fa6130df565b5b813561320b8482602086016131a4565b91505092915050565b6000806040838503121561322b5761322a612dd1565b5b600061323985828601612e5a565b925050602083013567ffffffffffffffff81111561325a57613259612dd6565b5b613266858286016131e6565b9150509250929050565b60006020828403121561328657613285612dd1565b5b600061329484828501612e24565b91505092915050565b600080604083850312156132b4576132b3612dd1565b5b60006132c285828601612e5a565b92505060206132d385828601612e5a565b9150509250929050565b600067ffffffffffffffff8211156132f8576132f76130e9565b5b602082029050602081019050919050565b600080fd5b600061332161331c846132dd565b613149565b9050808382526020820190506020840283018581111561334457613343613309565b5b835b8181101561336d57806133598882612e5a565b845260208401935050602081019050613346565b5050509392505050565b600082601f83011261338c5761338b6130df565b5b813561339c84826020860161330e565b91505092915050565b600067ffffffffffffffff8211156133c0576133bf6130e9565b5b6133c982613046565b9050602081019050919050565b60006133e96133e4846133a5565b613149565b905082815260208101848484011115613405576134046130e4565b5b613410848285613195565b509392505050565b600082601f83011261342d5761342c6130df565b5b813561343d8482602086016133d6565b91505092915050565b600080600080600060a0868803121561346257613461612dd1565b5b600061347088828901612e24565b955050602061348188828901612e24565b945050604086013567ffffffffffffffff8111156134a2576134a1612dd6565b5b6134ae88828901613377565b935050606086013567ffffffffffffffff8111156134cf576134ce612dd6565b5b6134db88828901613377565b925050608086013567ffffffffffffffff8111156134fc576134fb612dd6565b5b61350888828901613418565b9150509295509295909350565b600067ffffffffffffffff8211156135305761352f6130e9565b5b602082029050602081019050919050565b600061355461354f84613515565b613149565b9050808382526020820190506020840283018581111561357757613576613309565b5b835b818110156135a0578061358c8882612e24565b845260208401935050602081019050613579565b5050509392505050565b600082601f8301126135bf576135be6130df565b5b81356135cf848260208601613541565b91505092915050565b600080604083850312156135ef576135ee612dd1565b5b600083013567ffffffffffffffff81111561360d5761360c612dd6565b5b613619858286016135aa565b925050602083013567ffffffffffffffff81111561363a57613639612dd6565b5b61364685828601613377565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61368581612e39565b82525050565b6000613697838361367c565b60208301905092915050565b6000602082019050919050565b60006136bb82613650565b6136c5818561365b565b93506136d08361366c565b8060005b838110156137015781516136e8888261368b565b97506136f3836136a3565b9250506001810190506136d4565b5085935050505092915050565b6000602082019050818103600083015261372881846136b0565b905092915050565b6000819050919050565b600061375561375061374b84612ddb565b613730565b612ddb565b9050919050565b60006137678261373a565b9050919050565b60006137798261375c565b9050919050565b6137898161376e565b82525050565b60006020820190506137a46000830184613780565b92915050565b6137b381612dfb565b82525050565b60006020820190506137ce60008301846137aa565b92915050565b600080604083850312156137eb576137ea612dd1565b5b60006137f985828601612e24565b925050602061380a85828601612fab565b9150509250929050565b60008060008060008060008060006101208a8c03121561383757613836612dd1565b5b60006138458c828d01612e5a565b99505060206138568c828d01612e5a565b98505060406138678c828d01612e5a565b97505060606138788c828d01612fab565b96505060808a013567ffffffffffffffff81111561389957613898612dd6565b5b6138a58c828d016131e6565b95505060a06138b68c828d01612e5a565b94505060c06138c78c828d01612fab565b93505060e06138d88c828d01612e5a565b9250506101006138ea8c828d01612fab565b9150509295985092959850929598565b6000806040838503121561391157613910612dd1565b5b600061391f85828601612e24565b925050602061393085828601612e24565b9150509250929050565b600080600080600060a0868803121561395657613955612dd1565b5b600061396488828901612e24565b955050602061397588828901612e24565b945050604061398688828901612e5a565b935050606061399788828901612e5a565b925050608086013567ffffffffffffffff8111156139b8576139b7612dd6565b5b6139c488828901613418565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a1857607f821691505b602082108103613a2b57613a2a6139d1565b5b50919050565b7f455243313135353a2055524920717565727920666f72206e6f6e65786973746560008201527f6e7420746f6b656e000000000000000000000000000000000000000000000000602082015250565b6000613a8d60288361300b565b9150613a9882613a31565b604082019050919050565b60006020820190508181036000830152613abc81613a80565b9050919050565b600081519050613ad281612e43565b92915050565b600060208284031215613aee57613aed612dd1565b5b6000613afc84828501613ac3565b91505092915050565b6000604082019050613b1a60008301856137aa565b613b276020830184612eaf565b9392505050565b600081519050613b3d81612f94565b92915050565b600060208284031215613b5957613b58612dd1565b5b6000613b6784828501613b2e565b91505092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613bd27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613b95565b613bdc8683613b95565b95508019841693508086168417925050509392505050565b6000613c0f613c0a613c0584612e39565b613730565b612e39565b9050919050565b6000819050919050565b613c2983613bf4565b613c3d613c3582613c16565b848454613ba2565b825550505050565b600090565b613c52613c45565b613c5d818484613c20565b505050565b5b81811015613c8157613c76600082613c4a565b600181019050613c63565b5050565b601f821115613cc657613c9781613b70565b613ca084613b85565b81016020851015613caf578190505b613cc3613cbb85613b85565b830182613c62565b50505b505050565b600082821c905092915050565b6000613ce960001984600802613ccb565b1980831691505092915050565b6000613d028383613cd8565b9150826002028217905092915050565b613d1b82613000565b67ffffffffffffffff811115613d3457613d336130e9565b5b613d3e8254613a00565b613d49828285613c85565b600060209050601f831160018114613d7c5760008415613d6a578287015190505b613d748582613cf6565b865550613ddc565b601f198416613d8a86613b70565b60005b82811015613db257848901518255600182019150602085019450602081019050613d8d565b86831015613dcf5784890151613dcb601f891682613cd8565b8355505b6001600288020188555050505b505050505050565b7f546f6b656e206973207061757365640000000000000000000000000000000000600082015250565b6000613e1a600f8361300b565b9150613e2582613de4565b602082019050919050565b60006020820190508181036000830152613e4981613e0d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e8a82612e39565b9150613e9583612e39565b9250828202613ea381612e39565b91508282048414831517613eba57613eb9613e50565b5b5092915050565b7f496e73756666696369656e742066756e64732073656e74000000000000000000600082015250565b6000613ef760178361300b565b9150613f0282613ec1565b602082019050919050565b60006020820190508181036000830152613f2681613eea565b9050919050565b60006040820190508181036000830152613f4781856136b0565b90508181036020830152613f5b81846136b0565b90509392505050565b6000604082019050613f796000830185612eaf565b613f866020830184612eaf565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613fc782612e39565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ff957613ff8613e50565b5b600182019050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061403a60148361300b565b915061404582614004565b602082019050919050565b600060208201905081810360008301526140698161402d565b9050919050565b600060608201905061408560008301866137aa565b61409260208301856137aa565b61409f6040830184612eaf565b949350505050565b7f4661696c656420746f207472616e73666572204154485220746f6b656e730000600082015250565b60006140dd601e8361300b565b91506140e8826140a7565b602082019050919050565b6000602082019050818103600083015261410c816140d0565b9050919050565b7f4661696c656420746f207472616e7366657220455243323020746f6b656e7300600082015250565b6000614149601f8361300b565b915061415482614113565b602082019050919050565b600060208201905081810360008301526141788161413c565b9050919050565b600060408201905061419460008301856137aa565b6141a160208301846137aa565b9392505050565b60006080820190506141bd60008301876137aa565b6141ca6020830186612eaf565b6141d76040830185612eaf565b6141e46060830184612eaf565b95945050505050565b60006141f882612e39565b915061420383612e39565b925082820190508082111561421b5761421a613e50565b5b92915050565b600081519050919050565b600082825260208201905092915050565b600061424882614221565b614252818561422c565b935061426281856020860161301c565b61426b81613046565b840191505092915050565b600060a08201905061428b60008301886137aa565b61429860208301876137aa565b6142a56040830186612eaf565b6142b26060830185612eaf565b81810360808301526142c4818461423d565b90509695505050505050565b6000815190506142df81612f05565b92915050565b6000602082840312156142fb576142fa612dd1565b5b6000614309848285016142d0565b91505092915050565b600060a08201905061432760008301886137aa565b61433460208301876137aa565b818103604083015261434681866136b0565b9050818103606083015261435a81856136b0565b9050818103608083015261436e818461423d565b9050969550505050505056fea2646970667358221220fa78468205e90139458ff5f035f6aab522a8100e84cbcd3983117da35357941364736f6c63430008120033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000205761792054656c6c6572e280997320416574686572696320456d706f7269756d0000000000000000000000000000000000000000000000000000000000000004575441450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045754414500000000000000000000000000000000000000000000000000000000