0x608060405234801561000f575f80fd5b50336040518060400160405280600581526020017f57494e47530000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f57494e4700000000000000000000000000000000000000000000000000000000815250816003908161008c91906106ff565b50806004908161009c91906106ff565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361010f575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610106919061080d565b60405180910390fd5b61011e8161015c60201b60201c565b506101573361013161021f60201b60201c565b600a61013d919061098e565b6334fb5e3861014c91906109d8565b61022760201b60201c565b610aa9565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610297575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161028e919061080d565b60405180910390fd5b6102a85f83836102ac60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036102fc578060025f8282546102f09190610a19565b925050819055506103ca565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610385578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161037c93929190610a5b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610411578060025f828254039250508190555061045b565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104b89190610a90565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061054057607f821691505b602082108103610553576105526104fc565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261057a565b6105bf868361057a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6106036105fe6105f9846105d7565b6105e0565b6105d7565b9050919050565b5f819050919050565b61061c836105e9565b6106306106288261060a565b848454610586565b825550505050565b5f90565b610644610638565b61064f818484610613565b505050565b5b81811015610672576106675f8261063c565b600181019050610655565b5050565b601f8211156106b75761068881610559565b6106918461056b565b810160208510156106a0578190505b6106b46106ac8561056b565b830182610654565b50505b505050565b5f82821c905092915050565b5f6106d75f19846008026106bc565b1980831691505092915050565b5f6106ef83836106c8565b9150826002028217905092915050565b610708826104c5565b67ffffffffffffffff811115610721576107206104cf565b5b61072b8254610529565b610736828285610676565b5f60209050601f831160018114610767575f8415610755578287015190505b61075f85826106e4565b8655506107c6565b601f19841661077586610559565b5f5b8281101561079c57848901518255600182019150602085019450602081019050610777565b868310156107b957848901516107b5601f8916826106c8565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107f7826107ce565b9050919050565b610807816107ed565b82525050565b5f6020820190506108205f8301846107fe565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156108a85780860481111561088457610883610826565b5b60018516156108935780820291505b80810290506108a185610853565b9450610868565b94509492505050565b5f826108c0576001905061097b565b816108cd575f905061097b565b81600181146108e357600281146108ed5761091c565b600191505061097b565b60ff8411156108ff576108fe610826565b5b8360020a91508482111561091657610915610826565b5b5061097b565b5060208310610133831016604e8410600b84101617156109515782820a90508381111561094c5761094b610826565b5b61097b565b61095e848484600161085f565b9250905081840481111561097557610974610826565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610998826105d7565b91506109a383610982565b92506109d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846108b1565b905092915050565b5f6109e2826105d7565b91506109ed836105d7565b92508282026109fb816105d7565b91508282048414831517610a1257610a11610826565b5b5092915050565b5f610a23826105d7565b9150610a2e836105d7565b9250828201905080821115610a4657610a45610826565b5b92915050565b610a55816105d7565b82525050565b5f606082019050610a6e5f8301866107fe565b610a7b6020830185610a4c565b610a886040830184610a4c565b949350505050565b5f602082019050610aa35f830184610a4c565b92915050565b61163280610ab65f395ff3fe608060405234801561000f575f80fd5b506004361061011f575f3560e01c806370a08231116100ab578063a9059cbb1161006f578063a9059cbb146102f3578063c4081a4c14610323578063dd62ed3e1461033f578063f2fde38b1461036f578063f66608fe1461038b5761011f565b806370a0823114610261578063715018a61461029157806379cc67901461029b5780638da5cb5b146102b757806395d89b41146102d55761011f565b806329975b43116100f257806329975b43146101bf578063313ce567146101db5780633af32abf146101f957806342966c6814610229578063530cd5ab146102455761011f565b806306fdde0314610123578063095ea7b31461014157806318160ddd1461017157806323b872dd1461018f575b5f80fd5b61012b6103a9565b60405161013891906111af565b60405180910390f35b61015b60048036038101906101569190611260565b610439565b60405161016891906112b8565b60405180910390f35b61017961045b565b60405161018691906112e0565b60405180910390f35b6101a960048036038101906101a491906112f9565b610464565b6040516101b691906112b8565b60405180910390f35b6101d960048036038101906101d49190611349565b610492565b005b6101e3610529565b6040516101f0919061138f565b60405180910390f35b610213600480360381019061020e9190611349565b610531565b60405161022091906112b8565b60405180910390f35b610243600480360381019061023e91906113a8565b610583565b005b61025f600480360381019061025a9190611349565b610597565b005b61027b60048036038101906102769190611349565b61062d565b60405161028891906112e0565b60405180910390f35b610299610672565b005b6102b560048036038101906102b09190611260565b610684565b005b6102bf6106a4565b6040516102cc91906113e2565b60405180910390f35b6102dd6106cc565b6040516102ea91906111af565b60405180910390f35b61030d60048036038101906103089190611260565b61075c565b60405161031a91906112b8565b60405180910390f35b61033d600480360381019061033891906113a8565b61077e565b005b610359600480360381019061035491906113fb565b6107c7565b60405161036691906112e0565b60405180910390f35b61038960048036038101906103849190611349565b610849565b005b6103936108cd565b6040516103a091906112e0565b60405180910390f35b6060600380546103b890611466565b80601f01602080910402602001604051908101604052809291908181526020018280546103e490611466565b801561042f5780601f106104065761010080835404028352916020019161042f565b820191905f5260205f20905b81548152906001019060200180831161041257829003601f168201915b5050505050905090565b5f806104436108d6565b90506104508185856108dd565b600191505092915050565b5f600254905090565b5f8061046e6108d6565b905061047b8582856108ef565b610486858585610981565b60019150509392505050565b61049a610a8b565b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f8160405161051e91906113e2565b60405180910390a150565b5f6012905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61059461058e6108d6565b82610b12565b50565b61059f610a8b565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a8160405161062291906113e2565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61067a610a8b565b610682610b91565b565b610696826106906108d6565b836108ef565b6106a08282610b12565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546106db90611466565b80601f016020809104026020016040519081016040528092919081815260200182805461070790611466565b80156107525780601f1061072957610100808354040283529160200191610752565b820191905f5260205f20905b81548152906001019060200180831161073557829003601f168201915b5050505050905090565b5f806107666108d6565b9050610773818585610981565b600191505092915050565b610786610a8b565b806006819055507faa4b71ac29531fdea0ef1650c76ef91e3771dac25f4a4dd2a561ff3e0b9a5de2816040516107bc91906112e0565b60405180910390a150565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610851610a8b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108c1575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108b891906113e2565b60405180910390fd5b6108ca81610ba4565b50565b5f600654905090565b5f33905090565b6108ea8383836001610c67565b505050565b5f6108fa84846107c7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461097b578181101561096c578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161096393929190611496565b60405180910390fd5b61097a84848484035f610c67565b5b50505050565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015610a1f575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610a2c57505f600654115b15610a7a575f606460065483610a4291906114f8565b610a4c9190611566565b90505f8183610a5b9190611596565b9050610a68853084610e36565b610a73858583610e36565b5050610a86565b610a85838383610e36565b5b505050565b610a936108d6565b73ffffffffffffffffffffffffffffffffffffffff16610ab16106a4565b73ffffffffffffffffffffffffffffffffffffffff1614610b1057610ad46108d6565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b0791906113e2565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b82575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610b7991906113e2565b60405180910390fd5b610b8d825f83610f26565b5050565b610b99610a8b565b610ba25f610ba4565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610cd7575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610cce91906113e2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d47575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610d3e91906113e2565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610e30578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e2791906112e0565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ea6575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e9d91906113e2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f16575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610f0d91906113e2565b60405180910390fd5b610f21838383610f26565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f76578060025f828254610f6a91906115c9565b92505081905550611044565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610fff578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610ff693929190611496565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361108b578060025f82825403925050819055506110d5565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161113291906112e0565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6111818261113f565b61118b8185611149565b935061119b818560208601611159565b6111a481611167565b840191505092915050565b5f6020820190508181035f8301526111c78184611177565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6111fc826111d3565b9050919050565b61120c816111f2565b8114611216575f80fd5b50565b5f8135905061122781611203565b92915050565b5f819050919050565b61123f8161122d565b8114611249575f80fd5b50565b5f8135905061125a81611236565b92915050565b5f8060408385031215611276576112756111cf565b5b5f61128385828601611219565b92505060206112948582860161124c565b9150509250929050565b5f8115159050919050565b6112b28161129e565b82525050565b5f6020820190506112cb5f8301846112a9565b92915050565b6112da8161122d565b82525050565b5f6020820190506112f35f8301846112d1565b92915050565b5f805f606084860312156113105761130f6111cf565b5b5f61131d86828701611219565b935050602061132e86828701611219565b925050604061133f8682870161124c565b9150509250925092565b5f6020828403121561135e5761135d6111cf565b5b5f61136b84828501611219565b91505092915050565b5f60ff82169050919050565b61138981611374565b82525050565b5f6020820190506113a25f830184611380565b92915050565b5f602082840312156113bd576113bc6111cf565b5b5f6113ca8482850161124c565b91505092915050565b6113dc816111f2565b82525050565b5f6020820190506113f55f8301846113d3565b92915050565b5f8060408385031215611411576114106111cf565b5b5f61141e85828601611219565b925050602061142f85828601611219565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061147d57607f821691505b6020821081036114905761148f611439565b5b50919050565b5f6060820190506114a95f8301866113d3565b6114b660208301856112d1565b6114c360408301846112d1565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6115028261122d565b915061150d8361122d565b925082820261151b8161122d565b91508282048414831517611532576115316114cb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6115708261122d565b915061157b8361122d565b92508261158b5761158a611539565b5b828204905092915050565b5f6115a08261122d565b91506115ab8361122d565b92508282039050818111156115c3576115c26114cb565b5b92915050565b5f6115d38261122d565b91506115de8361122d565b92508282019050808211156115f6576115f56114cb565b5b9291505056fea264697066735822122004efe113943108b900c06874022ba1cd20e537ff1f232d70d9adf02eec88e7e964736f6c634300081a0033