608060405234801562000010575f80fd5b506040518060400160405280600a81526020017f537461636b204e465473000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f534e465400000000000000000000000000000000000000000000000000000000815250815f90816200008d91906200030c565b5080600190816200009f91906200030c565b505050620003f0565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200012457607f821691505b6020821081036200013a5762000139620000df565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200019e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000161565b620001aa868362000161565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620001f4620001ee620001e884620001c2565b620001cb565b620001c2565b9050919050565b5f819050919050565b6200020f83620001d4565b620002276200021e82620001fb565b8484546200016d565b825550505050565b5f90565b6200023d6200022f565b6200024a81848462000204565b505050565b5b818110156200027157620002655f8262000233565b60018101905062000250565b5050565b601f821115620002c0576200028a8162000140565b620002958462000152565b81016020851015620002a5578190505b620002bd620002b48562000152565b8301826200024f565b50505b505050565b5f82821c905092915050565b5f620002e25f1984600802620002c5565b1980831691505092915050565b5f620002fc8383620002d1565b9150826002028217905092915050565b6200031782620000a8565b67ffffffffffffffff811115620003335762000332620000b2565b5b6200033f82546200010c565b6200034c82828562000275565b5f60209050601f83116001811462000382575f84156200036d578287015190505b620003798582620002ef565b865550620003e8565b601f198416620003928662000140565b5f5b82811015620003bb5784890151825560018201915060208501945060208101905062000394565b86831015620003db5784890151620003d7601f891682620002d1565b8355505b6001600288020188555050505b505050505050565b6124ae80620003fe5f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c806370a0823111610095578063b88d4fde11610064578063b88d4fde14610281578063c87b56dd1461029d578063d0def521146102cd578063e985e9c5146102e9576100f3565b806370a08231146101f957806375794a3c1461022957806395d89b4114610247578063a22cb46514610265576100f3565b8063095ea7b3116100d1578063095ea7b31461017557806323b872dd1461019157806342842e0e146101ad5780636352211e146101c9576100f3565b806301ffc9a7146100f757806306fdde0314610127578063081812fc14610145575b5f80fd5b610111600480360381019061010c91906119a5565b610319565b60405161011e91906119ea565b60405180910390f35b61012f610379565b60405161013c9190611a8d565b60405180910390f35b61015f600480360381019061015a9190611ae0565b610408565b60405161016c9190611b4a565b60405180910390f35b61018f600480360381019061018a9190611b8d565b610422565b005b6101ab60048036038101906101a69190611bcb565b610439565b005b6101c760048036038101906101c29190611bcb565b610538565b005b6101e360048036038101906101de9190611ae0565b610557565b6040516101f09190611b4a565b60405180910390f35b610213600480360381019061020e9190611c1b565b6105dd565b6040516102209190611c55565b60405180910390f35b610231610693565b60405161023e9190611c55565b60405180910390f35b61024f610699565b60405161025c9190611a8d565b60405180910390f35b61027f600480360381019061027a9190611c98565b610729565b005b61029b60048036038101906102969190611e02565b61073f565b005b6102b760048036038101906102b29190611ae0565b61075c565b6040516102c49190611a8d565b60405180910390f35b6102e760048036038101906102e29190611edf565b610866565b005b61030360048036038101906102fe9190611f3c565b6108dd565b60405161031091906119ea565b60405180910390f35b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061037257506103718261096b565b5b9050919050565b60605f805461038790611fa7565b80601f01602080910402602001604051908101604052809291908181526020018280546103b390611fa7565b80156103fe5780601f106103d5576101008083540402835291602001916103fe565b820191905f5260205f20905b8154815290600101906020018083116103e157829003601f168201915b5050505050905090565b5f61041282610a4c565b61041b82610ac7565b9050919050565b610434828261042f610b00565b610b07565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104a9575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016104a09190611b4a565b60405180910390fd5b5f6104bc83836104b7610b00565b610c86565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610532578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161052993929190611fd7565b60405180910390fd5b50505050565b61055283838360405180602001604052805f81525061073f565b505050565b5f8061056283610d1a565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105d457826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016105cb9190611c55565b60405180910390fd5b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361064e575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016106459190611b4a565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60075481565b6060600180546106a890611fa7565b80601f01602080910402602001604051908101604052809291908181526020018280546106d490611fa7565b801561071f5780601f106106f65761010080835404028352916020019161071f565b820191905f5260205f20905b81548152906001019060200180831161070257829003601f168201915b5050505050905090565b61073b610734610b00565b8383610d53565b5050565b61074a848484610439565b61075684848484610ebc565b50505050565b606061076782610a4c565b5f60065f8481526020019081526020015f20805461078490611fa7565b80601f01602080910402602001604051908101604052809291908181526020018280546107b090611fa7565b80156107fb5780601f106107d2576101008083540402835291602001916107fb565b820191905f5260205f20905b8154815290600101906020018083116107de57829003601f168201915b505050505090505f61080b61106e565b90505f81510361081f578192505050610861565b5f8251111561085357808260405160200161083b929190612046565b60405160208183030381529060405292505050610861565b61085c84611084565b925050505b919050565b610872836007546110e9565b6108c160075483838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050506111dc565b60075f8154809291906108d390612096565b9190505550505050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a455750610a44826112ae565b5b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff16610a6c82610d1a565b73ffffffffffffffffffffffffffffffffffffffff1603610ac457806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610abb9190611c55565b60405180910390fd5b50565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b5f80610b1284610557565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610b7c57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015610b8f5750610b8d81846108dd565b155b15610bd157826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401610bc89190611b4a565b60405180910390fd5b8460045f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4809150509392505050565b5f80610c93858585611317565b90505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015610ced57505f60065f8681526020019081526020015f208054610ce890611fa7565b905014155b15610d0f5760065f8581526020019081526020015f205f610d0e91906118e7565b5b809150509392505050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dc357816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610dba9190611b4a565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610eaf91906119ea565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611068578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610eff610b00565b8685856040518563ffffffff1660e01b8152600401610f21949392919061212f565b6020604051808303815f875af1925050508015610f5c57506040513d601f19601f82011682018060405250810190610f59919061218d565b60015b610fdd573d805f8114610f8a576040519150601f19603f3d011682016040523d82523d5f602084013e610f8f565b606091505b505f815103610fd557836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610fcc9190611b4a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461106657836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161105d9190611b4a565b60405180910390fd5b505b50505050565b606060405180602001604052805f815250905090565b606061108f82610a4c565b5f61109861106e565b90505f8151116110b65760405180602001604052805f8152506110e1565b806110c084611549565b6040516020016110d1929190612046565b6040516020818303038152906040525b915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611159575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016111509190611b4a565b60405180910390fd5b5f61116583835f610c86565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111d7575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016111ce9190611b4a565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff166111fc83610d1a565b73ffffffffffffffffffffffffffffffffffffffff160361125457816040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161124b9190611c55565b60405180910390fd5b8060065f8481526020019081526020015f2090816112729190612355565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516112a29190611c55565b60405180910390a15050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8061132284610d1a565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461136357611362818486611613565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114155760045f8581526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461149457600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60605f6001611557846116d6565b0190505f8167ffffffffffffffff81111561157557611574611cde565b5b6040519080825280601f01601f1916602001820160405280156115a75781602001600182028036833780820191505090505b5090505f82602001820190505b600115611608578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816115fd576115fc612424565b5b0494505f85036115b4575b819350505050919050565b61161e838383611827565b6116d1575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361169257806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016116899190611c55565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016116c8929190612451565b60405180910390fd5b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611732577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161172857611727612424565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061176f576d04ee2d6d415b85acef8100000000838161176557611764612424565b5b0492506020810190505b662386f26fc10000831061179e57662386f26fc10000838161179457611793612424565b5b0492506010810190505b6305f5e10083106117c7576305f5e10083816117bd576117bc612424565b5b0492506008810190505b61271083106117ec5761271083816117e2576117e1612424565b5b0492506004810190505b6064831061180f576064838161180557611804612424565b5b0492506002810190505b600a831061181e576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118de57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061189f575061189e84846108dd565b5b806118dd57508273ffffffffffffffffffffffffffffffffffffffff166118c583610ac7565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5080546118f390611fa7565b5f825580601f106119045750611921565b601f0160209004905f5260205f20908101906119209190611924565b5b50565b5b8082111561193b575f815f905550600101611925565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61198481611950565b811461198e575f80fd5b50565b5f8135905061199f8161197b565b92915050565b5f602082840312156119ba576119b9611948565b5b5f6119c784828501611991565b91505092915050565b5f8115159050919050565b6119e4816119d0565b82525050565b5f6020820190506119fd5f8301846119db565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a3a578082015181840152602081019050611a1f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a5f82611a03565b611a698185611a0d565b9350611a79818560208601611a1d565b611a8281611a45565b840191505092915050565b5f6020820190508181035f830152611aa58184611a55565b905092915050565b5f819050919050565b611abf81611aad565b8114611ac9575f80fd5b50565b5f81359050611ada81611ab6565b92915050565b5f60208284031215611af557611af4611948565b5b5f611b0284828501611acc565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611b3482611b0b565b9050919050565b611b4481611b2a565b82525050565b5f602082019050611b5d5f830184611b3b565b92915050565b611b6c81611b2a565b8114611b76575f80fd5b50565b5f81359050611b8781611b63565b92915050565b5f8060408385031215611ba357611ba2611948565b5b5f611bb085828601611b79565b9250506020611bc185828601611acc565b9150509250929050565b5f805f60608486031215611be257611be1611948565b5b5f611bef86828701611b79565b9350506020611c0086828701611b79565b9250506040611c1186828701611acc565b9150509250925092565b5f60208284031215611c3057611c2f611948565b5b5f611c3d84828501611b79565b91505092915050565b611c4f81611aad565b82525050565b5f602082019050611c685f830184611c46565b92915050565b611c77816119d0565b8114611c81575f80fd5b50565b5f81359050611c9281611c6e565b92915050565b5f8060408385031215611cae57611cad611948565b5b5f611cbb85828601611b79565b9250506020611ccc85828601611c84565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611d1482611a45565b810181811067ffffffffffffffff82111715611d3357611d32611cde565b5b80604052505050565b5f611d4561193f565b9050611d518282611d0b565b919050565b5f67ffffffffffffffff821115611d7057611d6f611cde565b5b611d7982611a45565b9050602081019050919050565b828183375f83830152505050565b5f611da6611da184611d56565b611d3c565b905082815260208101848484011115611dc257611dc1611cda565b5b611dcd848285611d86565b509392505050565b5f82601f830112611de957611de8611cd6565b5b8135611df9848260208601611d94565b91505092915050565b5f805f8060808587031215611e1a57611e19611948565b5b5f611e2787828801611b79565b9450506020611e3887828801611b79565b9350506040611e4987828801611acc565b925050606085013567ffffffffffffffff811115611e6a57611e6961194c565b5b611e7687828801611dd5565b91505092959194509250565b5f80fd5b5f80fd5b5f8083601f840112611e9f57611e9e611cd6565b5b8235905067ffffffffffffffff811115611ebc57611ebb611e82565b5b602083019150836001820283011115611ed857611ed7611e86565b5b9250929050565b5f805f60408486031215611ef657611ef5611948565b5b5f611f0386828701611b79565b935050602084013567ffffffffffffffff811115611f2457611f2361194c565b5b611f3086828701611e8a565b92509250509250925092565b5f8060408385031215611f5257611f51611948565b5b5f611f5f85828601611b79565b9250506020611f7085828601611b79565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611fbe57607f821691505b602082108103611fd157611fd0611f7a565b5b50919050565b5f606082019050611fea5f830186611b3b565b611ff76020830185611c46565b6120046040830184611b3b565b949350505050565b5f81905092915050565b5f61202082611a03565b61202a818561200c565b935061203a818560208601611a1d565b80840191505092915050565b5f6120518285612016565b915061205d8284612016565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6120a082611aad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036120d2576120d1612069565b5b600182019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f612101826120dd565b61210b81856120e7565b935061211b818560208601611a1d565b61212481611a45565b840191505092915050565b5f6080820190506121425f830187611b3b565b61214f6020830186611b3b565b61215c6040830185611c46565b818103606083015261216e81846120f7565b905095945050505050565b5f815190506121878161197b565b92915050565b5f602082840312156121a2576121a1611948565b5b5f6121af84828501612179565b91505092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026122147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826121d9565b61221e86836121d9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61225961225461224f84611aad565b612236565b611aad565b9050919050565b5f819050919050565b6122728361223f565b61228661227e82612260565b8484546121e5565b825550505050565b5f90565b61229a61228e565b6122a5818484612269565b505050565b5b818110156122c8576122bd5f82612292565b6001810190506122ab565b5050565b601f82111561230d576122de816121b8565b6122e7846121ca565b810160208510156122f6578190505b61230a612302856121ca565b8301826122aa565b50505b505050565b5f82821c905092915050565b5f61232d5f1984600802612312565b1980831691505092915050565b5f612345838361231e565b9150826002028217905092915050565b61235e82611a03565b67ffffffffffffffff81111561237757612376611cde565b5b6123818254611fa7565b61238c8282856122cc565b5f60209050601f8311600181146123bd575f84156123ab578287015190505b6123b5858261233a565b86555061241c565b601f1984166123cb866121b8565b5f5b828110156123f2578489015182556001820191506020850194506020810190506123cd565b8683101561240f578489015161240b601f89168261231e565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6040820190506124645f830185611b3b565b6124716020830184611c46565b939250505056fea264697066735822122073ae518469cdfaae8a3500620b1e8d63d2d98f5abd3ee36e7606aa5a403d510464736f6c63430008150033