60806040523480156200001157600080fd5b5060405162001d9238038062001d928339818101604052810190620000379190620003f0565b83828281600390816200004b9190620006eb565b5080600490816200005d9190620006eb565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000d55760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000cc9190620007e3565b60405180910390fd5b620000e6816200013260201b60201c565b5082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000800565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000239826200020c565b9050919050565b6200024b816200022c565b81146200025757600080fd5b50565b6000815190506200026b8162000240565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002c6826200027b565b810181811067ffffffffffffffff82111715620002e857620002e76200028c565b5b80604052505050565b6000620002fd620001f8565b90506200030b8282620002bb565b919050565b600067ffffffffffffffff8211156200032e576200032d6200028c565b5b62000339826200027b565b9050602081019050919050565b60005b838110156200036657808201518184015260208101905062000349565b60008484015250505050565b600062000389620003838462000310565b620002f1565b905082815260208101848484011115620003a857620003a762000276565b5b620003b584828562000346565b509392505050565b600082601f830112620003d557620003d462000271565b5b8151620003e784826020860162000372565b91505092915050565b600080600080608085870312156200040d576200040c62000202565b5b60006200041d878288016200025a565b945050602062000430878288016200025a565b935050604085015167ffffffffffffffff81111562000454576200045362000207565b5b6200046287828801620003bd565b925050606085015167ffffffffffffffff81111562000486576200048562000207565b5b6200049487828801620003bd565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004f357607f821691505b602082108103620005095762000508620004ab565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000534565b6200057f868362000534565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005cc620005c6620005c08462000597565b620005a1565b62000597565b9050919050565b6000819050919050565b620005e883620005ab565b62000600620005f782620005d3565b84845462000541565b825550505050565b600090565b6200061762000608565b62000624818484620005dd565b505050565b5b818110156200064c57620006406000826200060d565b6001810190506200062a565b5050565b601f8211156200069b5762000665816200050f565b620006708462000524565b8101602085101562000680578190505b620006986200068f8562000524565b83018262000629565b50505b505050565b600082821c905092915050565b6000620006c060001984600802620006a0565b1980831691505092915050565b6000620006db8383620006ad565b9150826002028217905092915050565b620006f682620004a0565b67ffffffffffffffff8111156200071257620007116200028c565b5b6200071e8254620004da565b6200072b82828562000650565b600060209050601f8311600181146200076357600084156200074e578287015190505b6200075a8582620006cd565b865550620007ca565b601f19841662000773866200050f565b60005b828110156200079d5784890151825560018201915060208501945060208101905062000776565b86831015620007bd5784890151620007b9601f891682620006ad565b8355505b6001600288020188555050505b505050505050565b620007dd816200022c565b82525050565b6000602082019050620007fa6000830184620007d2565b92915050565b61158280620008106000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a08231116100975780639dc29fac116100665780639dc29fac14610264578063a9059cbb14610280578063dd62ed3e146102b0578063f2fde38b146102e0576100f5565b806370a08231146101ee578063715018a61461021e5780638da5cb5b1461022857806395d89b4114610246576100f5565b806323b872dd116100d357806323b872dd14610166578063313ce5671461019657806340c10f19146101b4578063520c5828146101d0576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b6101026102fc565b60405161010f919061117d565b60405180910390f35b610132600480360381019061012d9190611238565b61038e565b60405161013f9190611293565b60405180910390f35b6101506103b1565b60405161015d91906112bd565b60405180910390f35b610180600480360381019061017b91906112d8565b6103bb565b60405161018d9190611293565b60405180910390f35b61019e61051c565b6040516101ab9190611347565b60405180910390f35b6101ce60048036038101906101c99190611238565b610525565b005b6101d861053b565b6040516101e59190611371565b60405180910390f35b6102086004803603810190610203919061138c565b610561565b60405161021591906112bd565b60405180910390f35b6102266105a9565b005b6102306105bd565b60405161023d9190611371565b60405180910390f35b61024e6105e7565b60405161025b919061117d565b60405180910390f35b61027e60048036038101906102799190611238565b610679565b005b61029a60048036038101906102959190611238565b61068f565b6040516102a79190611293565b60405180910390f35b6102ca60048036038101906102c591906113b9565b6107f1565b6040516102d791906112bd565b60405180910390f35b6102fa60048036038101906102f5919061138c565b610878565b005b60606003805461030b90611428565b80601f016020809104026020016040519081016040528092919081815260200182805461033790611428565b80156103845780601f1061035957610100808354040283529160200191610384565b820191906000526020600020905b81548152906001019060200180831161036757829003601f168201915b5050505050905090565b6000806103996108fe565b90506103a6818585610906565b600191505092915050565b6000600254905090565b600033600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba137713826040518263ffffffff1660e01b81526004016104199190611371565b602060405180830381865afa158015610436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045a9190611485565b5083600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba137713826040518263ffffffff1660e01b81526004016104b79190611371565b602060405180830381865afa1580156104d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f89190611485565b50610504868686610918565b61050f8686866109ac565b6001925050509392505050565b60006012905090565b61052d610aa0565b6105378282610b27565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105b1610aa0565b6105bb6000610ba9565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105f690611428565b80601f016020809104026020016040519081016040528092919081815260200182805461062290611428565b801561066f5780601f106106445761010080835404028352916020019161066f565b820191906000526020600020905b81548152906001019060200180831161065257829003601f168201915b5050505050905090565b610681610aa0565b61068b8282610c6f565b5050565b600033600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba137713826040518263ffffffff1660e01b81526004016106ed9190611371565b602060405180830381865afa15801561070a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072e9190611485565b5083600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba137713826040518263ffffffff1660e01b815260040161078b9190611371565b602060405180830381865afa1580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190611485565b5060006107d76108fe565b90506107e48187876109ac565b6001935050505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610880610aa0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108f25760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108e99190611371565b60405180910390fd5b6108fb81610ba9565b50565b600033905090565b6109138383836001610cf1565b505050565b600061092484846107f1565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109a65781811015610996578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161098d939291906114b2565b60405180910390fd5b6109a584848484036000610cf1565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a1e5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a159190611371565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a905760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a879190611371565b60405180910390fd5b610a9b838383610ec8565b505050565b610aa86108fe565b73ffffffffffffffffffffffffffffffffffffffff16610ac66105bd565b73ffffffffffffffffffffffffffffffffffffffff1614610b2557610ae96108fe565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1c9190611371565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b995760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610b909190611371565b60405180910390fd5b610ba560008383610ec8565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ce15760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cd89190611371565b60405180910390fd5b610ced82600083610ec8565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d635760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610d5a9190611371565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dd55760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610dcc9190611371565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610ec2578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610eb991906112bd565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f1a578060026000828254610f0e9190611518565b92505081905550610fed565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fa6578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610f9d939291906114b2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110365780600260008282540392505081905550611083565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110e091906112bd565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561112757808201518184015260208101905061110c565b60008484015250505050565b6000601f19601f8301169050919050565b600061114f826110ed565b61115981856110f8565b9350611169818560208601611109565b61117281611133565b840191505092915050565b600060208201905081810360008301526111978184611144565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111cf826111a4565b9050919050565b6111df816111c4565b81146111ea57600080fd5b50565b6000813590506111fc816111d6565b92915050565b6000819050919050565b61121581611202565b811461122057600080fd5b50565b6000813590506112328161120c565b92915050565b6000806040838503121561124f5761124e61119f565b5b600061125d858286016111ed565b925050602061126e85828601611223565b9150509250929050565b60008115159050919050565b61128d81611278565b82525050565b60006020820190506112a86000830184611284565b92915050565b6112b781611202565b82525050565b60006020820190506112d260008301846112ae565b92915050565b6000806000606084860312156112f1576112f061119f565b5b60006112ff868287016111ed565b9350506020611310868287016111ed565b925050604061132186828701611223565b9150509250925092565b600060ff82169050919050565b6113418161132b565b82525050565b600060208201905061135c6000830184611338565b92915050565b61136b816111c4565b82525050565b60006020820190506113866000830184611362565b92915050565b6000602082840312156113a2576113a161119f565b5b60006113b0848285016111ed565b91505092915050565b600080604083850312156113d0576113cf61119f565b5b60006113de858286016111ed565b92505060206113ef858286016111ed565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061144057607f821691505b602082108103611453576114526113f9565b5b50919050565b61146281611278565b811461146d57600080fd5b50565b60008151905061147f81611459565b92915050565b60006020828403121561149b5761149a61119f565b5b60006114a984828501611470565b91505092915050565b60006060820190506114c76000830186611362565b6114d460208301856112ae565b6114e160408301846112ae565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061152382611202565b915061152e83611202565b9250828201905080821115611546576115456114e9565b5b9291505056fea264697066735822122061ece76957efb206721ac016d7ec293f94b1a7d5047f244928eb0bfab379c1f164736f6c634300081800330000000000000000000000003d7b908b2ae160bf1da45223e28fd00d07cde49800000000000000000000000042720117cb85be4a40cdbaf6692eba700438601d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000c50726f6a6563742054657374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055054455354000000000000000000000000000000000000000000000000000000