0x608060405234801561000f575f80fd5b50604051611e4d380380611e4d833981810160405281019061003191906105f7565b806040518060400160405280600881526020017f4d656d654d616e310000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d4d31000000000000000000000000000000000000000000000000000000000081525081600390816100ad919061085c565b5080600490816100bd919061085c565b5050505f60055f6101000a81548160ff0219169083151502179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610149575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610140919061093a565b60405180910390fd5b6101588161019860201b60201c565b506101923361016b61025d60201b60201c565b600a6101779190610abb565b6401dcd650006101879190610b05565b61026560201b60201c565b50610bd6565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102d5575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102cc919061093a565b60405180910390fd5b6102e65f83836102ea60201b60201c565b5050565b6102fb83838361030060201b60201c565b505050565b61030e61032460201b60201c565b61031f83838361036b60201b60201c565b505050565b61033261058460201b60201c565b15610369576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036103bb578060025f8282546103af9190610b46565b92505081905550610489565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610444578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161043b93929190610b88565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104d0578060025f828254039250508190555061051a565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105779190610bbd565b60405180910390a3505050565b5f60055f9054906101000a900460ff16905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6105c68261059d565b9050919050565b6105d6816105bc565b81146105e0575f80fd5b50565b5f815190506105f1816105cd565b92915050565b5f6020828403121561060c5761060b610599565b5b5f610619848285016105e3565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061069d57607f821691505b6020821081036106b0576106af610659565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026107127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106d7565b61071c86836106d7565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61076061075b61075684610734565b61073d565b610734565b9050919050565b5f819050919050565b61077983610746565b61078d61078582610767565b8484546106e3565b825550505050565b5f90565b6107a1610795565b6107ac818484610770565b505050565b5b818110156107cf576107c45f82610799565b6001810190506107b2565b5050565b601f821115610814576107e5816106b6565b6107ee846106c8565b810160208510156107fd578190505b610811610809856106c8565b8301826107b1565b50505b505050565b5f82821c905092915050565b5f6108345f1984600802610819565b1980831691505092915050565b5f61084c8383610825565b9150826002028217905092915050565b61086582610622565b67ffffffffffffffff81111561087e5761087d61062c565b5b6108888254610686565b6108938282856107d3565b5f60209050601f8311600181146108c4575f84156108b2578287015190505b6108bc8582610841565b865550610923565b601f1984166108d2866106b6565b5f5b828110156108f9578489015182556001820191506020850194506020810190506108d4565b868310156109165784890151610912601f891682610825565b8355505b6001600288020188555050505b505050505050565b610934816105bc565b82525050565b5f60208201905061094d5f83018461092b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156109d5578086048111156109b1576109b0610953565b5b60018516156109c05780820291505b80810290506109ce85610980565b9450610995565b94509492505050565b5f826109ed5760019050610aa8565b816109fa575f9050610aa8565b8160018114610a105760028114610a1a57610a49565b6001915050610aa8565b60ff841115610a2c57610a2b610953565b5b8360020a915084821115610a4357610a42610953565b5b50610aa8565b5060208310610133831016604e8410600b8410161715610a7e5782820a905083811115610a7957610a78610953565b5b610aa8565b610a8b848484600161098c565b92509050818404811115610aa257610aa1610953565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610ac582610734565b9150610ad083610aaf565b9250610afd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846109de565b905092915050565b5f610b0f82610734565b9150610b1a83610734565b9250828202610b2881610734565b91508282048414831517610b3f57610b3e610953565b5b5092915050565b5f610b5082610734565b9150610b5b83610734565b9250828201905080821115610b7357610b72610953565b5b92915050565b610b8281610734565b82525050565b5f606082019050610b9b5f83018661092b565b610ba86020830185610b79565b610bb56040830184610b79565b949350505050565b5f602082019050610bd05f830184610b79565b92915050565b61126a80610be35f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c806370a082311161009557806395d89b411161006457806395d89b411461023b578063a9059cbb14610259578063dd62ed3e14610289578063f2fde38b146102b9576100f3565b806370a08231146101d9578063715018a6146102095780638456cb59146102135780638da5cb5b1461021d576100f3565b806323b872dd116100d157806323b872dd14610163578063313ce567146101935780633f4ba83a146101b15780635c975abb146101bb576100f3565b806306fdde03146100f7578063095ea7b31461011557806318160ddd14610145575b5f80fd5b6100ff6102d5565b60405161010c9190610ee3565b60405180910390f35b61012f600480360381019061012a9190610f94565b610365565b60405161013c9190610fec565b60405180910390f35b61014d610387565b60405161015a9190611014565b60405180910390f35b61017d6004803603810190610178919061102d565b610390565b60405161018a9190610fec565b60405180910390f35b61019b6103be565b6040516101a89190611098565b60405180910390f35b6101b96103c6565b005b6101c36103d8565b6040516101d09190610fec565b60405180910390f35b6101f360048036038101906101ee91906110b1565b6103ed565b6040516102009190611014565b60405180910390f35b610211610432565b005b61021b610445565b005b610225610457565b60405161023291906110eb565b60405180910390f35b610243610480565b6040516102509190610ee3565b60405180910390f35b610273600480360381019061026e9190610f94565b610510565b6040516102809190610fec565b60405180910390f35b6102a3600480360381019061029e9190611104565b610532565b6040516102b09190611014565b60405180910390f35b6102d360048036038101906102ce91906110b1565b6105b4565b005b6060600380546102e49061116f565b80601f01602080910402602001604051908101604052809291908181526020018280546103109061116f565b801561035b5780601f106103325761010080835404028352916020019161035b565b820191905f5260205f20905b81548152906001019060200180831161033e57829003601f168201915b5050505050905090565b5f8061036f610638565b905061037c81858561063f565b600191505092915050565b5f600254905090565b5f8061039a610638565b90506103a7858285610651565b6103b28585856106e3565b60019150509392505050565b5f6012905090565b6103ce6107d3565b6103d661085a565b565b5f60055f9054906101000a900460ff16905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61043a6107d3565b6104435f6108bb565b565b61044d6107d3565b610455610980565b565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461048f9061116f565b80601f01602080910402602001604051908101604052809291908181526020018280546104bb9061116f565b80156105065780601f106104dd57610100808354040283529160200191610506565b820191905f5260205f20905b8154815290600101906020018083116104e957829003601f168201915b5050505050905090565b5f8061051a610638565b90506105278185856106e3565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6105bc6107d3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361062c575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161062391906110eb565b60405180910390fd5b610635816108bb565b50565b5f33905090565b61064c83838360016109e2565b505050565b5f61065c8484610532565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106dd57818110156106ce578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106c59392919061119f565b60405180910390fd5b6106dc84848484035f6109e2565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610753575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161074a91906110eb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107c3575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107ba91906110eb565b60405180910390fd5b6107ce838383610bb1565b505050565b6107db610638565b73ffffffffffffffffffffffffffffffffffffffff166107f9610457565b73ffffffffffffffffffffffffffffffffffffffff16146108585761081c610638565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161084f91906110eb565b60405180910390fd5b565b610862610bc1565b5f60055f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6108a4610638565b6040516108b191906110eb565b60405180910390a1565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610988610c01565b600160055f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586109cb610638565b6040516109d891906110eb565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a52575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610a4991906110eb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ac2575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ab991906110eb565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610bab578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ba29190611014565b60405180910390a35b50505050565b610bbc838383610c42565b505050565b610bc96103d8565b610bff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610c096103d8565b15610c40576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610c4a610c01565b610c55838383610c5a565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610caa578060025f828254610c9e9190611201565b92505081905550610d78565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610d33578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610d2a9392919061119f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dbf578060025f8282540392505081905550610e09565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e669190611014565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610eb582610e73565b610ebf8185610e7d565b9350610ecf818560208601610e8d565b610ed881610e9b565b840191505092915050565b5f6020820190508181035f830152610efb8184610eab565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f3082610f07565b9050919050565b610f4081610f26565b8114610f4a575f80fd5b50565b5f81359050610f5b81610f37565b92915050565b5f819050919050565b610f7381610f61565b8114610f7d575f80fd5b50565b5f81359050610f8e81610f6a565b92915050565b5f8060408385031215610faa57610fa9610f03565b5b5f610fb785828601610f4d565b9250506020610fc885828601610f80565b9150509250929050565b5f8115159050919050565b610fe681610fd2565b82525050565b5f602082019050610fff5f830184610fdd565b92915050565b61100e81610f61565b82525050565b5f6020820190506110275f830184611005565b92915050565b5f805f6060848603121561104457611043610f03565b5b5f61105186828701610f4d565b935050602061106286828701610f4d565b925050604061107386828701610f80565b9150509250925092565b5f60ff82169050919050565b6110928161107d565b82525050565b5f6020820190506110ab5f830184611089565b92915050565b5f602082840312156110c6576110c5610f03565b5b5f6110d384828501610f4d565b91505092915050565b6110e581610f26565b82525050565b5f6020820190506110fe5f8301846110dc565b92915050565b5f806040838503121561111a57611119610f03565b5b5f61112785828601610f4d565b925050602061113885828601610f4d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061118657607f821691505b60208210810361119957611198611142565b5b50919050565b5f6060820190506111b25f8301866110dc565b6111bf6020830185611005565b6111cc6040830184611005565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61120b82610f61565b915061121683610f61565b925082820190508082111561122e5761122d6111d4565b5b9291505056fea26469706673582212207adfe974bd7a395e9f5d9d2a16132dab4728287c1aea80666f03257ef0a6807c64736f6c634300081900330000000000000000000000001cff69ec5572c5694327b1afd2759ecf171bda49