608060405260016006556014600755600160085560016009556064600a556064600b55601e600c556000600d556009600a6200003c919062000714565b61c3506200004b919062000765565b600f556009600a6200005e919062000714565b61c3506200006d919062000765565b6010556009600a62000080919062000714565b60006200008e919062000765565b6011556009600a620000a1919062000714565b6207a120620000b1919062000765565b60125560006015806101000a81548160ff0219169083151502179055506000601560166101000a81548160ff0219169083151502179055506000601560176101000a81548160ff0219169083151502179055503480156200011157600080fd5b50604051620047a9380380620047a98339818101604052810190620001379190620009d9565b620001576200014b6200048560201b60201c565b6200048d60201b60201c565b81601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620001a8919062000714565b620f4240620001b8919062000765565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160036000620002116200055160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060005b8151811015620003f557600160056000848481518110620003b257620003b162000a3f565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620003ec9062000a6e565b9150506200038c565b508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a62000456919062000714565b620f424062000466919062000765565b60405162000475919062000acc565b60405180910390a3505062000ae9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200060857808604811115620005e057620005df6200057a565b5b6001851615620005f05780820291505b80810290506200060085620005a9565b9450620005c0565b94509492505050565b600082620006235760019050620006f6565b81620006335760009050620006f6565b81600181146200064c576002811462000657576200068d565b6001915050620006f6565b60ff8411156200066c576200066b6200057a565b5b8360020a9150848211156200068657620006856200057a565b5b50620006f6565b5060208310610133831016604e8410600b8410161715620006c75782820a905083811115620006c157620006c06200057a565b5b620006f6565b620006d68484846001620005b6565b92509050818404811115620006f057620006ef6200057a565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200072182620006fd565b91506200072e8362000707565b92506200075d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000611565b905092915050565b60006200077282620006fd565b91506200077f83620006fd565b92508282026200078f81620006fd565b91508282048414831517620007a957620007a86200057a565b5b5092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007f182620007c4565b9050919050565b6200080381620007e4565b81146200080f57600080fd5b50565b6000815190506200082381620007f8565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000879826200082e565b810181811067ffffffffffffffff821117156200089b576200089a6200083f565b5b80604052505050565b6000620008b0620007b0565b9050620008be82826200086e565b919050565b600067ffffffffffffffff821115620008e157620008e06200083f565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b6200090c81620008f7565b81146200091857600080fd5b50565b6000815190506200092c8162000901565b92915050565b6000620009496200094384620008c3565b620008a4565b905080838252602082019050602084028301858111156200096f576200096e620008f2565b5b835b818110156200099c57806200098788826200091b565b84526020840193505060208101905062000971565b5050509392505050565b600082601f830112620009be57620009bd62000829565b5b8151620009d084826020860162000932565b91505092915050565b60008060408385031215620009f357620009f2620007ba565b5b600062000a038582860162000812565b925050602083015167ffffffffffffffff81111562000a275762000a26620007bf565b5b62000a3585828601620009a6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600062000a7b82620006fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000ab05762000aaf6200057a565b5b600182019050919050565b62000ac681620006fd565b82525050565b600060208201905062000ae3600083018462000abb565b92915050565b613cb08062000af96000396000f3fe6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063cd4a8deb11610095578063ea2f0b3711610064578063ea2f0b3714610647578063ea414b2814610670578063f2fde38b14610699578063f5648a4f146106c2576101e3565b8063cd4a8deb146105a1578063cf1cca32146105ca578063dd62ed3e146105e1578063e9b6bb8d1461061e576101e3565b8063bb054faf116100d1578063bb054faf1461050b578063bf474bed14610534578063c876d0b91461055f578063c9567bf91461058a576101e3565b80638da5cb5b1461044d5780638f9a55c01461047857806395d89b41146104a3578063a9059cbb146104ce576101e3565b8063313ce5671161017a578063715018a611610149578063715018a6146103cb57806371b9189c146103e2578063751039fc1461040b5780637d1db4a514610422576101e3565b8063313ce56714610323578063474150e41461034e57806351bc3c851461037757806370a082311461038e576101e3565b80630faee56f116101b65780630faee56f1461027957806318160ddd146102a457806323b872dd146102cf578063301370af1461030c576101e3565b806306fdde03146101e8578063095ea7b31461021357806309df275e14610250576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6106d9565b60405161020a9190612a74565b60405180910390f35b34801561021f57600080fd5b5061023a60048036038101906102359190612b3e565b610716565b6040516102479190612b99565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612bb4565b610734565b005b34801561028557600080fd5b5061028e61075e565b60405161029b9190612bf0565b60405180910390f35b3480156102b057600080fd5b506102b9610764565b6040516102c69190612bf0565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190612c0b565b610787565b6040516103039190612b99565b60405180910390f35b34801561031857600080fd5b50610321610860565b005b34801561032f57600080fd5b506103386108c4565b6040516103459190612c7a565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612bb4565b6108cd565b005b34801561038357600080fd5b5061038c61091b565b005b34801561039a57600080fd5b506103b560048036038101906103b09190612c95565b6109b8565b6040516103c29190612bf0565b60405180910390f35b3480156103d757600080fd5b506103e0610a01565b005b3480156103ee57600080fd5b5061040960048036038101906104049190612e0a565b610a15565b005b34801561041757600080fd5b50610420610ab2565b005b34801561042e57600080fd5b50610437610b6d565b6040516104449190612bf0565b60405180910390f35b34801561045957600080fd5b50610462610b73565b60405161046f9190612e62565b60405180910390f35b34801561048457600080fd5b5061048d610b9c565b60405161049a9190612bf0565b60405180910390f35b3480156104af57600080fd5b506104b8610ba2565b6040516104c59190612a74565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612b3e565b610bdf565b6040516105029190612b99565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190612bb4565b610bfd565b005b34801561054057600080fd5b50610549610c0f565b6040516105569190612bf0565b60405180910390f35b34801561056b57600080fd5b50610574610c15565b6040516105819190612b99565b60405180910390f35b34801561059657600080fd5b5061059f610c28565b005b3480156105ad57600080fd5b506105c860048036038101906105c39190612bb4565b611176565b005b3480156105d657600080fd5b506105df6111c4565b005b3480156105ed57600080fd5b5061060860048036038101906106039190612e7d565b6111f8565b6040516106159190612bf0565b60405180910390f35b34801561062a57600080fd5b5061064560048036038101906106409190612bb4565b61127f565b005b34801561065357600080fd5b5061066e60048036038101906106699190612c95565b611291565b005b34801561067c57600080fd5b5061069760048036038101906106929190612efb565b6112f4565b005b3480156106a557600080fd5b506106c060048036038101906106bb9190612c95565b6114df565b005b3480156106ce57600080fd5b506106d7611562565b005b60606040518060400160405280600981526020017f546f6675204368616e0000000000000000000000000000000000000000000000815250905090565b600061072a610723611623565b848461162b565b6001905092915050565b61073c6117f4565b6009600a61074a919061308a565b8161075591906130d5565b60128190555050565b60125481565b60006009600a610774919061308a565b620f424061078291906130d5565b905090565b6000610794848484611872565b610855846107a0611623565b61085085604051806060016040528060288152602001613c5360289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610806611623565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123489092919063ffffffff16565b61162b565b600190509392505050565b6108686117f4565b6000610873306109b8565b905060008111156108a157610887816123ac565b6000479050600081111561089f5761089e4761264f565b5b505b600060068190555060006007819055506000600881905550600060098190555050565b60006009905090565b6108d56117f4565b600d54811015610911576040517f1127e1ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600a8190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661095c611623565b73ffffffffffffffffffffffffffffffffffffffff161461097c57600080fd5b6000610987306109b8565b9050600081111561099c5761099b816123ac565b5b600047905060008111156109b4576109b38161264f565b5b5050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a096117f4565b610a1360006126bb565b565b610a1d6117f4565b60005b8151811015610aae57600160036000848481518110610a4257610a41613117565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610aa690613146565b915050610a20565b5050565b610aba6117f4565b6009600a610ac8919061308a565b620f4240610ad691906130d5565b600f819055506009600a610aea919061308a565b620f4240610af891906130d5565b6010819055506000601560176101000a81548160ff0219169083151502179055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6009600a610b48919061308a565b620f4240610b5691906130d5565b604051610b639190612bf0565b60405180910390a1565b600f5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b60606040518060400160405280600481526020017f544f424500000000000000000000000000000000000000000000000000000000815250905090565b6000610bf3610bec611623565b8484611872565b6001905092915050565b610c056117f4565b80600c8190555050565b60115481565b601560179054906101000a900460ff1681565b610c306117f4565b60011515601560149054906101000a900460ff16151503610c7d576040517fb570a37400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160056000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051602001610cb69190613226565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff021916908315150217905550610d3930601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a610d26919061308a565b620f4240610d3491906130d5565b61162b565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dca9190613256565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e779190613256565b6040518363ffffffff1660e01b8152600401610e94929190613283565b6020604051808303816000875af1158015610eb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed79190613256565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610f60306109b8565b600080610f6b610b73565b426040518863ffffffff1660e01b8152600401610f8d969594939291906132e7565b60606040518083038185885af1158015610fab573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fd0919061335d565b505050600160056000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405160200161100c91906133c7565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff021916908315150217905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016110e69291906133e2565b6020604051808303816000875af1158015611105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111299190613437565b50610e10426111389190613464565b600e819055506001601560166101000a81548160ff0219169083151502179055506001601560146101000a81548160ff021916908315150217905550565b61117e6117f4565b600d548110156111ba576040517f1127e1ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b8190555050565b6111cc6117f4565b601560169054906101000a900460ff1615601560166101000a81548160ff021916908315150217905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6112876117f4565b8060118190555050565b6112996117f4565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6112fc610b73565b73ffffffffffffffffffffffffffffffffffffffff1661131a611623565b73ffffffffffffffffffffffffffffffffffffffff161415806113925750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611379611623565b73ffffffffffffffffffffffffffffffffffffffff1614155b156113c9576040517f275ffbfa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060036000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6114e76117f4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d9061350a565b60405180910390fd5b61155f816126bb565b50565b61156a6117f4565b60003373ffffffffffffffffffffffffffffffffffffffff16476040516115909061355b565b60006040518083038185875af1925050503d80600081146115cd576040519150601f19603f3d011682016040523d82523d6000602084013e6115d2565b606091505b505090508061160d576040517f625a40e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611620303361161b306109b8565b611872565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361169a576040517f0f2d6085000000000000000000000000000000000000000000000000000000008152600401611691906135bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611709576040517f0f2d608500000000000000000000000000000000000000000000000000000000815260040161170090613628565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117e79190612bf0565b60405180910390a3505050565b6117fc611623565b73ffffffffffffffffffffffffffffffffffffffff1661181a610b73565b73ffffffffffffffffffffffffffffffffffffffff1614611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790613694565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118e1576040517f0f2d60850000000000000000000000000000000000000000000000000000000081526004016118d890613700565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611950576040517f0f2d60850000000000000000000000000000000000000000000000000000000081526004016119479061376c565b60405180910390fd5b60008111611993576040517ff9ea61b100000000000000000000000000000000000000000000000000000000815260040161198a906137d8565b60405180910390fd5b61199c3361277f565b6119db576040517f2ab07af00000000000000000000000000000000000000000000000000000000081526004016119d290613844565b60405180910390fd5b6119e48361277f565b611a23576040517f2ab07af0000000000000000000000000000000000000000000000000000000008152600401611a1a906138b0565b60405180910390fd5b611a2c8261277f565b611a6b576040517f2ab07af0000000000000000000000000000000000000000000000000000000008152600401611a629061376c565b60405180910390fd5b6000611a75610b73565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611ae35750611ab3610b73565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611b1b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561208b57601560179054906101000a900460ff1615611c7857601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611be15750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611c775743600460003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c3257600080fd5b43600460003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611d235750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611d795750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e5457600f54821115611dc3576040517fa6bd0218000000000000000000000000000000000000000000000000000000008152600401611dba906137d8565b60405180910390fd5b60105482611dd0856109b8565b611dda9190613464565b1115611e1b576040517fa6bd0218000000000000000000000000000000000000000000000000000000008152600401611e129061391c565b60405180910390fd5b600c54600d541015611e3b57611e30836127e9565b15611e3a57600080fd5b5b600d6000815480929190611e4e90613146565b91905055505b611e906064611e82600a54600d5411611e6f57600654611e73565b6008545b856127fc90919063ffffffff16565b61287690919063ffffffff16565b9050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f1b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611fa457600f54821115611f65576040517fa6bd0218000000000000000000000000000000000000000000000000000000008152600401611f5c90613988565b60405180910390fd5b611fa16064611f93600b54600d5411611f8057600754611f84565b6009545b856127fc90919063ffffffff16565b61287690919063ffffffff16565b90505b6000611faf306109b8565b905060158054906101000a900460ff161580156120195750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156120315750601560169054906101000a900460ff165b801561203e575060115481115b801561204d5750600c54600d54115b156120895761206f61206a84612065846012546128c0565b6128c0565b6123ac565b60004790506000811115612087576120864761264f565b5b505b505b600081111561218f576120e681600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121869190612bf0565b60405180910390a35b6121e182600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061228861223a828461293790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61232d848661293790919063ffffffff16565b60405161233a9190612bf0565b60405180910390a350505050565b6000838311158290612390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123879190612a74565b60405180910390fd5b506000838561239f91906139a8565b9050809150509392505050565b60016015806101000a81548160ff021916908315150217905550600081031561263257601560149054906101000a900460ff1615612632576000600267ffffffffffffffff81111561240157612400612cc7565b5b60405190808252806020026020018201604052801561242f5781602001602082028036833780820191505090505b509050308160008151811061244757612446613117565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125129190613256565b8160018151811061252657612525613117565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061258d30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461162b565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c426125de9190613464565b6040518663ffffffff1660e01b81526004016125fe959493929190613a9a565b600060405180830381600087803b15801561261857600080fd5b505af115801561262c573d6000803e3d6000fd5b50505050505b60006015806101000a81548160ff02191690831515021790555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156126b7573d6000803e3d6000fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600e544210156127df5760008260405160200161279e91906133c7565b6040516020818303038152906040528051906020012090506005600082815260200190815260200160002060009054906101000a900460ff169150506127e4565b600190505b919050565b600080823b905060008111915050919050565b600080830361280e5760009050612870565b6000828461281c91906130d5565b905082848261282b9190613b23565b1461286b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286290613bc6565b60405180910390fd5b809150505b92915050565b60006128b883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612981565b905092915050565b60008183116128cf57826128d1565b815b905092915050565b60008082846128e89190613464565b90508381101561292d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292490613c32565b60405180910390fd5b8091505092915050565b600061297983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612348565b905092915050565b600080831182906129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf9190612a74565b60405180910390fd5b50600083856129d79190613b23565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a1e578082015181840152602081019050612a03565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a46826129e4565b612a5081856129ef565b9350612a60818560208601612a00565b612a6981612a2a565b840191505092915050565b60006020820190508181036000830152612a8e8184612a3b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ad582612aaa565b9050919050565b612ae581612aca565b8114612af057600080fd5b50565b600081359050612b0281612adc565b92915050565b6000819050919050565b612b1b81612b08565b8114612b2657600080fd5b50565b600081359050612b3881612b12565b92915050565b60008060408385031215612b5557612b54612aa0565b5b6000612b6385828601612af3565b9250506020612b7485828601612b29565b9150509250929050565b60008115159050919050565b612b9381612b7e565b82525050565b6000602082019050612bae6000830184612b8a565b92915050565b600060208284031215612bca57612bc9612aa0565b5b6000612bd884828501612b29565b91505092915050565b612bea81612b08565b82525050565b6000602082019050612c056000830184612be1565b92915050565b600080600060608486031215612c2457612c23612aa0565b5b6000612c3286828701612af3565b9350506020612c4386828701612af3565b9250506040612c5486828701612b29565b9150509250925092565b600060ff82169050919050565b612c7481612c5e565b82525050565b6000602082019050612c8f6000830184612c6b565b92915050565b600060208284031215612cab57612caa612aa0565b5b6000612cb984828501612af3565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612cff82612a2a565b810181811067ffffffffffffffff82111715612d1e57612d1d612cc7565b5b80604052505050565b6000612d31612a96565b9050612d3d8282612cf6565b919050565b600067ffffffffffffffff821115612d5d57612d5c612cc7565b5b602082029050602081019050919050565b600080fd5b6000612d86612d8184612d42565b612d27565b90508083825260208201905060208402830185811115612da957612da8612d6e565b5b835b81811015612dd25780612dbe8882612af3565b845260208401935050602081019050612dab565b5050509392505050565b600082601f830112612df157612df0612cc2565b5b8135612e01848260208601612d73565b91505092915050565b600060208284031215612e2057612e1f612aa0565b5b600082013567ffffffffffffffff811115612e3e57612e3d612aa5565b5b612e4a84828501612ddc565b91505092915050565b612e5c81612aca565b82525050565b6000602082019050612e776000830184612e53565b92915050565b60008060408385031215612e9457612e93612aa0565b5b6000612ea285828601612af3565b9250506020612eb385828601612af3565b9150509250929050565b6000612ec882612aaa565b9050919050565b612ed881612ebd565b8114612ee357600080fd5b50565b600081359050612ef581612ecf565b92915050565b600060208284031215612f1157612f10612aa0565b5b6000612f1f84828501612ee6565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115612fae57808604811115612f8a57612f89612f28565b5b6001851615612f995780820291505b8081029050612fa785612f57565b9450612f6e565b94509492505050565b600082612fc75760019050613083565b81612fd55760009050613083565b8160018114612feb5760028114612ff557613024565b6001915050613083565b60ff84111561300757613006612f28565b5b8360020a91508482111561301e5761301d612f28565b5b50613083565b5060208310610133831016604e8410600b84101617156130595782820a90508381111561305457613053612f28565b5b613083565b6130668484846001612f64565b9250905081840481111561307d5761307c612f28565b5b81810290505b9392505050565b600061309582612b08565b91506130a083612c5e565b92506130cd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612fb7565b905092915050565b60006130e082612b08565b91506130eb83612b08565b92508282026130f981612b08565b915082820484148315176131105761310f612f28565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061315182612b08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361318357613182612f28565b5b600182019050919050565b6000819050919050565b60006131b36131ae6131a984612aaa565b61318e565b612aaa565b9050919050565b60006131c582613198565b9050919050565b60006131d7826131ba565b9050919050565b60008160601b9050919050565b60006131f6826131de565b9050919050565b6000613208826131eb565b9050919050565b61322061321b826131cc565b6131fd565b82525050565b6000613232828461320f565b60148201915081905092915050565b60008151905061325081612adc565b92915050565b60006020828403121561326c5761326b612aa0565b5b600061327a84828501613241565b91505092915050565b60006040820190506132986000830185612e53565b6132a56020830184612e53565b9392505050565b6000819050919050565b60006132d16132cc6132c7846132ac565b61318e565b612b08565b9050919050565b6132e1816132b6565b82525050565b600060c0820190506132fc6000830189612e53565b6133096020830188612be1565b61331660408301876132d8565b61332360608301866132d8565b6133306080830185612e53565b61333d60a0830184612be1565b979650505050505050565b60008151905061335781612b12565b92915050565b60008060006060848603121561337657613375612aa0565b5b600061338486828701613348565b935050602061339586828701613348565b92505060406133a686828701613348565b9150509250925092565b6133c16133bc82612aca565b6131fd565b82525050565b60006133d382846133b0565b60148201915081905092915050565b60006040820190506133f76000830185612e53565b6134046020830184612be1565b9392505050565b61341481612b7e565b811461341f57600080fd5b50565b6000815190506134318161340b565b92915050565b60006020828403121561344d5761344c612aa0565b5b600061345b84828501613422565b91505092915050565b600061346f82612b08565b915061347a83612b08565b925082820190508082111561349257613491612f28565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134f46026836129ef565b91506134ff82613498565b604082019050919050565b60006020820190508181036000830152613523816134e7565b9050919050565b600081905092915050565b50565b600061354560008361352a565b915061355082613535565b600082019050919050565b600061356682613538565b9150819050919050565b7f4f776e6572000000000000000000000000000000000000000000000000000000600082015250565b60006135a66005836129ef565b91506135b182613570565b602082019050919050565b600060208201905081810360008301526135d581613599565b9050919050565b7f7370656e64657200000000000000000000000000000000000000000000000000600082015250565b60006136126007836129ef565b915061361d826135dc565b602082019050919050565b6000602082019050818103600083015261364181613605565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061367e6020836129ef565b915061368982613648565b602082019050919050565b600060208201905081810360008301526136ad81613671565b9050919050565b7f66726f6d00000000000000000000000000000000000000000000000000000000600082015250565b60006136ea6004836129ef565b91506136f5826136b4565b602082019050919050565b60006020820190508181036000830152613719816136dd565b9050919050565b7f746f000000000000000000000000000000000000000000000000000000000000600082015250565b60006137566002836129ef565b915061376182613720565b602082019050919050565b6000602082019050818103600083015261378581613749565b9050919050565b7f616d6f756e740000000000000000000000000000000000000000000000000000600082015250565b60006137c26006836129ef565b91506137cd8261378c565b602082019050919050565b600060208201905081810360008301526137f1816137b5565b9050919050565b7f43616c6c65720000000000000000000000000000000000000000000000000000600082015250565b600061382e6006836129ef565b9150613839826137f8565b602082019050919050565b6000602082019050818103600083015261385d81613821565b9050919050565b7f46726f6d00000000000000000000000000000000000000000000000000000000600082015250565b600061389a6004836129ef565b91506138a582613864565b602082019050919050565b600060208201905081810360008301526138c98161388d565b9050919050565b7f4d57530000000000000000000000000000000000000000000000000000000000600082015250565b60006139066003836129ef565b9150613911826138d0565b602082019050919050565b60006020820190508181036000830152613935816138f9565b9050919050565b7f4d54410000000000000000000000000000000000000000000000000000000000600082015250565b60006139726003836129ef565b915061397d8261393c565b602082019050919050565b600060208201905081810360008301526139a181613965565b9050919050565b60006139b382612b08565b91506139be83612b08565b92508282039050818111156139d6576139d5612f28565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a1181612aca565b82525050565b6000613a238383613a08565b60208301905092915050565b6000602082019050919050565b6000613a47826139dc565b613a5181856139e7565b9350613a5c836139f8565b8060005b83811015613a8d578151613a748882613a17565b9750613a7f83613a2f565b925050600181019050613a60565b5085935050505092915050565b600060a082019050613aaf6000830188612be1565b613abc60208301876132d8565b8181036040830152613ace8186613a3c565b9050613add6060830185612e53565b613aea6080830184612be1565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613b2e82612b08565b9150613b3983612b08565b925082613b4957613b48613af4565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bb06021836129ef565b9150613bbb82613b54565b604082019050919050565b60006020820190508181036000830152613bdf81613ba3565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613c1c601b836129ef565b9150613c2782613be6565b602082019050919050565b60006020820190508181036000830152613c4b81613c0f565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122064b36da5824999c6ea8a07f4e247715658a246a295c34b1d294eb3e73374e2bb64736f6c634300081200330000000000000000000000002c73df2f869ffe5a9768329429987b8ba2fa2cfe000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000144849ae898eb393bba40aedeb6265acd0b543b0b4d9c5e0e6ba14cf55dd2ca4549572d1e02df06fa956a9e4964acde492472ed852942e6bad354df1a9159bb46cbee432a39cf5b1805478f4a62de890ecc166d13d6cd3ad906594e69daf445dba1a8f5c8129d20607c9d22b8993d3c02985c98d0610b1a02afb3c8c85d02128f25e816b9a6ec97829fcd5bcaa8e7f32b0716b6f87bd8fb3c378889a2fdbde5759e88da73fbb384182aa0629614801ce5eb5c4e9eab7d2cd5091151c40af8365752d30af62b5a3f491a1e29bc16f7227b223b9063845c08ad23df5c795479ef74f0786334f013a1406529de9433381d34f0302b089d3dcc03b495a08ec4a136e430d804a9cbac3b9f609eada6f4c9bfb7236acb22c3e74022b0ff8920e210377a0a276dd2f6839dec8af3ad431cf28d9120aabb591dc4412bc33143337502b46fa40bf42c9dd9f6535ef796dcbde59d44bfcd48deeba6a46a81cc4429ccfdc1fb2b58335efa6bad09df7e0f311c0164ca47ed5c79045d87da29b48f22ce7c1a042da027c0f75abe437f3905deea3bffa478e7f1b724149094dfb4993029806c1100f038f481245f4d647fde254218c3e108b8fee387d5921d39c2aa14af4096ed3da71500ec9d5457ecb7056040577d7c4a4b02a2855080bb7cdc16de2ab28bf371419ff2431dfc346b5beb7b5476a650d39f7a42d7b39f591bd0b7888105ca4ba798e6ae18f4d1d0a6be4c55e4d72241ea70fab0fdbc6f2d39f193a12add59ed65b61dd3b491734de6ceaa1321c205a670464414262b476913807e4fec46e7ba49ac12fe37be52da1909a24b3ee573bb0c7c1c019c50fd96e23a500c62898ca20d9d7ce9baa5a045b331c356aa6235fcbe6e8ae9d382363a7f8f3ffa9886b449c