60806040525f60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801562000090575f80fd5b506040518060400160405280601181526020017f74656d6574686565206368656c756d65740000000000000000000000000000008152506040518060400160405280600881526020017f6368656c756d657400000000000000000000000000000000000000000000000081525081600390816200010e919062000b6d565b50806004908162000120919062000b6d565b5050506200016433620001386200016a60201b60201c565b600a62000146919062000dda565b64a0ba9664b862000158919062000e2a565b6200017260201b60201c565b62000fd7565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001e5575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620001dc919062000eb7565b60405180910390fd5b6f07da04d868958cb0840194eacbbafc07601302600460010202600555620002155f83836200021960201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200026d578060025f82825462000260919062000ed2565b925050819055506200033e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620002f9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620002f09392919062000f1d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000387578060025f8282540392505081905550620004f1565b8260075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000418816200055d60201b60201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550620004706200059660201b60201c565b5f60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000550919062000f58565b60405180910390a3505050565b5f6200056e6200073860201b60201c565b156200058d5762000585826200080460201b60201c565b905062000591565b8190505b919050565b620005a66200082c60201b60201c565b60015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036200073657620006776200086a60201b60201c565b60015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b565b5f620007496200086a60201b60201c565b6200079d60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200088760201b60201c565b620007f160055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200088760201b60201c565b620007fd919062000ed2565b1015905090565b5f62ffffff61ffff8362000819919062000e2a565b62000825919062000fa0565b9050919050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16905090565b5f3073ffffffffffffffffffffffffffffffffffffffff16905090565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200098557607f821691505b6020821081036200099b576200099a62000940565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620009ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009c2565b62000a0b8683620009c2565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000a5562000a4f62000a498462000a23565b62000a2c565b62000a23565b9050919050565b5f819050919050565b62000a708362000a35565b62000a8862000a7f8262000a5c565b848454620009ce565b825550505050565b5f90565b62000a9e62000a90565b62000aab81848462000a65565b505050565b5b8181101562000ad25762000ac65f8262000a94565b60018101905062000ab1565b5050565b601f82111562000b215762000aeb81620009a1565b62000af684620009b3565b8101602085101562000b06578190505b62000b1e62000b1585620009b3565b83018262000ab0565b50505b505050565b5f82821c905092915050565b5f62000b435f198460080262000b26565b1980831691505092915050565b5f62000b5d838362000b32565b9150826002028217905092915050565b62000b788262000909565b67ffffffffffffffff81111562000b945762000b9362000913565b5b62000ba082546200096d565b62000bad82828562000ad6565b5f60209050601f83116001811462000be3575f841562000bce578287015190505b62000bda858262000b50565b86555062000c49565b601f19841662000bf386620009a1565b5f5b8281101562000c1c5784890151825560018201915060208501945060208101905062000bf5565b8683101562000c3c578489015162000c38601f89168262000b32565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000cdb5780860481111562000cb35762000cb262000c51565b5b600185161562000cc35780820291505b808102905062000cd38562000c7e565b945062000c93565b94509492505050565b5f8262000cf5576001905062000dc7565b8162000d04575f905062000dc7565b816001811462000d1d576002811462000d285762000d5e565b600191505062000dc7565b60ff84111562000d3d5762000d3c62000c51565b5b8360020a91508482111562000d575762000d5662000c51565b5b5062000dc7565b5060208310610133831016604e8410600b841016171562000d985782820a90508381111562000d925762000d9162000c51565b5b62000dc7565b62000da7848484600162000c8a565b9250905081840481111562000dc15762000dc062000c51565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000de68262000a23565b915062000df38362000dce565b925062000e227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ce4565b905092915050565b5f62000e368262000a23565b915062000e438362000a23565b925082820262000e538162000a23565b9150828204841483151762000e6d5762000e6c62000c51565b5b5092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e9f8262000e74565b9050919050565b62000eb18162000e93565b82525050565b5f60208201905062000ecc5f83018462000ea6565b92915050565b5f62000ede8262000a23565b915062000eeb8362000a23565b925082820190508082111562000f065762000f0562000c51565b5b92915050565b62000f178162000a23565b82525050565b5f60608201905062000f325f83018662000ea6565b62000f41602083018562000f0c565b62000f50604083018462000f0c565b949350505050565b5f60208201905062000f6d5f83018462000f0c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000fac8262000a23565b915062000fb98362000a23565b92508262000fcc5762000fcb62000f73565b5b828204905092915050565b6112928062000fe55f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f80fd5b61009d6101fd565b6040516100aa9190610e6d565b60405180910390f35b6100cd60048036038101906100c89190610f1e565b61028d565b6040516100da9190610f76565b60405180910390f35b6100eb6102af565b6040516100f89190610f9e565b60405180910390f35b61011b60048036038101906101169190610fb7565b6102b8565b6040516101289190610f76565b60405180910390f35b6101396102e6565b6040516101469190611022565b60405180910390f35b6101696004803603810190610164919061103b565b6102ee565b6040516101769190610f9e565b60405180910390f35b610187610333565b6040516101949190610e6d565b60405180910390f35b6101b760048036038101906101b29190610f1e565b6103c3565b6040516101c49190610f76565b60405180910390f35b6101e760048036038101906101e29190611066565b6103e5565b6040516101f49190610f9e565b60405180910390f35b60606003805461020c906110d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906110d1565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f80610297610467565b90506102a481858561046e565b600191505092915050565b5f600254905090565b5f806102c2610467565b90506102cf858285610480565b6102da858585610512565b60019150509392505050565b5f6012905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606060048054610342906110d1565b80601f016020809104026020016040519081016040528092919081815260200182805461036e906110d1565b80156103b95780601f10610390576101008083540402835291602001916103b9565b820191905f5260205f20905b81548152906001019060200180831161039c57829003601f168201915b5050505050905090565b5f806103cd610467565b90506103da818585610512565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b61047b8383836001610602565b505050565b5f61048b84846103e5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461050c57818110156104fd578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016104f493929190611110565b60405180910390fd5b61050b84848484035f610602565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610582575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105799190611145565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105f2575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016105e99190611145565b60405180910390fd5b6105fd8383836107d1565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610672575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016106699190611145565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106e2575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016106d99190611145565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156107cb578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516107c29190610f9e565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610821578060025f828254610815919061118b565b925050819055506108ef565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156108aa578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016108a193929190611110565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610936578060025f8282540392505081905550610a90565b8260075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109bf81610afa565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550610a0f610b21565b5f60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610aed9190610f9e565b60405180910390a3505050565b5f610b03610cb2565b15610b1857610b1182610d64565b9050610b1c565b8190505b919050565b610b29610d88565b60015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403610cb057610bf1610dc6565b60015f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b565b5f610cbb610dc6565b610d0760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e5565b610d5360055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e5565b610d5d919061118b565b1015905090565b5f62ffffff61ffff83610d7791906111be565b610d81919061122c565b9050919050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16905090565b5f3073ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610e1a578082015181840152602081019050610dff565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610e3f82610de3565b610e498185610ded565b9350610e59818560208601610dfd565b610e6281610e25565b840191505092915050565b5f6020820190508181035f830152610e858184610e35565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610eba82610e91565b9050919050565b610eca81610eb0565b8114610ed4575f80fd5b50565b5f81359050610ee581610ec1565b92915050565b5f819050919050565b610efd81610eeb565b8114610f07575f80fd5b50565b5f81359050610f1881610ef4565b92915050565b5f8060408385031215610f3457610f33610e8d565b5b5f610f4185828601610ed7565b9250506020610f5285828601610f0a565b9150509250929050565b5f8115159050919050565b610f7081610f5c565b82525050565b5f602082019050610f895f830184610f67565b92915050565b610f9881610eeb565b82525050565b5f602082019050610fb15f830184610f8f565b92915050565b5f805f60608486031215610fce57610fcd610e8d565b5b5f610fdb86828701610ed7565b9350506020610fec86828701610ed7565b9250506040610ffd86828701610f0a565b9150509250925092565b5f60ff82169050919050565b61101c81611007565b82525050565b5f6020820190506110355f830184611013565b92915050565b5f602082840312156110505761104f610e8d565b5b5f61105d84828501610ed7565b91505092915050565b5f806040838503121561107c5761107b610e8d565b5b5f61108985828601610ed7565b925050602061109a85828601610ed7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806110e857607f821691505b6020821081036110fb576110fa6110a4565b5b50919050565b61110a81610eb0565b82525050565b5f6060820190506111235f830186611101565b6111306020830185610f8f565b61113d6040830184610f8f565b949350505050565b5f6020820190506111585f830184611101565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61119582610eeb565b91506111a083610eeb565b92508282019050808211156111b8576111b761115e565b5b92915050565b5f6111c882610eeb565b91506111d383610eeb565b92508282026111e181610eeb565b915082820484148315176111f8576111f761115e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61123682610eeb565b915061124183610eeb565b925082611251576112506111ff565b5b82820490509291505056fea26469706673582212208fafbb0d6aa7a6332ff8e06c61f48ec7c7689fa1cca8962c966ca56b9a6cf69164736f6c63430008180033