60806040526000600560146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50336040518060400160405280600781526020017f596f75446f6765000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f596f75446f6765000000000000000000000000000000000000000000000000008152508160039081620000ab919062000a4f565b508060049081620000bd919062000a4f565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001355760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200012c919062000b7b565b60405180910390fd5b62000146816200016d60201b60201c565b5062000167336d036c341e1f992f96840fe00000006200023360201b60201c565b62000e15565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002a85760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200029f919062000b7b565b60405180910390fd5b620002bc60008383620002c060201b60201c565b5050565b620002d38383836200052960201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603620003f6576200033a6200075960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620003ae57506200037f6200075960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b620003f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003e79062000bf9565b60405180910390fd5b62000524565b600560149054906101000a900460ff1680156200044e57506200041e6200075960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015620004a95750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1562000523576064620004c16200078360201b60201c565b620004cd919062000c79565b620004de836200078d60201b60201c565b111562000522576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005199062000d4d565b60405180910390fd5b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200057f57806002600082825462000572919062000d6f565b9250508190555062000655565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200060e578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620006059392919062000dbb565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006a05780600260008282540392505081905550620006ed565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200074c919062000df8565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600254905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200085757607f821691505b6020821081036200086d576200086c6200080f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000898565b620008e3868362000898565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009306200092a6200092484620008fb565b62000905565b620008fb565b9050919050565b6000819050919050565b6200094c836200090f565b620009646200095b8262000937565b848454620008a5565b825550505050565b600090565b6200097b6200096c565b6200098881848462000941565b505050565b5b81811015620009b057620009a460008262000971565b6001810190506200098e565b5050565b601f821115620009ff57620009c98162000873565b620009d48462000888565b81016020851015620009e4578190505b620009fc620009f38562000888565b8301826200098d565b50505b505050565b600082821c905092915050565b600062000a246000198460080262000a04565b1980831691505092915050565b600062000a3f838362000a11565b9150826002028217905092915050565b62000a5a82620007d5565b67ffffffffffffffff81111562000a765762000a75620007e0565b5b62000a8282546200083e565b62000a8f828285620009b4565b600060209050601f83116001811462000ac7576000841562000ab2578287015190505b62000abe858262000a31565b86555062000b2e565b601f19841662000ad78662000873565b60005b8281101562000b015784890151825560018201915060208501945060208101905062000ada565b8683101562000b21578489015162000b1d601f89168262000a11565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b638262000b36565b9050919050565b62000b758162000b56565b82525050565b600060208201905062000b92600083018462000b6a565b92915050565b600082825260208201905092915050565b7f50617469656e63652c20686f6c6420796f7520676f6174732100000000000000600082015250565b600062000be160198362000b98565b915062000bee8262000ba9565b602082019050919050565b6000602082019050818103600083015262000c148162000bd2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c8682620008fb565b915062000c9383620008fb565b92508262000ca65762000ca562000c1b565b5b828204905092915050565b7f446f6e2774206265206120574f4154202d20776f727365206f6620616c6c207460008201527f696d652120596f752063616e6e6f742067726162206d6f7265207468616e203160208201527f25207768696c737420776f617420697320696e20706c6163652e000000000000604082015250565b600062000d35605a8362000b98565b915062000d428262000cb1565b606082019050919050565b6000602082019050818103600083015262000d688162000d26565b9050919050565b600062000d7c82620008fb565b915062000d8983620008fb565b925082820190508082111562000da45762000da362000c4a565b5b92915050565b62000db581620008fb565b82525050565b600060608201905062000dd2600083018662000b6a565b62000de1602083018562000daa565b62000df0604083018462000daa565b949350505050565b600060208201905062000e0f600083018462000daa565b92915050565b61163d8062000e256000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a6d5083e11610066578063a6d5083e1461028d578063a9059cbb146102a9578063dd62ed3e146102d9578063f2fde38b1461030957610100565b806370a0823114610217578063715018a6146102475780638da5cb5b1461025157806395d89b411461026f57610100565b806323b872dd116100d357806323b872dd1461018d578063313ce567146101bd578063507b1cfe146101db578063665a11ca146101f957610100565b8063018770201461010557806306fdde0314610121578063095ea7b31461013f57806318160ddd1461016f575b600080fd5b61011f600480360381019061011a9190611087565b610325565b005b610129610371565b6040516101369190611144565b60405180910390f35b6101596004803603810190610154919061119c565b610403565b60405161016691906111f7565b60405180910390f35b610177610426565b6040516101849190611221565b60405180910390f35b6101a760048036038101906101a2919061123c565b610430565b6040516101b491906111f7565b60405180910390f35b6101c561045f565b6040516101d291906112ab565b60405180910390f35b6101e3610468565b6040516101f091906111f7565b60405180910390f35b61020161047b565b60405161020e91906112d5565b60405180910390f35b610231600480360381019061022c9190611087565b6104a1565b60405161023e9190611221565b60405180910390f35b61024f6104e9565b005b6102596104fd565b60405161026691906112d5565b60405180910390f35b610277610527565b6040516102849190611144565b60405180910390f35b6102a760048036038101906102a2919061131c565b6105b9565b005b6102c360048036038101906102be919061119c565b6105de565b6040516102d091906111f7565b60405180910390f35b6102f360048036038101906102ee9190611349565b610601565b6040516103009190611221565b60405180910390f35b610323600480360381019061031e9190611087565b610688565b005b61032d61070e565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610380906113b8565b80601f01602080910402602001604051908101604052809291908181526020018280546103ac906113b8565b80156103f95780601f106103ce576101008083540402835291602001916103f9565b820191906000526020600020905b8154815290600101906020018083116103dc57829003601f168201915b5050505050905090565b60008061040e610795565b905061041b81858561079d565b600191505092915050565b6000600254905090565b60008061043b610795565b90506104488582856107af565b610453858585610843565b60019150509392505050565b60006012905090565b600560149054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104f161070e565b6104fb6000610937565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610536906113b8565b80601f0160208091040260200160405190810160405280929190818152602001828054610562906113b8565b80156105af5780601f10610584576101008083540402835291602001916105af565b820191906000526020600020905b81548152906001019060200180831161059257829003601f168201915b5050505050905090565b6105c161070e565b80600560146101000a81548160ff02191690831515021790555050565b6000806105e9610795565b90506105f6818585610843565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61069061070e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107025760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016106f991906112d5565b60405180910390fd5b61070b81610937565b50565b610716610795565b73ffffffffffffffffffffffffffffffffffffffff166107346104fd565b73ffffffffffffffffffffffffffffffffffffffff161461079357610757610795565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161078a91906112d5565b60405180910390fd5b565b600033905090565b6107aa83838360016109fd565b505050565b60006107bb8484610601565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461083d578181101561082d578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610824939291906113e9565b60405180910390fd5b61083c848484840360006109fd565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108b55760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108ac91906112d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109275760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161091e91906112d5565b60405180910390fd5b610932838383610bd4565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a6f5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610a6691906112d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ae15760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ad891906112d5565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610bce578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bc59190611221565b60405180910390a35b50505050565b610bdf838383610dff565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610cec57610c3d6104fd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ca85750610c796104fd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde9061146c565b60405180910390fd5b610dfa565b600560149054906101000a900460ff168015610d3b5750610d0b6104fd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610d955750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610df9576064610da4610426565b610dae91906114ea565b610db7836104a1565b1115610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def906115b3565b60405180910390fd5b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e51578060026000828254610e4591906115d3565b92505081905550610f24565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610edd578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610ed4939291906113e9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f6d5780600260008282540392505081905550610fba565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110179190611221565b60405180910390a3505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061105482611029565b9050919050565b61106481611049565b811461106f57600080fd5b50565b6000813590506110818161105b565b92915050565b60006020828403121561109d5761109c611024565b5b60006110ab84828501611072565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156110ee5780820151818401526020810190506110d3565b60008484015250505050565b6000601f19601f8301169050919050565b6000611116826110b4565b61112081856110bf565b93506111308185602086016110d0565b611139816110fa565b840191505092915050565b6000602082019050818103600083015261115e818461110b565b905092915050565b6000819050919050565b61117981611166565b811461118457600080fd5b50565b60008135905061119681611170565b92915050565b600080604083850312156111b3576111b2611024565b5b60006111c185828601611072565b92505060206111d285828601611187565b9150509250929050565b60008115159050919050565b6111f1816111dc565b82525050565b600060208201905061120c60008301846111e8565b92915050565b61121b81611166565b82525050565b60006020820190506112366000830184611212565b92915050565b60008060006060848603121561125557611254611024565b5b600061126386828701611072565b935050602061127486828701611072565b925050604061128586828701611187565b9150509250925092565b600060ff82169050919050565b6112a58161128f565b82525050565b60006020820190506112c0600083018461129c565b92915050565b6112cf81611049565b82525050565b60006020820190506112ea60008301846112c6565b92915050565b6112f9816111dc565b811461130457600080fd5b50565b600081359050611316816112f0565b92915050565b60006020828403121561133257611331611024565b5b600061134084828501611307565b91505092915050565b600080604083850312156113605761135f611024565b5b600061136e85828601611072565b925050602061137f85828601611072565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806113d057607f821691505b6020821081036113e3576113e2611389565b5b50919050565b60006060820190506113fe60008301866112c6565b61140b6020830185611212565b6114186040830184611212565b949350505050565b7f50617469656e63652c20686f6c6420796f7520676f6174732100000000000000600082015250565b60006114566019836110bf565b915061146182611420565b602082019050919050565b6000602082019050818103600083015261148581611449565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114f582611166565b915061150083611166565b9250826115105761150f61148c565b5b828204905092915050565b7f446f6e2774206265206120574f4154202d20776f727365206f6620616c6c207460008201527f696d652120596f752063616e6e6f742067726162206d6f7265207468616e203160208201527f25207768696c737420776f617420697320696e20706c6163652e000000000000604082015250565b600061159d605a836110bf565b91506115a88261151b565b606082019050919050565b600060208201905081810360008301526115cc81611590565b9050919050565b60006115de82611166565b91506115e983611166565b9250828201905080821115611601576116006114bb565b5b9291505056fea2646970667358221220df864c077cd009072a2cc42ffc5735a66d418c874eab1213acda0705859c567d64736f6c63430008130033