60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a919062000960565b506000600d55605a600e55666e2255f4098000600f556000601160016101000a81548160ff0219169083151502179055503480156200008857600080fd5b5060405162005541380380620055418339818101604052810190620000ae919062000afa565b6040518060400160405280601681526020017f3574682044696d656e73696f6e204f726967696e616c000000000000000000008152506040518060400160405280601681526020017f3574682044696d656e73696f6e204f726967696e616c0000000000000000000081525081600290816200012b919062000960565b5080600390816200013d919062000960565b506200014e620003d760201b60201c565b6000819055505050620001766200016a620003e060201b60201c565b620003e860201b60201c565b62000186620004ae60201b60201c565b6001601160006101000a81548160ff02191690831515021790555060016014600073a8c10ec49df815e73a881abbe0aa7b210f39e2df73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460007379bb164367bb64742e993f381372961a945bf44773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600073fd88229910a28d6b319e147b40c822fa5cf38a4573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160146000736b40a842e05d60081f5474046c713b294b4bbc6373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160146000738528fa2503c49893b704b981e0cbac021e67878973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003cf8282620004d760201b60201c565b505062000c5c565b60006001905090565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004d5733cc6cdda760b79bafa08df41ecfa224f810dceb660016200067a60201b60201c565b565b620004e7620006dc60201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111562000548576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200053f9062000bc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620005ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b19062000c3a565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b637d3e3dbe8260601b60601c925081620006a95782620006a157634420e4869050620006a9565b63a0af290390505b8060e01b600052306004528260245260008060446000806daaeb6d7670e522a718067333cd4e5af1506000602452505050565b6000612710905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200076857607f821691505b6020821081036200077e576200077d62000720565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007a9565b620007f48683620007a9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008416200083b62000835846200080c565b62000816565b6200080c565b9050919050565b6000819050919050565b6200085d8362000820565b620008756200086c8262000848565b848454620007b6565b825550505050565b600090565b6200088c6200087d565b6200089981848462000852565b505050565b5b81811015620008c157620008b560008262000882565b6001810190506200089f565b5050565b601f8211156200091057620008da8162000784565b620008e58462000799565b81016020851015620008f5578190505b6200090d620009048562000799565b8301826200089e565b50505b505050565b600082821c905092915050565b6000620009356000198460080262000915565b1980831691505092915050565b600062000950838362000922565b9150826002028217905092915050565b6200096b82620006e6565b67ffffffffffffffff811115620009875762000986620006f1565b5b6200099382546200074f565b620009a0828285620008c5565b600060209050601f831160018114620009d85760008415620009c3578287015190505b620009cf858262000942565b86555062000a3f565b601f198416620009e88662000784565b60005b8281101562000a1257848901518255600182019150602085019450602081019050620009eb565b8683101562000a32578489015162000a2e601f89168262000922565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a798262000a4c565b9050919050565b62000a8b8162000a6c565b811462000a9757600080fd5b50565b60008151905062000aab8162000a80565b92915050565b60006bffffffffffffffffffffffff82169050919050565b62000ad48162000ab1565b811462000ae057600080fd5b50565b60008151905062000af48162000ac9565b92915050565b6000806040838503121562000b145762000b1362000a47565b5b600062000b248582860162000a9a565b925050602062000b378582860162000ae3565b9150509250929050565b600082825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b600062000bb0602a8362000b41565b915062000bbd8262000b52565b604082019050919050565b6000602082019050818103600083015262000be38162000ba1565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b600062000c2260198362000b41565b915062000c2f8262000bea565b602082019050919050565b6000602082019050818103600083015262000c558162000c13565b9050919050565b6148d58062000c6c6000396000f3fe6080604052600436106102885760003560e01c806374d0101d1161015a578063c1e1ce29116100c1578063dc33e6811161007a578063dc33e68114610986578063e75179a4146109c3578063e985e9c5146109ec578063f2fde38b14610a29578063f4a0a52814610a52578063fb796e6c14610a7b57610288565b8063c1e1ce2914610876578063c21b471b146108a1578063c6682862146108ca578063c6ab67a3146108f5578063c87b56dd14610920578063da3ef23f1461095d57610288565b8063aa592f2511610113578063aa592f2514610763578063b366d6131461078e578063b629f192146107b7578063b7c0b8e8146107f4578063b88d4fde1461081d578063bbadfe761461083957610288565b806374d0101d1461066757806378acea1e146106905780638342083a146106b95780638da5cb5b146106e457806395d89b411461070f578063a22cb4651461073a57610288565b80633ccfd60b116101fe578063601e5e77116101b7578063601e5e77146105575780636352211e146105825780636817c76c146105bf57806369e2f0fb146105ea57806370a0823114610613578063715018a61461065057610288565b80633ccfd60b146104795780633dd08c3814610490578063402c3856146104cd57806342842e0e146104e9578063559c55b91461050557806355f804b31461052e57610288565b806318160ddd1161025057806318160ddd1461037757806323b872dd146103a257806326aa420a146103be5780632a55205a146103e757806332cb6b0c14610425578063345318281461045057610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b314610332578063109695231461034e575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af91906133c0565b610aa6565b6040516102c19190613408565b60405180910390f35b3480156102d657600080fd5b506102df610ac8565b6040516102ec91906134b3565b60405180910390f35b34801561030157600080fd5b5061031c6004803603810190610317919061350b565b610b5a565b6040516103299190613579565b60405180910390f35b61034c600480360381019061034791906135c0565b610bd9565b005b34801561035a57600080fd5b5061037560048036038101906103709190613665565b610c48565b005b34801561038357600080fd5b5061038c610d67565b60405161039991906136c1565b60405180910390f35b6103bc60048036038101906103b791906136dc565b610d7e565b005b3480156103ca57600080fd5b506103e560048036038101906103e0919061350b565b610df7565b005b3480156103f357600080fd5b5061040e6004803603810190610409919061372f565b610e09565b60405161041c92919061376f565b60405180910390f35b34801561043157600080fd5b5061043a610ff3565b60405161044791906136c1565b60405180910390f35b34801561045c57600080fd5b50610477600480360381019061047291906133c0565b610ff8565b005b34801561048557600080fd5b5061048e61106d565b005b34801561049c57600080fd5b506104b760048036038101906104b29190613798565b61111b565b6040516104c49190613408565b60405180910390f35b6104e760048036038101906104e291906137f1565b61113b565b005b61050360048036038101906104fe91906136dc565b6113ef565b005b34801561051157600080fd5b5061052c6004803603810190610527919061350b565b611468565b005b34801561053a57600080fd5b5061055560048036038101906105509190613665565b61147a565b005b34801561056357600080fd5b5061056c611551565b60405161057991906136c1565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061350b565b611557565b6040516105b69190613579565b60405180910390f35b3480156105cb57600080fd5b506105d4611569565b6040516105e191906136c1565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c9190613798565b61156f565b005b34801561061f57600080fd5b5061063a60048036038101906106359190613798565b611665565b60405161064791906136c1565b60405180910390f35b34801561065c57600080fd5b5061066561171d565b005b34801561067357600080fd5b5061068e600480360381019061068991906135c0565b611731565b005b34801561069c57600080fd5b506106b760048036038101906106b29190613844565b611856565b005b3480156106c557600080fd5b506106ce61187b565b6040516106db91906136c1565b60405180910390f35b3480156106f057600080fd5b506106f9611881565b6040516107069190613579565b60405180910390f35b34801561071b57600080fd5b506107246118ab565b60405161073191906134b3565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c9190613871565b61193d565b005b34801561076f57600080fd5b506107786119ac565b60405161078591906136c1565b60405180910390f35b34801561079a57600080fd5b506107b560048036038101906107b09190613798565b6119b1565b005b3480156107c357600080fd5b506107de60048036038101906107d99190613798565b611aa7565b6040516107eb9190613408565b60405180910390f35b34801561080057600080fd5b5061081b60048036038101906108169190613844565b611ac7565b005b610837600480360381019061083291906139e1565b611ba5565b005b34801561084557600080fd5b50610860600480360381019061085b91906133c0565b611c20565b60405161086d9190613408565b60405180910390f35b34801561088257600080fd5b5061088b611c40565b6040516108989190613408565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190613aa8565b611c53565b005b3480156108d657600080fd5b506108df611c69565b6040516108ec91906134b3565b60405180910390f35b34801561090157600080fd5b5061090a611cf7565b60405161091791906134b3565b60405180910390f35b34801561092c57600080fd5b506109476004803603810190610942919061350b565b611d85565b60405161095491906134b3565b60405180910390f35b34801561096957600080fd5b50610984600480360381019061097f9190613b89565b611e2f565b005b34801561099257600080fd5b506109ad60048036038101906109a89190613798565b611e4a565b6040516109ba91906136c1565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e59190613798565b611e5c565b005b3480156109f857600080fd5b50610a136004803603810190610a0e9190613bd2565b611f6c565b604051610a209190613408565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190613798565b612000565b005b348015610a5e57600080fd5b50610a796004803603810190610a74919061350b565b612083565b005b348015610a8757600080fd5b50610a90612095565b604051610a9d9190613408565b60405180910390f35b6000610ab1826120a8565b80610ac15750610ac08261213a565b5b9050919050565b606060028054610ad790613c41565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0390613c41565b8015610b505780601f10610b2557610100808354040283529160200191610b50565b820191906000526020600020905b815481529060010190602001808311610b3357829003601f168201915b5050505050905090565b6000610b65826121b4565b610b9b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81601160009054906101000a900460ff168015610c385769c617113400112233445560005230601a528160601b60601c603a52600080604460166daaeb6d7670e522a718067333cd4e5afa610c32573d6000803e3d6000fd5b6000603a525b610c428484612213565b50505050565b6012600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615610d01576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d09612357565b600060108054610d1890613c41565b905014610d51576040517f19e24c1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818160109182610d62929190613e29565b505050565b6000610d716123d5565b6001546000540303905090565b82601160009054906101000a900460ff168015610de557338260601b60601c14610de45769c617113400112233445560005230601a5233603a52600080604460166daaeb6d7670e522a718067333cd4e5afa610dde573d6000803e3d6000fd5b6000603a525b5b610df08585856123de565b5050505050565b610dff612357565b80600e8190555050565b6000806000600960008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610f9e5760086040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610fa8612700565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610fd49190613f28565b610fde9190613f99565b90508160000151819350935050509250929050565b606381565b611000612357565b600160126000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611075612357565b60003373ffffffffffffffffffffffffffffffffffffffff164760405161109b90613ffb565b60006040518083038185875af1925050503d80600081146110d8576040519150601f19603f3d011682016040523d82523d6000602084013e6110dd565b606091505b5050905080611118576040517f750b219c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60146020528060005260406000206000915054906101000a900460ff1681565b60011515601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c59061405c565b60405180910390fd5b60011515601160019054906101000a900460ff16151514611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b906140c8565b60405180910390fd5b600e54821115611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090614134565b60405180910390fd5b60638261127461270a565b61127e9190614154565b11156112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b6906141d4565b60405180910390fd5b6000600f54836112cf9190613f28565b905080341015611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90614240565b60405180910390fd5b61131e848461271d565b82600e60008282546113309190614260565b9250508190555081601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550803411156113e9573373ffffffffffffffffffffffffffffffffffffffff166108fc82346113bc9190614260565b9081150290604051600060405180830381858888f193505050501580156113e7573d6000803e3d6000fd5b505b50505050565b82601160009054906101000a900460ff16801561145657338260601b60601c146114555769c617113400112233445560005230601a5233603a52600080604460166daaeb6d7670e522a718067333cd4e5afa61144f573d6000803e3d6000fd5b6000603a525b5b6114618585856128d8565b5050505050565b611470612357565b80600d8190555050565b6012600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615611533576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61153b612357565b8181600b918261154c929190613e29565b505050565b600d5481565b6000611562826128f8565b9050919050565b600f5481565b611577612357565b60011515601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461160a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611601906142e0565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116cc576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611725612357565b61172f60006129c4565b565b6012600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16156117ea576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117f2612357565b6063816117fd61270a565b6118079190614154565b1115611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f906141d4565b60405180910390fd5b611852828261271d565b5050565b61185e612357565b80601160016101000a81548160ff02191690831515021790555050565b600e5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546118ba90613c41565b80601f01602080910402602001604051908101604052809291908181526020018280546118e690613c41565b80156119335780601f1061190857610100808354040283529160200191611933565b820191906000526020600020905b81548152906001019060200180831161191657829003601f168201915b5050505050905090565b81601160009054906101000a900460ff16801561199c5769c617113400112233445560005230601a528160601b60601c603a52600080604460166daaeb6d7670e522a718067333cd4e5afa611996573d6000803e3d6000fd5b6000603a525b6119a68484612a8a565b50505050565b600981565b6119b9612357565b60001515601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a439061434c565b60405180910390fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b6012600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615611b80576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b88612357565b80601160006101000a81548160ff02191690831515021790555050565b83601160009054906101000a900460ff168015611c0c57338260601b60601c14611c0b5769c617113400112233445560005230601a5233603a52600080604460166daaeb6d7670e522a718067333cd4e5afa611c05573d6000803e3d6000fd5b6000603a525b5b611c1886868686612b95565b505050505050565b60126020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611c5b612357565b611c658282612c08565b5050565b600c8054611c7690613c41565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca290613c41565b8015611cef5780601f10611cc457610100808354040283529160200191611cef565b820191906000526020600020905b815481529060010190602001808311611cd257829003601f168201915b505050505081565b60108054611d0490613c41565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3090613c41565b8015611d7d5780601f10611d5257610100808354040283529160200191611d7d565b820191906000526020600020905b815481529060010190602001808311611d6057829003601f168201915b505050505081565b6060611d90826121b4565b611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc6906143de565b60405180910390fd5b6000611dd9612d9d565b90506000815111611df95760405180602001604052806000815250611e27565b80611e0384612e2f565b600c604051602001611e17939291906144bd565b6040516020818303038152906040525b915050919050565b611e37612357565b80600c9081611e4691906144ee565b5050565b6000611e5582612efd565b9050919050565b6012600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615611f15576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f1d612357565b6009611f2761270a565b10611f5e576040517f1f0f14ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f6981600961271d565b50565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612008612357565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206e90614632565b60405180910390fd5b612080816129c4565b50565b61208b612357565b80600f8190555050565b601160009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061210357506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121335750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121ad57506121ac82612f54565b5b9050919050565b6000816121bf6123d5565b111580156121ce575060005482105b801561220c575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600061221e82611557565b90508073ffffffffffffffffffffffffffffffffffffffff1661223f612fbe565b73ffffffffffffffffffffffffffffffffffffffff16146122a25761226b81612266612fbe565b611f6c565b6122a1576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61235f612fc6565b73ffffffffffffffffffffffffffffffffffffffff1661237d611881565b73ffffffffffffffffffffffffffffffffffffffff16146123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca9061469e565b60405180910390fd5b565b60006001905090565b60006123e9826128f8565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612450576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061245c84612fce565b91509150612472818761246d612fbe565b612ff5565b6124be5761248786612482612fbe565b611f6c565b6124bd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612524576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125318686866001613039565b801561253c57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061260a856125e688888761303f565b7c020000000000000000000000000000000000000000000000000000000017613067565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603612690576000600185019050600060046000838152602001908152602001600020540361268e57600054811461268d578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126f88686866001613092565b505050505050565b6000612710905090565b60006127146123d5565b60005403905090565b6000805490506000820361275d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61276a6000848385613039565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506127e1836127d2600086600061303f565b6127db85613098565b17613067565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461288257808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612847565b50600082036128bd576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506128d36000848385613092565b505050565b6128f383838360405180602001604052806000815250611ba5565b505050565b600080829050806129076123d5565b1161298d5760005481101561298c5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082160361298a575b60008103612980576004600083600190039350838152602001908152602001600020549050612956565b80925050506129bf565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060076000612a97612fbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612b44612fbe565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b899190613408565b60405180910390a35050565b612ba0848484610d7e565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612c0257612bcb848484846130a8565b612c01576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b612c10612700565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115612c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6590614730565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd49061479c565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6060600b8054612dac90613c41565b80601f0160208091040260200160405190810160405280929190818152602001828054612dd890613c41565b8015612e255780601f10612dfa57610100808354040283529160200191612e25565b820191906000526020600020905b815481529060010190602001808311612e0857829003601f168201915b5050505050905090565b606060006001612e3e846131f8565b01905060008167ffffffffffffffff811115612e5d57612e5c6138b6565b5b6040519080825280601f01601f191660200182016040528015612e8f5781602001600182028036833780820191505090505b509050600082602001820190505b600115612ef2578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612ee657612ee5613f6a565b5b04945060008503612e9d575b819350505050919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600033905090565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861305686868461334b565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60006001821460e11b9050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130ce612fbe565b8786866040518563ffffffff1660e01b81526004016130f09493929190614811565b6020604051808303816000875af192505050801561312c57506040513d601f19601f820116820180604052508101906131299190614872565b60015b6131a5573d806000811461315c576040519150601f19603f3d011682016040523d82523d6000602084013e613161565b606091505b50600081510361319d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613256577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161324c5761324b613f6a565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613293576d04ee2d6d415b85acef8100000000838161328957613288613f6a565b5b0492506020810190505b662386f26fc1000083106132c257662386f26fc1000083816132b8576132b7613f6a565b5b0492506010810190505b6305f5e10083106132eb576305f5e10083816132e1576132e0613f6a565b5b0492506008810190505b612710831061331057612710838161330657613305613f6a565b5b0492506004810190505b60648310613333576064838161332957613328613f6a565b5b0492506002810190505b600a8310613342576001810190505b80915050919050565b60009392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61339d81613368565b81146133a857600080fd5b50565b6000813590506133ba81613394565b92915050565b6000602082840312156133d6576133d561335e565b5b60006133e4848285016133ab565b91505092915050565b60008115159050919050565b613402816133ed565b82525050565b600060208201905061341d60008301846133f9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561345d578082015181840152602081019050613442565b60008484015250505050565b6000601f19601f8301169050919050565b600061348582613423565b61348f818561342e565b935061349f81856020860161343f565b6134a881613469565b840191505092915050565b600060208201905081810360008301526134cd818461347a565b905092915050565b6000819050919050565b6134e8816134d5565b81146134f357600080fd5b50565b600081359050613505816134df565b92915050565b6000602082840312156135215761352061335e565b5b600061352f848285016134f6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061356382613538565b9050919050565b61357381613558565b82525050565b600060208201905061358e600083018461356a565b92915050565b61359d81613558565b81146135a857600080fd5b50565b6000813590506135ba81613594565b92915050565b600080604083850312156135d7576135d661335e565b5b60006135e5858286016135ab565b92505060206135f6858286016134f6565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261362557613624613600565b5b8235905067ffffffffffffffff81111561364257613641613605565b5b60208301915083600182028301111561365e5761365d61360a565b5b9250929050565b6000806020838503121561367c5761367b61335e565b5b600083013567ffffffffffffffff81111561369a57613699613363565b5b6136a68582860161360f565b92509250509250929050565b6136bb816134d5565b82525050565b60006020820190506136d660008301846136b2565b92915050565b6000806000606084860312156136f5576136f461335e565b5b6000613703868287016135ab565b9350506020613714868287016135ab565b9250506040613725868287016134f6565b9150509250925092565b600080604083850312156137465761374561335e565b5b6000613754858286016134f6565b9250506020613765858286016134f6565b9150509250929050565b6000604082019050613784600083018561356a565b61379160208301846136b2565b9392505050565b6000602082840312156137ae576137ad61335e565b5b60006137bc848285016135ab565b91505092915050565b6137ce816133ed565b81146137d957600080fd5b50565b6000813590506137eb816137c5565b92915050565b60008060006060848603121561380a5761380961335e565b5b6000613818868287016135ab565b9350506020613829868287016134f6565b925050604061383a868287016137dc565b9150509250925092565b60006020828403121561385a5761385961335e565b5b6000613868848285016137dc565b91505092915050565b600080604083850312156138885761388761335e565b5b6000613896858286016135ab565b92505060206138a7858286016137dc565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138ee82613469565b810181811067ffffffffffffffff8211171561390d5761390c6138b6565b5b80604052505050565b6000613920613354565b905061392c82826138e5565b919050565b600067ffffffffffffffff82111561394c5761394b6138b6565b5b61395582613469565b9050602081019050919050565b82818337600083830152505050565b600061398461397f84613931565b613916565b9050828152602081018484840111156139a05761399f6138b1565b5b6139ab848285613962565b509392505050565b600082601f8301126139c8576139c7613600565b5b81356139d8848260208601613971565b91505092915050565b600080600080608085870312156139fb576139fa61335e565b5b6000613a09878288016135ab565b9450506020613a1a878288016135ab565b9350506040613a2b878288016134f6565b925050606085013567ffffffffffffffff811115613a4c57613a4b613363565b5b613a58878288016139b3565b91505092959194509250565b60006bffffffffffffffffffffffff82169050919050565b613a8581613a64565b8114613a9057600080fd5b50565b600081359050613aa281613a7c565b92915050565b60008060408385031215613abf57613abe61335e565b5b6000613acd858286016135ab565b9250506020613ade85828601613a93565b9150509250929050565b600067ffffffffffffffff821115613b0357613b026138b6565b5b613b0c82613469565b9050602081019050919050565b6000613b2c613b2784613ae8565b613916565b905082815260208101848484011115613b4857613b476138b1565b5b613b53848285613962565b509392505050565b600082601f830112613b7057613b6f613600565b5b8135613b80848260208601613b19565b91505092915050565b600060208284031215613b9f57613b9e61335e565b5b600082013567ffffffffffffffff811115613bbd57613bbc613363565b5b613bc984828501613b5b565b91505092915050565b60008060408385031215613be957613be861335e565b5b6000613bf7858286016135ab565b9250506020613c08858286016135ab565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c5957607f821691505b602082108103613c6c57613c6b613c12565b5b50919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613cdf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ca2565b613ce98683613ca2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613d26613d21613d1c846134d5565b613d01565b6134d5565b9050919050565b6000819050919050565b613d4083613d0b565b613d54613d4c82613d2d565b848454613caf565b825550505050565b600090565b613d69613d5c565b613d74818484613d37565b505050565b5b81811015613d9857613d8d600082613d61565b600181019050613d7a565b5050565b601f821115613ddd57613dae81613c7d565b613db784613c92565b81016020851015613dc6578190505b613dda613dd285613c92565b830182613d79565b50505b505050565b600082821c905092915050565b6000613e0060001984600802613de2565b1980831691505092915050565b6000613e198383613def565b9150826002028217905092915050565b613e338383613c72565b67ffffffffffffffff811115613e4c57613e4b6138b6565b5b613e568254613c41565b613e61828285613d9c565b6000601f831160018114613e905760008415613e7e578287013590505b613e888582613e0d565b865550613ef0565b601f198416613e9e86613c7d565b60005b82811015613ec657848901358255600182019150602085019450602081019050613ea1565b86831015613ee35784890135613edf601f891682613def565b8355505b6001600288020188555050505b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f33826134d5565b9150613f3e836134d5565b9250828202613f4c816134d5565b91508282048414831517613f6357613f62613ef9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fa4826134d5565b9150613faf836134d5565b925082613fbf57613fbe613f6a565b5b828204905092915050565b600081905092915050565b50565b6000613fe5600083613fca565b9150613ff082613fd5565b600082019050919050565b600061400682613fd8565b9150819050919050565b7f596f75277265206e6f742061206d696e74657200000000000000000000000000600082015250565b600061404660138361342e565b915061405182614010565b602082019050919050565b6000602082019050818103600083015261407581614039565b9050919050565b7f4d696e74696e67206973206e6f7420796574206f70656e2e0000000000000000600082015250565b60006140b260188361342e565b91506140bd8261407c565b602082019050919050565b600060208201905081810360008301526140e1816140a5565b9050919050565b7f4e465420616d6f756e7420657863656564730000000000000000000000000000600082015250565b600061411e60128361342e565b9150614129826140e8565b602082019050919050565b6000602082019050818103600083015261414d81614111565b9050919050565b600061415f826134d5565b915061416a836134d5565b925082820190508082111561418257614181613ef9565b5b92915050565b7f45786365656473204d6178696d756d20537570706c7900000000000000000000600082015250565b60006141be60168361342e565b91506141c982614188565b602082019050919050565b600060208201905081810360008301526141ed816141b1565b9050919050565b7f45746865722073656e74206973206e6f7420636f72726563742e000000000000600082015250565b600061422a601a8361342e565b9150614235826141f4565b602082019050919050565b600060208201905081810360008301526142598161421d565b9050919050565b600061426b826134d5565b9150614276836134d5565b925082820390508181111561428e5761428d613ef9565b5b92915050565b7f4e6f742061206d696e7465720000000000000000000000000000000000000000600082015250565b60006142ca600c8361342e565b91506142d582614294565b602082019050919050565b600060208201905081810360008301526142f9816142bd565b9050919050565b7f416c72656164792061206d696e74657200000000000000000000000000000000600082015250565b600061433660108361342e565b915061434182614300565b602082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006143c8602f8361342e565b91506143d38261436c565b604082019050919050565b600060208201905081810360008301526143f7816143bb565b9050919050565b600081905092915050565b600061441482613423565b61441e81856143fe565b935061442e81856020860161343f565b80840191505092915050565b6000815461444781613c41565b61445181866143fe565b9450600182166000811461446c5760018114614481576144b4565b60ff19831686528115158202860193506144b4565b61448a85613c7d565b60005b838110156144ac5781548189015260018201915060208101905061448d565b838801955050505b50505092915050565b60006144c98286614409565b91506144d58285614409565b91506144e1828461443a565b9150819050949350505050565b6144f782613423565b67ffffffffffffffff8111156145105761450f6138b6565b5b61451a8254613c41565b614525828285613d9c565b600060209050601f8311600181146145585760008415614546578287015190505b6145508582613e0d565b8655506145b8565b601f19841661456686613c7d565b60005b8281101561458e57848901518255600182019150602085019450602081019050614569565b868310156145ab57848901516145a7601f891682613def565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061461c60268361342e565b9150614627826145c0565b604082019050919050565b6000602082019050818103600083015261464b8161460f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061468860208361342e565b915061469382614652565b602082019050919050565b600060208201905081810360008301526146b78161467b565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b600061471a602a8361342e565b9150614725826146be565b604082019050919050565b600060208201905081810360008301526147498161470d565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b600061478660198361342e565b915061479182614750565b602082019050919050565b600060208201905081810360008301526147b581614779565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006147e3826147bc565b6147ed81856147c7565b93506147fd81856020860161343f565b61480681613469565b840191505092915050565b6000608082019050614826600083018761356a565b614833602083018661356a565b61484060408301856136b2565b818103606083015261485281846147d8565b905095945050505050565b60008151905061486c81613394565b92915050565b6000602082840312156148885761488761335e565b5b60006148968482850161485d565b9150509291505056fea2646970667358221220cf39f12a3e82c6a8d8ec5bd8dc3034091646b5f672045d5b4ab29310f3de02d564736f6c634300081200330000000000000000000000008b09692beba5c2765e3430f3b85185a497b9d95500000000000000000000000000000000000000000000000000000000000003e8