6080604052734200000000000000000000000000000000000006600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073420dd381b31aef6683db6b902084cb0ffece40da600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cf77a3ba9a5ca399b7c97c74d54e5b1beb874e43600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e3eeda9eaeb49c9f8435225142f4763ac8edda47600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732e3fe4db7d1041db742785de70e21f224833a063600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073516e8e6b63d38a9d575945c24af321baef9bef4c600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600881526020017f4d6f6f6e42617365000000000000000000000000000000000000000000000000815250600890816200024891906200098e565b506040518060400160405280600481526020017f4d4f4f4e00000000000000000000000000000000000000000000000000000000815250600990816200028f91906200098e565b506b033b2e3c9fd0803ce8000000600a5560646002600a54620002b3919062000aa4565b620002bf919062000b1e565b600b55600a54600d556001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506040518060c00160405280600260ff168152602001600160ff168152602001600260ff168152602001600160ff168152602001600160ff16815260200160076fffffffffffffffffffffffffffffffff16815250601260008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050506040518060c00160405280600260ff168152602001600160ff168152602001600260ff168152602001600160ff168152602001600160ff16815260200160076fffffffffffffffffffffffffffffffff16815250601360008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050506001601460006101000a81548160ff0219169083151502179055506103e86002600a54620005a5919062000aa4565b620005b1919062000b1e565b601555348015620005c157600080fd5b5032600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620006385760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200062f919062000b9b565b60405180910390fd5b62000649816200065060201b60201c565b5062000bb8565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200079657607f821691505b602082108103620007ac57620007ab6200074e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007d7565b620008228683620007d7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200086f6200086962000863846200083a565b62000844565b6200083a565b9050919050565b6000819050919050565b6200088b836200084e565b620008a36200089a8262000876565b848454620007e4565b825550505050565b600090565b620008ba620008ab565b620008c781848462000880565b505050565b5b81811015620008ef57620008e3600082620008b0565b600181019050620008cd565b5050565b601f8211156200093e576200090881620007b2565b6200091384620007c7565b8101602085101562000923578190505b6200093b6200093285620007c7565b830182620008cc565b50505b505050565b600082821c905092915050565b6000620009636000198460080262000943565b1980831691505092915050565b60006200097e838362000950565b9150826002028217905092915050565b620009998262000714565b67ffffffffffffffff811115620009b557620009b46200071f565b5b620009c182546200077d565b620009ce828285620008f3565b600060209050601f83116001811462000a065760008415620009f1578287015190505b620009fd858262000970565b86555062000a6d565b601f19841662000a1686620007b2565b60005b8281101562000a405784890151825560018201915060208501945060208101905062000a19565b8683101562000a60578489015162000a5c601f89168262000950565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ab1826200083a565b915062000abe836200083a565b925082820262000ace816200083a565b9150828204841483151762000ae85762000ae762000a75565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000b2b826200083a565b915062000b38836200083a565b92508262000b4b5762000b4a62000aef565b5b828204905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b838262000b56565b9050919050565b62000b958162000b76565b82525050565b600060208201905062000bb2600083018462000b8a565b92915050565b6140a78062000bc86000396000f3fe6080604052600436106102345760003560e01c8063571ac8b01161012e578063b608129c116100ab578063df20fd491161006f578063df20fd491461086e578063e186ec7414610897578063e1c7392a146108c0578063f2fde38b146108d7578063f84ba65d146109005761023b565b8063b608129c1461079d578063c38a31de146107c8578063d7c01032146107f1578063d85a28281461081a578063dd62ed3e146108315761023b565b80638da5cb5b116100f25780638da5cb5b146106b457806395d89b41146106df5780639f1185361461070a578063a9059cbb14610735578063b0f7ec38146107725761023b565b8063571ac8b0146105cf578063658d4b7f1461060c57806370a0823114610635578063715018a6146106725780637d1db4a5146106895761023b565b80632b14ca56116101bc5780633c7919bd116101805780633c7919bd146104e5578063404e51291461051057806341aea9de1461053957806345ce536514610562578063470624021461059f5761023b565b80632b14ca561461040b5780632d8381191461043b578063313ce567146104785780633582ad23146104a3578063364333f4146104ce5761023b565b806316c021291161020357806316c0212914610310578063178002871461034d57806318160ddd1461037857806323b872dd146103a35780632b112e49146103e05761023b565b80630445b6671461024057806306fdde031461026b578063095ea7b3146102965780630cfc15f9146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610929565b60405161026291906131eb565b60405180910390f35b34801561027757600080fd5b5061028061092f565b60405161028d9190613296565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190613347565b6109c1565b6040516102ca91906133a2565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f591906133bd565b610ab3565b60405161030791906131eb565b60405180910390f35b34801561031c57600080fd5b50610337600480360381019061033291906133bd565b610acb565b60405161034491906133a2565b60405180910390f35b34801561035957600080fd5b50610362610aeb565b60405161036f91906131eb565b60405180910390f35b34801561038457600080fd5b5061038d610af1565b60405161039a91906131eb565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c591906133ea565b610afb565b6040516103d791906133a2565b60405180910390f35b3480156103ec57600080fd5b506103f5610d7c565b60405161040291906131eb565b60405180910390f35b34801561041757600080fd5b50610420610daf565b60405161043296959493929190613484565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d91906134e5565b610e36565b60405161046f91906131eb565b60405180910390f35b34801561048457600080fd5b5061048d610e5a565b60405161049a9190613512565b60405180910390f35b3480156104af57600080fd5b506104b8610e63565b6040516104c591906133a2565b60405180910390f35b3480156104da57600080fd5b506104e3610e76565b005b3480156104f157600080fd5b506104fa610ef7565b604051610507919061358c565b60405180910390f35b34801561051c57600080fd5b50610537600480360381019061053291906135d3565b610f0f565b005b34801561054557600080fd5b50610560600480360381019061055b9190613613565b610f72565b005b34801561056e57600080fd5b50610589600480360381019061058491906134e5565b610f97565b60405161059691906131eb565b60405180910390f35b3480156105ab57600080fd5b506105b4610fbb565b6040516105c696959493929190613484565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f191906133bd565b611042565b60405161060391906133a2565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e91906135d3565b611075565b005b34801561064157600080fd5b5061065c600480360381019061065791906133bd565b6110d8565b60405161066991906131eb565b60405180910390f35b34801561067e57600080fd5b50610687611129565b005b34801561069557600080fd5b5061069e61113d565b6040516106ab91906131eb565b60405180910390f35b3480156106c057600080fd5b506106c9611143565b6040516106d6919061364f565b60405180910390f35b3480156106eb57600080fd5b506106f461116c565b6040516107019190613296565b60405180910390f35b34801561071657600080fd5b5061071f6111fe565b60405161072c91906133a2565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613347565b611211565b60405161076991906133a2565b60405180910390f35b34801561077e57600080fd5b50610787611226565b60405161079491906133a2565b60405180910390f35b3480156107a957600080fd5b506107b2611239565b6040516107bf919061364f565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613696565b61125f565b005b3480156107fd57600080fd5b5061081860048036038101906108139190613775565b6115f7565b005b34801561082657600080fd5b5061082f6116c7565b005b34801561083d57600080fd5b50610858600480360381019061085391906137c8565b6116e5565b60405161086591906131eb565b60405180910390f35b34801561087a57600080fd5b5061089560048036038101906108909190613808565b61176c565b005b3480156108a357600080fd5b506108be60048036038101906108b991906134e5565b611799565b005b3480156108cc57600080fd5b506108d56117c5565b005b3480156108e357600080fd5b506108fe60048036038101906108f991906133bd565b611cf2565b005b34801561090c57600080fd5b50610927600480360381019061092291906135d3565b611d78565b005b60155481565b60606008805461093e90613877565b80601f016020809104026020016040519081016040528092919081815260200182805461096a90613877565b80156109b75780601f1061098c576101008083540402835291602001916109b7565b820191906000526020600020905b81548152906001019060200180831161099a57829003601f168201915b5050505050905090565b600081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610aa191906131eb565b60405180910390a36001905092915050565b600c6020528060005260406000206000915090505481565b60176020528060005260406000206000915054906101000a900460ff1681565b600d5481565b6000600a54905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d685781600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c56906138f4565b60405180910390fd5b81600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ce79190613943565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610d73848484611ddb565b90509392505050565b6000610d8860006110d8565b610d9361dead6110d8565b600a54610da09190613943565b610daa9190613943565b905090565b60138060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a90046fffffffffffffffffffffffffffffffff16905086565b6000600d54600a5483610e499190613977565b610e5391906139e8565b9050919050565b60006012905090565b600f60009054906101000a900460ff1681565b610e7e6122ac565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610ea490613a4a565b60006040518083038185875af1925050503d8060008114610ee1576040519150601f19603f3d011682016040523d82523d6000602084013e610ee6565b606091505b5050905080610ef457600080fd5b50565b73cf77a3ba9a5ca399b7c97c74d54e5b1beb874e4381565b610f176122ac565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610f7a6122ac565b80600f60006101000a81548160ff02191690831515021790555050565b6000600a54600d5483610faa9190613977565b610fb491906139e8565b9050919050565b60128060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a90046fffffffffffffffffffffffffffffffff16905086565b600061106e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6109c1565b9050919050565b61107d6122ac565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611122600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e36565b9050919050565b6111316122ac565b61113b6000612333565b565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606009805461117b90613877565b80601f01602080910402602001604051908101604052809291908181526020018280546111a790613877565b80156111f45780601f106111c9576101008083540402835291602001916111f4565b820191906000526020600020905b8154815290600101906020018083116111d757829003601f168201915b5050505050905090565b600f60019054906101000a900460ff1681565b600061121e338484611ddb565b905092915050565b601460009054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112676122ac565b600086888a8c8e6112789190613a5f565b6112829190613a5f565b61128c9190613a5f565b6112969190613a5f565b60ff1690506000828486888a6112ac9190613a5f565b6112b69190613a5f565b6112c09190613a5f565b6112ca9190613a5f565b60ff169050600a826fffffffffffffffffffffffffffffffff161115611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c90613ae0565b60405180910390fd5b600a816fffffffffffffffffffffffffffffffff16111561137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290613b4c565b60405180910390fd5b6040518060c001604052808d60ff1681526020018d60ff1681526020018d60ff1681526020018d60ff1681526020018960ff168152602001836fffffffffffffffffffffffffffffffff16815250601260008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050506040518060c001604052808860ff1681526020018860ff1681526020018860ff1681526020018860ff1681526020018460ff168152602001826fffffffffffffffffffffffffffffffff16815250601360008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550905050505050505050505050505050565b6115ff6122ac565b82600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6116cf6122ac565b6116e230336116dd306110d8565b611ddb565b50565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117746122ac565b81601460006101000a81548160ff021916908315150217905550806015819055505050565b6117a16122ac565b61271081600a546117b29190613977565b6117bc91906139e8565b600b8190555050565b6117cd6122ac565b60001515600f60019054906101000a900460ff16151514611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90613bb8565b60405180910390fd5b600073420dd381b31aef6683db6b902084cb0ffece40da73ffffffffffffffffffffffffffffffffffffffff166336bf95a030600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518463ffffffff1660e01b815260040161189993929190613bd8565b6020604051808303816000875af11580156118b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dc9190613c24565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600073cf77a3ba9a5ca399b7c97c74d54e5b1beb874e4373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016011600073cf77a3ba9a5ca399b7c97c74d54e5b1beb874e4373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a54600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051611ce791906131eb565b60405180910390a350565b611cfa6122ac565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d6c5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611d63919061364f565b60405180910390fd5b611d7581612333565b50565b611d806122ac565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e815750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb790613c9d565b60405180910390fd5b601660009054906101000a900460ff1615611ee757611ee08484846123f7565b90506122a5565b600f60009054906101000a900460ff168015611f4d5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611fa35750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fee57600b54821115611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe490613d2f565b60405180910390fd5b5b611ff6612614565b15612004576120036126b4565b5b600061200f83610f97565b905080600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90613d9b565b60405180910390fd5b80600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120de9190613943565b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061212d8686612c69565b61213757816121a1565b6121a0600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612196576000612199565b60015b8784612d17565b5b905080600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121ee9190613dbb565b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61228984610e36565b60405161229691906131eb565b60405180910390a36001925050505b9392505050565b6122b461315e565b73ffffffffffffffffffffffffffffffffffffffff166122d2611143565b73ffffffffffffffffffffffffffffffffffffffff1614612331576122f561315e565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612328919061364f565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008061240383610f97565b905080600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90613d9b565b60405180910390fd5b80600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d29190613943565b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125609190613dbb565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161260091906131eb565b60405180910390a360019150509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156126815750601660009054906101000a900460ff16155b80156126995750601460009054906101000a900460ff165b80156126af57506015546126ac306110d8565b10155b905090565b6001601660006101000a81548160ff021916908315150217905550600060136040518060c00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff1660ff1660ff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506000601554905060008260a001516fffffffffffffffffffffffffffffffff16836080015160ff16836127ee9190613977565b6127f891906139e8565b9050600081836128089190613943565b905061282873cf77a3ba9a5ca399b7c97c74d54e5b1beb874e43826109c1565b506128363061dead84611ddb565b506000600167ffffffffffffffff81111561285457612853613def565b5b60405190808252806020026020018201604052801561288d57816020015b61287a613166565b8152602001906001900390816128725790505b50905060405180608001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508160008151811061294e5761294d613e1e565b5b602002602001018190525073cf77a3ba9a5ca399b7c97c74d54e5b1beb874e4373ffffffffffffffffffffffffffffffffffffffff166312bc3aca8360008430600a4261299b9190613dbb565b6040518663ffffffff1660e01b81526004016129bb959493929190613faa565b600060405180830381600087803b1580156129d557600080fd5b505af11580156129e9573d6000803e3d6000fd5b5050505060004790506000866080015160ff16876000015160ff168860a00151612a139190614004565b612a1d9190614004565b6fffffffffffffffffffffffffffffffff169050600081886020015160ff1684612a479190613977565b612a5191906139e8565b9050600082896040015160ff1685612a699190613977565b612a7391906139e8565b90506000838a6060015160ff1686612a8b9190613977565b612a9591906139e8565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612adf90613a4a565b60006040518083038185875af1925050503d8060008114612b1c576040519150601f19603f3d011682016040523d82523d6000602084013e612b21565b606091505b50509050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612b6b90613a4a565b60006040518083038185875af1925050503d8060008114612ba8576040519150601f19603f3d011682016040523d82523d6000602084013e612bad565b606091505b505080915050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612bf990613a4a565b60006040518083038185875af1925050503d8060008114612c36576040519150601f19603f3d011682016040523d82523d6000602084013e612c3b565b606091505b50508091505050505050505050505050506000601660006101000a81548160ff021916908315150217905550565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d0f5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b60008060126040518060c00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff1660ff1660ff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050600060136040518060c00160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff1660ff1660ff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060006001151587151514612f315760648260a001516fffffffffffffffffffffffffffffffff1686612f229190613977565b612f2c91906139e8565b612f60565b60648360a001516fffffffffffffffffffffffffffffffff1686612f559190613977565b612f5f91906139e8565b5b905060006001151588151514612fa9578260a001516fffffffffffffffffffffffffffffffff16836000015160ff1683612f9a9190613977565b612fa491906139e8565b612fde565b8360a001516fffffffffffffffffffffffffffffffff16846000015160ff1683612fd39190613977565b612fdd91906139e8565b5b905080600d54612fee9190613943565b600d81905550600081836130029190613943565b905060008111156131095780600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130589190613dbb565b600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6130f384610e36565b60405161310091906131eb565b60405180910390a35b7fc3b3cc73ac1faef58c428c22be6cb344acfd92a699c8cd758c753af27071b5ac82600d5460405161313c929190614048565b60405180910390a182876131509190613943565b955050505050509392505050565b600033905090565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b6000819050919050565b6131e5816131d2565b82525050565b600060208201905061320060008301846131dc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613240578082015181840152602081019050613225565b60008484015250505050565b6000601f19601f8301169050919050565b600061326882613206565b6132728185613211565b9350613282818560208601613222565b61328b8161324c565b840191505092915050565b600060208201905081810360008301526132b0818461325d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132e8826132bd565b9050919050565b6132f8816132dd565b811461330357600080fd5b50565b600081359050613315816132ef565b92915050565b613324816131d2565b811461332f57600080fd5b50565b6000813590506133418161331b565b92915050565b6000806040838503121561335e5761335d6132b8565b5b600061336c85828601613306565b925050602061337d85828601613332565b9150509250929050565b60008115159050919050565b61339c81613387565b82525050565b60006020820190506133b76000830184613393565b92915050565b6000602082840312156133d3576133d26132b8565b5b60006133e184828501613306565b91505092915050565b600080600060608486031215613403576134026132b8565b5b600061341186828701613306565b935050602061342286828701613306565b925050604061343386828701613332565b9150509250925092565b600060ff82169050919050565b6134538161343d565b82525050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61347e81613459565b82525050565b600060c082019050613499600083018961344a565b6134a6602083018861344a565b6134b3604083018761344a565b6134c0606083018661344a565b6134cd608083018561344a565b6134da60a0830184613475565b979650505050505050565b6000602082840312156134fb576134fa6132b8565b5b600061350984828501613332565b91505092915050565b6000602082019050613527600083018461344a565b92915050565b6000819050919050565b600061355261354d613548846132bd565b61352d565b6132bd565b9050919050565b600061356482613537565b9050919050565b600061357682613559565b9050919050565b6135868161356b565b82525050565b60006020820190506135a1600083018461357d565b92915050565b6135b081613387565b81146135bb57600080fd5b50565b6000813590506135cd816135a7565b92915050565b600080604083850312156135ea576135e96132b8565b5b60006135f885828601613306565b9250506020613609858286016135be565b9150509250929050565b600060208284031215613629576136286132b8565b5b6000613637848285016135be565b91505092915050565b613649816132dd565b82525050565b60006020820190506136646000830184613640565b92915050565b6136738161343d565b811461367e57600080fd5b50565b6000813590506136908161366a565b92915050565b6000806000806000806000806000806101408b8d0312156136ba576136b96132b8565b5b60006136c88d828e01613681565b9a505060206136d98d828e01613681565b99505060406136ea8d828e01613681565b98505060606136fb8d828e01613681565b975050608061370c8d828e01613681565b96505060a061371d8d828e01613681565b95505060c061372e8d828e01613681565b94505060e061373f8d828e01613681565b9350506101006137518d828e01613681565b9250506101206137638d828e01613681565b9150509295989b9194979a5092959850565b60008060006060848603121561378e5761378d6132b8565b5b600061379c86828701613306565b93505060206137ad86828701613306565b92505060406137be86828701613306565b9150509250925092565b600080604083850312156137df576137de6132b8565b5b60006137ed85828601613306565b92505060206137fe85828601613306565b9150509250929050565b6000806040838503121561381f5761381e6132b8565b5b600061382d858286016135be565b925050602061383e85828601613332565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061388f57607f821691505b6020821081036138a2576138a1613848565b5b50919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006138de601d83613211565b91506138e9826138a8565b602082019050919050565b6000602082019050818103600083015261390d816138d1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061394e826131d2565b9150613959836131d2565b925082820390508181111561397157613970613914565b5b92915050565b6000613982826131d2565b915061398d836131d2565b925082820261399b816131d2565b915082820484148315176139b2576139b1613914565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139f3826131d2565b91506139fe836131d2565b925082613a0e57613a0d6139b9565b5b828204905092915050565b600081905092915050565b50565b6000613a34600083613a19565b9150613a3f82613a24565b600082019050919050565b6000613a5582613a27565b9150819050919050565b6000613a6a8261343d565b9150613a758361343d565b9250828201905060ff811115613a8e57613a8d613914565b5b92915050565b7f427579206665657320746f6f2068696768000000000000000000000000000000600082015250565b6000613aca601183613211565b9150613ad582613a94565b602082019050919050565b60006020820190508181036000830152613af981613abd565b9050919050565b7f53656c6c206665657320746f6f20686967680000000000000000000000000000600082015250565b6000613b36601283613211565b9150613b4182613b00565b602082019050919050565b60006020820190508181036000830152613b6581613b29565b9050919050565b7f416c726561647920696e69746961746564000000000000000000000000000000600082015250565b6000613ba2601183613211565b9150613bad82613b6c565b602082019050919050565b60006020820190508181036000830152613bd181613b95565b9050919050565b6000606082019050613bed6000830186613640565b613bfa6020830185613640565b613c076040830184613393565b949350505050565b600081519050613c1e816132ef565b92915050565b600060208284031215613c3a57613c396132b8565b5b6000613c4884828501613c0f565b91505092915050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000613c87600b83613211565b9150613c9282613c51565b602082019050919050565b60006020820190508181036000830152613cb681613c7a565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613d19602883613211565b9150613d2482613cbd565b604082019050919050565b60006020820190508181036000830152613d4881613d0c565b9050919050565b7f496e73756666696369656e742042616c616e6365000000000000000000000000600082015250565b6000613d85601483613211565b9150613d9082613d4f565b602082019050919050565b60006020820190508181036000830152613db481613d78565b9050919050565b6000613dc6826131d2565b9150613dd1836131d2565b9250828201905080821115613de957613de8613914565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613e72613e6d613e6884613e4d565b61352d565b6131d2565b9050919050565b613e8281613e57565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ebd816132dd565b82525050565b613ecc81613387565b82525050565b608082016000820151613ee86000850182613eb4565b506020820151613efb6020850182613eb4565b506040820151613f0e6040850182613ec3565b506060820151613f216060850182613eb4565b50505050565b6000613f338383613ed2565b60808301905092915050565b6000602082019050919050565b6000613f5782613e88565b613f618185613e93565b9350613f6c83613ea4565b8060005b83811015613f9d578151613f848882613f27565b9750613f8f83613f3f565b925050600181019050613f70565b5085935050505092915050565b600060a082019050613fbf60008301886131dc565b613fcc6020830187613e79565b8181036040830152613fde8186613f4c565b9050613fed6060830185613640565b613ffa60808301846131dc565b9695505050505050565b600061400f82613459565b915061401a83613459565b925082820390506fffffffffffffffffffffffffffffffff81111561404257614041613914565b5b92915050565b600060408201905061405d60008301856131dc565b61406a60208301846131dc565b939250505056fea2646970667358221220ab7077b65887bb754ff1573b12aa23b47b9ac91cc4192ba794af96b15691775e64736f6c63430008170033