0x608060405234801561001057600080fd5b5061483b806100206000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063c76ea978116100ad578063e0fdbad71161007c578063e0fdbad71461060d578063ea26da6d1461063d578063f2fde38b1461066d578063fa43aac914610689578063fad4ebd4146106b957610206565b8063c76ea97814610561578063c81d59141461057d578063c94478bd146105ad578063dcd92cf6146105dd57610206565b80639f458d8c116100e95780639f458d8c146104dd578063a5e945ef146104f9578063a5f401f414610529578063b7aa02311461054557610206565b80638da5cb5b1461045557806399cd9780146104735780639a1054f0146104915780639dec448c146104c157610206565b80635aff8ff61161019d578063758072501161016c57806375807250146103b35780637cb64759146103e35780638129fc1c146103ff5780638279c7db1461040957806384058c0a1461042557610206565b80635aff8ff61461032b5780635ca1e1651461035b57806369cecc4114610379578063715018a6146103a957610206565b806316fed3e2116101d957806316fed3e2146102a35780632eb4a7ab146102c157806351208fb3146102df57806351223f681461030f57610206565b806302d06d051461020b57806310a15b701461023b5780631349418e14610257578063150e99f914610273575b600080fd5b610225600480360381019061022091906136cb565b6106d5565b6040516102329190613e54565b60405180910390f35b610255600480360381019061025091906134fc565b610793565b005b610271600480360381019061026c91906134fc565b61086a565b005b61028d600480360381019061028891906134fc565b610941565b60405161029a9190613cba565b60405180910390f35b6102ab610b9c565b6040516102b89190613bc3565b60405180910390f35b6102c9610bc2565b6040516102d69190613cd5565b60405180910390f35b6102f960048036038101906102f49190613561565b610bc8565b6040516103069190613cd5565b60405180910390f35b6103296004803603810190610324919061370c565b610bfb565b005b610345600480360381019061034091906134fc565b610c81565b6040516103529190613cf0565b60405180910390f35b610363610dfd565b6040516103709190613cd5565b60405180910390f35b610393600480360381019061038e91906134fc565b610e07565b6040516103a09190613c9e565b60405180910390f35b6103b1611068565b005b6103cd60048036038101906103c891906134fc565b6110f0565b6040516103da9190613e6f565b60405180910390f35b6103fd60048036038101906103f891906136a2565b61113c565b005b610407611246565b005b610423600480360381019061041e91906134fc565b6113d1565b005b61043f600480360381019061043a9190613735565b611491565b60405161044c9190613cf0565b60405180910390f35b61045d611603565b60405161046a9190613bc3565b60405180910390f35b61047b61162d565b6040516104889190613e6f565b60405180910390f35b6104ab60048036038101906104a69190613561565b611633565b6040516104b89190613cf0565b60405180910390f35b6104db60048036038101906104d69190613604565b61165f565b005b6104f760048036038101906104f291906134fc565b61186e565b005b610513600480360381019061050e919061359d565b61192e565b6040516105209190613cba565b60405180910390f35b610543600480360381019061053e91906134fc565b611954565b005b61055f600480360381019061055a91906134fc565b611a2b565b005b61057b600480360381019061057691906134fc565b611b02565b005b610597600480360381019061059291906134fc565b612183565b6040516105a49190613c7c565b60405180910390f35b6105c760048036038101906105c29190613525565b612250565b6040516105d49190613e6f565b60405180910390f35b6105f760048036038101906105f291906134fc565b61233e565b6040516106049190613cf0565b60405180910390f35b610627600480360381019061062291906134fc565b61246b565b6040516106349190613bc3565b60405180910390f35b610657600480360381019061065291906134fc565b61249e565b6040516106649190613c7c565b60405180910390f35b610687600480360381019061068291906134fc565b61256b565b005b6106a3600480360381019061069e91906134fc565b612663565b6040516106b09190613e32565b60405180910390f35b6106d360048036038101906106ce919061359d565b61276c565b005b60008060005b8351811015610789576001816106f19190613ffe565b84516106fd91906142f3565b6008610709919061425e565b60026107159190614140565b84828151811061074e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b60f81c60ff16610769919061425e565b826107749190613fc6565b915080806107819061446d565b9150506106db565b5080915050919050565b61079b612abd565b73ffffffffffffffffffffffffffffffffffffffff166107b9611603565b73ffffffffffffffffffffffffffffffffffffffff161461080f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080690613d92565b60405180910390fd5b6001606660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610872612abd565b73ffffffffffffffffffffffffffffffffffffffff16610890611603565b73ffffffffffffffffffffffffffffffffffffffff16146108e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dd90613d92565b60405180910390fd5b6000606660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610a0957508173ffffffffffffffffffffffffffffffffffffffff16606860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f90613dd2565b60405180910390fd5b60405180602001604052806000815250606b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001019080519060200190610aad92919061318d565b506000606b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550606860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560007fb25158797161eb021872626461b3a9c236b2f523b18336fd8d2519a1c346fc2a8333604051610b8b929190613bde565b60405180910390a260019050919050565b606d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606a5481565b60008282604051602001610bdd929190613b54565b60405160208183030381529060405280519060200120905092915050565b610c03612abd565b73ffffffffffffffffffffffffffffffffffffffff16610c21611603565b73ffffffffffffffffffffffffffffffffffffffff1614610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e90613d92565b60405180910390fd5b80606e8190555050565b60606000602067ffffffffffffffff811115610cc6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610cf85781602001600182028036833780820191505090505b5090506000610d0684612ac5565b604051602001610d169190613bac565b60405160208183030381529060405280519060200120905060005b6020811015610df257818160208110610d73577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b838281518110610db0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080610dea9061446d565b915050610d31565b508192505050919050565b6000606a54905090565b610e0f613213565b6000606b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050604051806102000160405280610e75610e70846000611491565b6106d5565b61ffff1661ffff168152602001610e95610e90846001611491565b6106d5565b61ffff1661ffff168152602001610eb5610eb0846002611491565b6106d5565b61ffff1661ffff168152602001610ed5610ed0846003611491565b6106d5565b61ffff1661ffff168152602001610ef5610ef0846004611491565b6106d5565b61ffff1661ffff168152602001610f15610f10846005611491565b6106d5565b61ffff1661ffff168152602001610f35610f30846006611491565b6106d5565b61ffff1661ffff168152602001610f55610f50846007611491565b6106d5565b61ffff1661ffff168152602001610f75610f70846008611491565b6106d5565b61ffff1661ffff168152602001610f95610f90846009611491565b6106d5565b61ffff1661ffff168152602001610fb5610fb084600a611491565b6106d5565b61ffff1661ffff168152602001610fd5610fd084600b611491565b6106d5565b61ffff1661ffff168152602001610ff5610ff084600c611491565b6106d5565b61ffff1661ffff16815260200161101561101084600d611491565b6106d5565b61ffff1661ffff16815260200161103561103084600e611491565b6106d5565b61ffff1661ffff16815260200161105561105084600f611491565b6106d5565b61ffff1661ffff16815250915050919050565b611070612abd565b73ffffffffffffffffffffffffffffffffffffffff1661108e611603565b73ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613d92565b60405180910390fd5b6110ee6000612cfa565b565b6000606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b611144611603565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111c65750606660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc90613d52565b60405180910390fd5b80606a819055507f1b930366dfeaa7eb3b325021e4ae81e36527063452ee55b86c95f85b36f4c31c8160405161123b9190613cd5565b60405180910390a150565b600060019054906101000a900460ff168061126c575060008054906101000a900460ff16155b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613d72565b60405180910390fd5b60008060019054906101000a900460ff1615905080156112fb576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611303612dc0565b73f8400d6b9770797c4ca68b098d98f9b67ac1f016606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c36f3435fe583e9489e28ae54e77e44e94d193b1606d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156113ce5760008060016101000a81548160ff0219169083151502179055505b50565b6113d9612abd565b73ffffffffffffffffffffffffffffffffffffffff166113f7611603565b73ffffffffffffffffffffffffffffffffffffffff161461144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144490613d92565b60405180910390fd5b80606d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008360001b90506000600267ffffffffffffffff8111156114de577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115105781602001600182028036833780820191505090505b509050600060028561152291906142b8565b60ff16905060005b60028110156115f6578381836115409190613ffe565b60208110611577577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8382815181106115b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806115ee9061446d565b91505061152a565b5081935050505092915050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606e5481565b60608282604051602001611648929190613b54565b604051602081830303815290604052905092915050565b611667611603565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806116e95750606660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f90613d52565b60405180910390fd5b6000848490509050828290508114611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c90613db2565b60405180910390fd5b60005b81811015611866578383828181106117b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135606b60008888858181106117fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061181291906134fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550808061185e9061446d565b915050611778565b505050505050565b611876612abd565b73ffffffffffffffffffffffffffffffffffffffff16611894611603565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613d92565b60405180910390fd5b80606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008061193b8585610bc8565b905061194a83606a5483612ea9565b9150509392505050565b61195c612abd565b73ffffffffffffffffffffffffffffffffffffffff1661197a611603565b73ffffffffffffffffffffffffffffffffffffffff16146119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c790613d92565b60405180910390fd5b6001606560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611a33612abd565b73ffffffffffffffffffffffffffffffffffffffff16611a51611603565b73ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90613d92565b60405180910390fd5b6000606560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990613df2565b60405180910390fd5b6000339050600073ffffffffffffffffffffffffffffffffffffffff16606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c90613e12565b60405180910390fd5b6000606b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054611c949061440a565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc09061440a565b8015611d0d5780601f10611ce257610100808354040283529160200191611d0d565b820191906000526020600020905b815481529060010190602001808311611cf057829003601f168201915b505050505090506000606b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541415611f8357611d6883610c81565b905080606b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001019080519060200190611dc0929190613236565b506001606b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555080606b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001019080519060200190611e5f929190613236565b5082606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612141565b80606b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001019080519060200190611fd9929190613236565b506001606b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555082606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60007f4e04c9212cea81103d008cac980cab7e1b92ad06dd860ffc40498e59910bd6b184848460405161217693929190613c07565b60405180910390a2505050565b6060606c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561224457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116121fa575b50505050509050919050565b600080606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122f4576000915050612338565b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612332576001915050612338565b60029150505b92915050565b60606000606b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301541461245a57606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180546123d79061440a565b80601f01602080910402602001604051908101604052809291908181526020018280546124039061440a565b80156124505780601f1061242557610100808354040283529160200191612450565b820191906000526020600020905b81548152906001019060200180831161243357829003601f168201915b5050505050612464565b61246382610c81565b5b9050919050565b60686020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060606960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561255f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612515575b50505050509050919050565b612573612abd565b73ffffffffffffffffffffffffffffffffffffffff16612591611603565b73ffffffffffffffffffffffffffffffffffffffff16146125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125de90613d92565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90613d12565b60405180910390fd5b61266081612cfa565b50565b61266b6132bc565b606b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806080016040529081600082015481526020016001820180546126cf9061440a565b80601f01602080910402602001604051908101604052809291908181526020018280546126fb9061440a565b80156127485780601f1061271d57610100808354040283529160200191612748565b820191906000526020600020905b81548152906001019060200180831161272b57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050919050565b61277783838361192e565b6127b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ad90613d32565b60405180910390fd5b6000606e54111561289857606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33606d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606e546040518463ffffffff1660e01b815260040161284493929190613c45565b602060405180830381600087803b15801561285e57600080fd5b505af1158015612872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128969190613679565b505b6000606b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806080016040529081600082015481526020016001820180546128fe9061440a565b80601f016020809104026020016040519081016040528092919081815260200182805461292a9061440a565b80156129775780601f1061294c57610100808354040283529160200191612977565b820191906000526020600020905b81548152906001019060200180831161295a57829003601f168201915b50505050508152602001600282015481526020016003820154815250509050828160000181815250506000816060015114156129ca576129b684610c81565b816020018190525060018160600181815250505b4281604001818152505080606b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612a3a929190613236565b5060408201518160020155606082015181600301559050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f1143cbabd39e13a46968127f0e8ff21435c439ecf556f6a68967a25b54433b8b85604051612aaf9190613e6f565b60405180910390a350505050565b600033905090565b60606000602867ffffffffffffffff811115612b0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612b3c5781602001600182028036833780820191505090505b50905060005b6014811015612cf0576000816013612b5a91906142f3565b6008612b66919061425e565b6002612b729190614140565b8573ffffffffffffffffffffffffffffffffffffffff16612b93919061408b565b60f81b9050600060108260f81c612baa91906140bc565b60f81b905060008160f81c6010612bc191906142b8565b8360f81c612bcf9190614327565b60f81b9050612bdd82612f85565b85856002612beb919061425e565b81518110612c22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612c5a81612f85565b856001866002612c6a919061425e565b612c749190613ffe565b81518110612cab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505050508080612ce89061446d565b915050612b42565b5080915050919050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff1680612de6575060008054906101000a900460ff16155b612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90613d72565b60405180910390fd5b60008060019054906101000a900460ff161590508015612e75576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612e7d612fcb565b612e856130a4565b8015612ea65760008060016101000a81548160ff0219169083151502179055505b50565b60008082905060005b8551811015612f77576000868281518110612ef6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612f37578281604051602001612f1a929190613b80565b604051602081830303815290604052805190602001209250612f63565b8083604051602001612f4a929190613b80565b6040516020818303038152906040528051906020012092505b508080612f6f9061446d565b915050612eb2565b508381149150509392505050565b6000600a8260f81c60ff161015612fb05760308260f81c612fa69190614054565b60f81b9050612fc6565b60578260f81c612fc09190614054565b60f81b90505b919050565b600060019054906101000a900460ff1680612ff1575060008054906101000a900460ff16155b613030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302790613d72565b60405180910390fd5b60008060019054906101000a900460ff161590508015613080576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156130a15760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806130ca575060008054906101000a900460ff16155b613109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310090613d72565b60405180910390fd5b60008060019054906101000a900460ff161590508015613159576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613169613164612abd565b612cfa565b801561318a5760008060016101000a81548160ff0219169083151502179055505b50565b8280546131999061440a565b90600052602060002090601f0160209004810192826131bb5760008555613202565b82601f106131d457805160ff1916838001178555613202565b82800160010185558215613202579182015b828111156132015782518255916020019190600101906131e6565b5b50905061320f91906132e4565b5090565b604051806102000160405280601090602082028036833780820191505090505090565b8280546132429061440a565b90600052602060002090601f01602090048101928261326457600085556132ab565b82601f1061327d57805160ff19168380011785556132ab565b828001600101855582156132ab579182015b828111156132aa57825182559160200191906001019061328f565b5b5090506132b891906132e4565b5090565b6040518060800160405280600081526020016060815260200160008152602001600081525090565b5b808211156132fd5760008160009055506001016132e5565b5090565b600061331461330f84613eaf565b613e8a565b9050808382526020820190508285602086028201111561333357600080fd5b60005b8581101561336357816133498882613493565b845260208401935060208301925050600181019050613336565b5050509392505050565b600061338061337b84613edb565b613e8a565b90508281526020810184848401111561339857600080fd5b6133a38482856143c8565b509392505050565b6000813590506133ba81614792565b92915050565b60008083601f8401126133d257600080fd5b8235905067ffffffffffffffff8111156133eb57600080fd5b60208301915083602082028301111561340357600080fd5b9250929050565b600082601f83011261341b57600080fd5b813561342b848260208601613301565b91505092915050565b60008083601f84011261344657600080fd5b8235905067ffffffffffffffff81111561345f57600080fd5b60208301915083602082028301111561347757600080fd5b9250929050565b60008151905061348d816147a9565b92915050565b6000813590506134a2816147c0565b92915050565b600082601f8301126134b957600080fd5b81356134c984826020860161336d565b91505092915050565b6000813590506134e1816147d7565b92915050565b6000813590506134f6816147ee565b92915050565b60006020828403121561350e57600080fd5b600061351c848285016133ab565b91505092915050565b6000806040838503121561353857600080fd5b6000613546858286016133ab565b9250506020613557858286016133ab565b9150509250929050565b6000806040838503121561357457600080fd5b6000613582858286016133ab565b9250506020613593858286016134d2565b9150509250929050565b6000806000606084860312156135b257600080fd5b60006135c0868287016133ab565b93505060206135d1868287016134d2565b925050604084013567ffffffffffffffff8111156135ee57600080fd5b6135fa8682870161340a565b9150509250925092565b6000806000806040858703121561361a57600080fd5b600085013567ffffffffffffffff81111561363457600080fd5b613640878288016133c0565b9450945050602085013567ffffffffffffffff81111561365f57600080fd5b61366b87828801613434565b925092505092959194509250565b60006020828403121561368b57600080fd5b60006136998482850161347e565b91505092915050565b6000602082840312156136b457600080fd5b60006136c284828501613493565b91505092915050565b6000602082840312156136dd57600080fd5b600082013567ffffffffffffffff8111156136f757600080fd5b613703848285016134a8565b91505092915050565b60006020828403121561371e57600080fd5b600061372c848285016134d2565b91505092915050565b6000806040838503121561374857600080fd5b6000613756858286016134d2565b9250506020613767858286016134e7565b9150509250929050565b600061377d83836137a1565b60208301905092915050565b60006137958383613b01565b60208301905092915050565b6137aa8161435b565b82525050565b6137b98161435b565b82525050565b6137d06137cb8261435b565b6144b6565b82525050565b60006137e182613f26565b6137eb8185613f6c565b93506137f683613f0c565b8060005b8381101561382757815161380e8882613771565b975061381983613f52565b9250506001810190506137fa565b5085935050505092915050565b61383d81613f31565b6138478184613f7d565b925061385282613f1c565b8060005b8381101561388357815161386a8782613789565b965061387583613f5f565b925050600181019050613856565b505050505050565b6138948161436d565b82525050565b6138a381614379565b82525050565b6138ba6138b582614379565b6144c8565b82525050565b60006138cb82613f3c565b6138d58185613f88565b93506138e58185602086016143d7565b6138ee816145aa565b840191505092915050565b600061390482613f3c565b61390e8185613f99565b935061391e8185602086016143d7565b613927816145aa565b840191505092915050565b600061393d82613f47565b6139478185613fbb565b93506139578185602086016143d7565b80840191505092915050565b6000613970602683613faa565b915061397b826145d5565b604082019050919050565b6000613993601383613faa565b915061399e82614624565b602082019050919050565b60006139b6601683613faa565b91506139c18261464d565b602082019050919050565b60006139d9602e83613faa565b91506139e482614676565b604082019050919050565b60006139fc602083613faa565b9150613a07826146c5565b602082019050919050565b6000613a1f601183613faa565b9150613a2a826146ee565b602082019050919050565b6000613a42601983613faa565b9150613a4d82614717565b602082019050919050565b6000613a65600e83613faa565b9150613a7082614740565b602082019050919050565b6000613a88600983613faa565b9150613a9382614769565b602082019050919050565b6000608083016000830151613ab66000860182613b1f565b5060208301518482036020860152613ace82826138c0565b9150506040830151613ae36040860182613b1f565b506060830151613af66060860182613b1f565b508091505092915050565b613b0a81614383565b82525050565b613b1981614383565b82525050565b613b28816143b1565b82525050565b613b37816143b1565b82525050565b613b4e613b49826143b1565b6144e4565b82525050565b6000613b6082856137bf565b601482019150613b708284613b3d565b6020820191508190509392505050565b6000613b8c82856138a9565b602082019150613b9c82846138a9565b6020820191508190509392505050565b6000613bb88284613932565b915081905092915050565b6000602082019050613bd860008301846137b0565b92915050565b6000604082019050613bf360008301856137b0565b613c0060208301846137b0565b9392505050565b6000606082019050613c1c60008301866137b0565b613c2960208301856137b0565b8181036040830152613c3b81846138f9565b9050949350505050565b6000606082019050613c5a60008301866137b0565b613c6760208301856137b0565b613c746040830184613b2e565b949350505050565b60006020820190508181036000830152613c9681846137d6565b905092915050565b600061020082019050613cb46000830184613834565b92915050565b6000602082019050613ccf600083018461388b565b92915050565b6000602082019050613cea600083018461389a565b92915050565b60006020820190508181036000830152613d0a81846138f9565b905092915050565b60006020820190508181036000830152613d2b81613963565b9050919050565b60006020820190508181036000830152613d4b81613986565b9050919050565b60006020820190508181036000830152613d6b816139a9565b9050919050565b60006020820190508181036000830152613d8b816139cc565b9050919050565b60006020820190508181036000830152613dab816139ef565b9050919050565b60006020820190508181036000830152613dcb81613a12565b9050919050565b60006020820190508181036000830152613deb81613a35565b9050919050565b60006020820190508181036000830152613e0b81613a58565b9050919050565b60006020820190508181036000830152613e2b81613a7b565b9050919050565b60006020820190508181036000830152613e4c8184613a9e565b905092915050565b6000602082019050613e696000830184613b10565b92915050565b6000602082019050613e846000830184613b2e565b92915050565b6000613e94613ea5565b9050613ea0828261443c565b919050565b6000604051905090565b600067ffffffffffffffff821115613eca57613ec961457b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ef657613ef561457b565b5b613eff826145aa565b9050602081019050919050565b6000819050602082019050919050565b6000819050919050565b600081519050919050565b600060109050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fd182614383565b9150613fdc83614383565b92508261ffff03821115613ff357613ff26144ee565b5b828201905092915050565b6000614009826143b1565b9150614014836143b1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614049576140486144ee565b5b828201905092915050565b600061405f826143bb565b915061406a836143bb565b92508260ff038211156140805761407f6144ee565b5b828201905092915050565b6000614096826143b1565b91506140a1836143b1565b9250826140b1576140b061451d565b5b828204905092915050565b60006140c7826143bb565b91506140d2836143bb565b9250826140e2576140e161451d565b5b828204905092915050565b6000808291508390505b600185111561413757808604811115614113576141126144ee565b5b60018516156141225780820291505b8081029050614130856145c8565b94506140f7565b94509492505050565b600061414b826143b1565b9150614156836143b1565b92506141837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461418b565b905092915050565b60008261419b5760019050614257565b816141a95760009050614257565b81600181146141bf57600281146141c9576141f8565b6001915050614257565b60ff8411156141db576141da6144ee565b5b8360020a9150848211156141f2576141f16144ee565b5b50614257565b5060208310610133831016604e8410600b841016171561422d5782820a905083811115614228576142276144ee565b5b614257565b61423a84848460016140ed565b92509050818404811115614251576142506144ee565b5b81810290505b9392505050565b6000614269826143b1565b9150614274836143b1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142ad576142ac6144ee565b5b828202905092915050565b60006142c3826143bb565b91506142ce836143bb565b92508160ff04831182151516156142e8576142e76144ee565b5b828202905092915050565b60006142fe826143b1565b9150614309836143b1565b92508282101561431c5761431b6144ee565b5b828203905092915050565b6000614332826143bb565b915061433d836143bb565b9250828210156143505761434f6144ee565b5b828203905092915050565b600061436682614391565b9050919050565b60008115159050919050565b6000819050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156143f55780820151818401526020810190506143da565b83811115614404576000848401525b50505050565b6000600282049050600182168061442257607f821691505b602082108114156144365761443561454c565b5b50919050565b614445826145aa565b810181811067ffffffffffffffff821117156144645761446361457b565b5b80604052505050565b6000614478826143b1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144ab576144aa6144ee565b5b600182019050919050565b60006144c1826144d2565b9050919050565b6000819050919050565b60006144dd826145bb565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160011c9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d65726b6c6520766572696679206572726f7200000000000000000000000000600082015250565b7f4e6f7420616e20617574686f72697a6564206e6f646500000000000000000000600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6c656e677468206e6f7420657175616c73000000000000000000000000000000600082015250565b7f7573657220756e62696e64206d61696e20616464726573732000000000000000600082015250565b7f61646472657373206572726f7220000000000000000000000000000000000000600082015250565b7f206861732062696e640000000000000000000000000000000000000000000000600082015250565b61479b8161435b565b81146147a657600080fd5b50565b6147b28161436d565b81146147bd57600080fd5b50565b6147c981614379565b81146147d457600080fd5b50565b6147e0816143b1565b81146147eb57600080fd5b50565b6147f7816143bb565b811461480257600080fd5b5056fea26469706673582212203e4cb3db6a012a0683470fb2f02433536012e24318793b7d3b7b2cec5873b20364736f6c63430008040033