0x608060405234801562000010575f80fd5b506040516200254338038062002543833981810160405281019062000036919062000822565b6040518060400160405280600481526020017f4a4f4a49000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4a4f4a4900000000000000000000000000000000000000000000000000000000815250335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000116575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200010d919062000895565b60405180910390fd5b6200012781620001a160201b60201c565b50816005908162000139919062000b0b565b5080600690816200014b919062000b0b565b5050506200019a33620001636200026260201b60201c565b600a62000171919062000d78565b620f42408462000182919062000dc8565b6200018e919062000dc8565b6200026a60201b60201c565b5062000f51565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002dd575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620002d4919062000895565b60405180910390fd5b620002ee816200030660201b60201c565b50620003025f83836200034a60201b60201c565b5050565b5f60648262000316919062000dc8565b91506d7470cfde2b2f94fa309f75b863226601238b76a0b17702805f52600160205260405f20838155505060019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200039e578060045f82825462000391919062000e12565b9250508190555062000471565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156200042b578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620004229392919062000e5d565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004ba578060045f828254039250508190555062000517565b620004cd8383836200059560201b60201c565b60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b6200052982826200065960201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000588919062000e98565b60405180910390a3505050565b5f8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200061f919062000e12565b11156200064e57620cda99610cda836200063a919062000dc8565b62000646919062000ee0565b905062000652565b8190505b9392505050565b62000669620007bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015620006f157506005600454620006b1919062000ee0565b60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054105b8015620007725750620007096200026260201b60201c565b600a62000717919062000d78565b606462000725919062000dc8565b8160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000770919062000f17565b115b15620007bb578060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80fd5b5f819050919050565b620007fe81620007ea565b811462000809575f80fd5b50565b5f815190506200081c81620007f3565b92915050565b5f602082840312156200083a5762000839620007e6565b5b5f62000849848285016200080c565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200087d8262000852565b9050919050565b6200088f8162000871565b82525050565b5f602082019050620008aa5f83018462000884565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200092c57607f821691505b602082108103620009425762000941620008e7565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620009a67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000969565b620009b2868362000969565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620009f3620009ed620009e784620007ea565b620009ca565b620007ea565b9050919050565b5f819050919050565b62000a0e83620009d3565b62000a2662000a1d82620009fa565b84845462000975565b825550505050565b5f90565b62000a3c62000a2e565b62000a4981848462000a03565b505050565b5b8181101562000a705762000a645f8262000a32565b60018101905062000a4f565b5050565b601f82111562000abf5762000a898162000948565b62000a94846200095a565b8101602085101562000aa4578190505b62000abc62000ab3856200095a565b83018262000a4e565b50505b505050565b5f82821c905092915050565b5f62000ae15f198460080262000ac4565b1980831691505092915050565b5f62000afb838362000ad0565b9150826002028217905092915050565b62000b1682620008b0565b67ffffffffffffffff81111562000b325762000b31620008ba565b5b62000b3e825462000914565b62000b4b82828562000a74565b5f60209050601f83116001811462000b81575f841562000b6c578287015190505b62000b78858262000aee565b86555062000be7565b601f19841662000b918662000948565b5f5b8281101562000bba5784890151825560018201915060208501945060208101905062000b93565b8683101562000bda578489015162000bd6601f89168262000ad0565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000c795780860481111562000c515762000c5062000bef565b5b600185161562000c615780820291505b808102905062000c718562000c1c565b945062000c31565b94509492505050565b5f8262000c93576001905062000d65565b8162000ca2575f905062000d65565b816001811462000cbb576002811462000cc65762000cfc565b600191505062000d65565b60ff84111562000cdb5762000cda62000bef565b5b8360020a91508482111562000cf55762000cf462000bef565b5b5062000d65565b5060208310610133831016604e8410600b841016171562000d365782820a90508381111562000d305762000d2f62000bef565b5b62000d65565b62000d45848484600162000c28565b9250905081840481111562000d5f5762000d5e62000bef565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000d8482620007ea565b915062000d918362000d6c565b925062000dc07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c82565b905092915050565b5f62000dd482620007ea565b915062000de183620007ea565b925082820262000df181620007ea565b9150828204841483151762000e0b5762000e0a62000bef565b5b5092915050565b5f62000e1e82620007ea565b915062000e2b83620007ea565b925082820190508082111562000e465762000e4562000bef565b5b92915050565b62000e5781620007ea565b82525050565b5f60608201905062000e725f83018662000884565b62000e81602083018562000e4c565b62000e90604083018462000e4c565b949350505050565b5f60208201905062000ead5f83018462000e4c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000eec82620007ea565b915062000ef983620007ea565b92508262000f0c5762000f0b62000eb3565b5b828204905092915050565b5f62000f2382620007ea565b915062000f3083620007ea565b925082820390508181111562000f4b5762000f4a62000bef565b5b92915050565b6115e48062000f5f5f395ff3fe608060405234801561000f575f80fd5b50600436106100e8575f3560e01c80638da5cb5b1161008a578063a9059cbb11610064578063a9059cbb14610238578063b673f71a14610268578063dd62ed3e14610298578063f2fde38b146102c8576100e8565b80638da5cb5b146101e057806395d89b41146101fe5780639c4dfd281461021c576100e8565b806323b872dd116100c657806323b872dd14610158578063313ce5671461018857806370a08231146101a6578063715018a6146101d6576100e8565b806306fdde03146100ec578063095ea7b31461010a57806318160ddd1461013a575b5f80fd5b6100f46102e4565b6040516101019190611013565b60405180910390f35b610124600480360381019061011f91906110c4565b610374565b604051610131919061111c565b60405180910390f35b610142610396565b60405161014f9190611144565b60405180910390f35b610172600480360381019061016d919061115d565b61039f565b60405161017f919061111c565b60405180910390f35b6101906103cd565b60405161019d91906111c8565b60405180910390f35b6101c060048036038101906101bb91906111e1565b6103d5565b6040516101cd9190611144565b60405180910390f35b6101de61041b565b005b6101e861042e565b6040516101f5919061121b565b60405180910390f35b610206610455565b6040516102139190611013565b60405180910390f35b610236600480360381019061023191906111e1565b6104e5565b005b610252600480360381019061024d91906110c4565b610532565b60405161025f919061111c565b60405180910390f35b610282600480360381019061027d91906111e1565b610554565b60405161028f9190611144565b60405180910390f35b6102b260048036038101906102ad9190611234565b61059a565b6040516102bf9190611144565b60405180910390f35b6102e260048036038101906102dd91906111e1565b61061c565b005b6060600580546102f39061129f565b80601f016020809104026020016040519081016040528092919081815260200182805461031f9061129f565b801561036a5780601f106103415761010080835404028352916020019161036a565b820191905f5260205f20905b81548152906001019060200180831161034d57829003601f168201915b5050505050905090565b5f8061037e6106a0565b905061038b8185856106a7565b600191505092915050565b5f600454905090565b5f806103a96106a0565b90506103b68582856106b9565b6103c185858561074b565b60019150509392505050565b5f6012905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61042361083b565b61042c5f6108c2565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546104649061129f565b80601f01602080910402602001604051908101604052809291908181526020018280546104909061129f565b80156104db5780601f106104b2576101008083540402835291602001916104db565b820191905f5260205f20905b8154815290600101906020018083116104be57829003601f168201915b5050505050905090565b6104ed61083b565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b5f8061053c6106a0565b905061054981858561074b565b600191505092915050565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61062461083b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610694575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161068b919061121b565b60405180910390fd5b61069d816108c2565b50565b5f33905090565b6106b48383836001610983565b505050565b5f6106c4848461059a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107455781811015610736578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161072d939291906112cf565b60405180910390fd5b61074484848484035f610983565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107bb575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107b2919061121b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361082b575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610822919061121b565b60405180910390fd5b610836838383610b52565b505050565b6108436106a0565b73ffffffffffffffffffffffffffffffffffffffff1661086161042e565b73ffffffffffffffffffffffffffffffffffffffff16146108c0576108846106a0565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016108b7919061121b565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036109f3575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016109ea919061121b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a63575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610a5a919061121b565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610b4c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b439190611144565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ba2578060045f828254610b969190611331565b92505081905550610c72565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610c2c578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610c23939291906112cf565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cb9578060045f8282540392505081905550610d0e565b610cc4838383610d82565b60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b610d188282610e3e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d759190611144565b60405180910390a3505050565b5f8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e0a9190611331565b1115610e3357620cda99610cda83610e229190611364565b610e2c91906113d2565b9050610e37565b8190505b9392505050565b610e4661042e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610ecb57506005600454610e8b91906113d2565b60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054105b8015610f3d5750610eda6103cd565b600a610ee69190611531565b6064610ef29190611364565b8160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f3b919061157b565b115b15610f85578060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610fc0578082015181840152602081019050610fa5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610fe582610f89565b610fef8185610f93565b9350610fff818560208601610fa3565b61100881610fcb565b840191505092915050565b5f6020820190508181035f83015261102b8184610fdb565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61106082611037565b9050919050565b61107081611056565b811461107a575f80fd5b50565b5f8135905061108b81611067565b92915050565b5f819050919050565b6110a381611091565b81146110ad575f80fd5b50565b5f813590506110be8161109a565b92915050565b5f80604083850312156110da576110d9611033565b5b5f6110e78582860161107d565b92505060206110f8858286016110b0565b9150509250929050565b5f8115159050919050565b61111681611102565b82525050565b5f60208201905061112f5f83018461110d565b92915050565b61113e81611091565b82525050565b5f6020820190506111575f830184611135565b92915050565b5f805f6060848603121561117457611173611033565b5b5f6111818682870161107d565b93505060206111928682870161107d565b92505060406111a3868287016110b0565b9150509250925092565b5f60ff82169050919050565b6111c2816111ad565b82525050565b5f6020820190506111db5f8301846111b9565b92915050565b5f602082840312156111f6576111f5611033565b5b5f6112038482850161107d565b91505092915050565b61121581611056565b82525050565b5f60208201905061122e5f83018461120c565b92915050565b5f806040838503121561124a57611249611033565b5b5f6112578582860161107d565b92505060206112688582860161107d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112b657607f821691505b6020821081036112c9576112c8611272565b5b50919050565b5f6060820190506112e25f83018661120c565b6112ef6020830185611135565b6112fc6040830184611135565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61133b82611091565b915061134683611091565b925082820190508082111561135e5761135d611304565b5b92915050565b5f61136e82611091565b915061137983611091565b925082820261138781611091565b9150828204841483151761139e5761139d611304565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6113dc82611091565b91506113e783611091565b9250826113f7576113f66113a5565b5b828204905092915050565b5f8160011c9050919050565b5f808291508390505b60018511156114575780860481111561143357611432611304565b5b60018516156114425780820291505b808102905061145085611402565b9450611417565b94509492505050565b5f8261146f576001905061152a565b8161147c575f905061152a565b8160018114611492576002811461149c576114cb565b600191505061152a565b60ff8411156114ae576114ad611304565b5b8360020a9150848211156114c5576114c4611304565b5b5061152a565b5060208310610133831016604e8410600b84101617156115005782820a9050838111156114fb576114fa611304565b5b61152a565b61150d848484600161140e565b9250905081840481111561152457611523611304565b5b81810290505b9392505050565b5f61153b82611091565b9150611546836111ad565b92506115737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611460565b905092915050565b5f61158582611091565b915061159083611091565b92508282039050818111156115a8576115a7611304565b5b9291505056fea26469706673582212209556c2382afaa72d1a8b92b7311b5ee86610ad612df9551325ef37f3ff336ba264736f6c63430008180033000000000000000000000000000000000000000000000000000000000000031c