608060405273b31f66aa3c1e785363f0875a1b74e27b85fd66c7600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731ed6711152f265b3c7787ed41430285a34fd6091600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506008600a620000be919062000955565b6301406f40620000cf9190620009a6565b6005556000600f55600060105560006011556000601255601254601154601054600f54620000fe9190620009f1565b6200010a9190620009f1565b620001169190620009f1565b6013556000601455600060155560006016556000601755601754601654601554601454620001459190620009f1565b620001519190620009f1565b6200015d9190620009f1565b60185560648060055462000172919062000a5b565b6200017e9190620009a6565b60195560648060055462000193919062000a5b565b6200019f9190620009a6565b601a55606480600554620001b4919062000a5b565b620001c09190620009a6565b601b55731ed6711152f265b3c7787ed41430285a34fd6091601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731ed6711152f265b3c7787ed41430285a34fd6091601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731ed6711152f265b3c7787ed41430285a34fd6091601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731ed6711152f265b3c7787ed41430285a34fd6091601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602160146101000a81548160ff0219169083151502179055506103e88060055462000345919062000a5b565b620003519190620009a6565b60225560648060055462000366919062000a5b565b620003729190620009a6565b6023553480156200038257600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507360ae616a2155ee3d9a68541ba4544862310933d4602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000488573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ae919062000afd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200050c92919062000b40565b6020604051808303816000875af11580156200052c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000552919062000afd565b602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600554600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600554604051620007ad919062000b7e565b60405180910390a362000b9b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200084957808604811115620008215762000820620007bb565b5b6001851615620008315780820291505b80810290506200084185620007ea565b945062000801565b94509492505050565b60008262000864576001905062000937565b8162000874576000905062000937565b81600181146200088d57600281146200089857620008ce565b600191505062000937565b60ff841115620008ad57620008ac620007bb565b5b8360020a915084821115620008c757620008c6620007bb565b5b5062000937565b5060208310610133831016604e8410600b8410161715620009085782820a905083811115620009025762000901620007bb565b5b62000937565b620009178484846001620007f7565b92509050818404811115620009315762000930620007bb565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000962826200093e565b91506200096f8362000948565b92506200099e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000852565b905092915050565b6000620009b3826200093e565b9150620009c0836200093e565b9250828202620009d0816200093e565b91508282048414831517620009ea57620009e9620007bb565b5b5092915050565b6000620009fe826200093e565b915062000a0b836200093e565b925082820190508082111562000a265762000a25620007bb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a68826200093e565b915062000a75836200093e565b92508262000a885762000a8762000a2c565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ac58262000a98565b9050919050565b62000ad78162000ab8565b811462000ae357600080fd5b50565b60008151905062000af78162000acc565b92915050565b60006020828403121562000b165762000b1562000a93565b5b600062000b268482850162000ae6565b91505092915050565b62000b3a8162000ab8565b82525050565b600060408201905062000b57600083018562000b2f565b62000b66602083018462000b2f565b9392505050565b62000b78816200093e565b82525050565b600060208201905062000b95600083018462000b6d565b92915050565b6140468062000bab6000396000f3fe6080604052600436106103b15760003560e01c80636d137186116101e7578063a4e130711161010d578063d2943933116100a0578063f2fde38b1161006f578063f2fde38b14610e1b578063f7baf3c514610e44578063f84ba65d14610e5b578063f887ea4014610e84576103b8565b8063d294393314610d5d578063dab84ee714610d88578063dd62ed3e14610db3578063e96fada214610df0576103b8565b8063bb87a215116100dc578063bb87a21514610cb3578063ca33e64c14610cde578063cf4be39414610d09578063d088935814610d34576103b8565b8063a4e1307114610bf7578063a8aa1b3114610c20578063a9059cbb14610c4b578063b43b783514610c88576103b8565b806384b1d1ef116101855780639354c342116101545780639354c34214610b4d57806395d89b4114610b7857806396c99f5b14610ba357806398118cb414610bcc576103b8565b806384b1d1ef14610a8f578063893d20e814610aba5780638b42507f14610ae55780638fabfda914610b22576103b8565b80636fc61774116101c15780636fc61774146109d157806370a08231146109fc57806378109e5414610a3957806383b4ac6814610a64576103b8565b80636d137186146109505780636d351d1a1461097b5780636ddd1713146109a6576103b8565b806333477327116102d7578063541b4de71161026a578063658d4b7f11610239578063658d4b7f146108a85780636827e764146108d15780636b67c4df146108fc5780636c5b285514610927576103b8565b8063541b4de7146107ea578063571ac8b01461081557806359692e0414610852578063602bc62b1461087d576103b8565b80633d956691116102a65780633d9566911461072c5780633f4218e0146107575780634923edc2146107945780634f28cac2146107bf576103b8565b8063334773271461067057806333f3d6281461069b5780633b2d081c146106d85780633c8e556d14610703576103b8565b806318160ddd1161034f57806321e707eb1161031e57806321e707eb146105a057806323b872dd146105cb5780632f54bf6e14610608578063313ce56714610645576103b8565b806318160ddd146104f65780631898cab2146105215780631da1db5e1461054c5780631df4ccfc14610575576103b8565b8063095ea7b31161038b578063095ea7b31461043c578063126cc6d514610479578063154d4abb146104a4578063178d9b8e146104cd576103b8565b80630445b667146103bd57806306fdde03146103e857806309302dc614610413576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610eaf565b6040516103df91906132f6565b60405180910390f35b3480156103f457600080fd5b506103fd610eb5565b60405161040a91906133a1565b60405180910390f35b34801561041f57600080fd5b5061043a600480360381019061043591906133f4565b610ef2565b005b34801561044857600080fd5b50610463600480360381019061045e919061347f565b610f5e565b60405161047091906134da565b60405180910390f35b34801561048557600080fd5b5061048e611050565b60405161049b91906132f6565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c691906133f4565b611056565b005b3480156104d957600080fd5b506104f460048036038101906104ef91906134f5565b6110c2565b005b34801561050257600080fd5b5061050b611154565b60405161051891906132f6565b60405180910390f35b34801561052d57600080fd5b5061053661115e565b60405161054391906132f6565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e91906133f4565b611168565b005b34801561058157600080fd5b5061058a611217565b60405161059791906132f6565b60405180910390f35b3480156105ac57600080fd5b506105b561121d565b6040516105c291906132f6565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed919061355c565b611223565b6040516105ff91906134da565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a91906135af565b6113e5565b60405161063c91906134da565b60405180910390f35b34801561065157600080fd5b5061065a61143e565b60405161066791906135f8565b60405180910390f35b34801561067c57600080fd5b50610685611447565b60405161069291906132f6565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd919061347f565b61144d565b6040516106cf91906134da565b60405180910390f35b3480156106e457600080fd5b506106ed61151d565b6040516106fa91906132f6565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190613613565b611523565b005b34801561073857600080fd5b50610741611675565b60405161074e91906132f6565b60405180910390f35b34801561076357600080fd5b5061077e600480360381019061077991906135af565b61167b565b60405161078b91906134da565b60405180910390f35b3480156107a057600080fd5b506107a961169b565b6040516107b691906132f6565b60405180910390f35b3480156107cb57600080fd5b506107d46116a1565b6040516107e191906132f6565b60405180910390f35b3480156107f657600080fd5b506107ff6116a7565b60405161080c91906132f6565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906135af565b6116b1565b60405161084991906134da565b60405180910390f35b34801561085e57600080fd5b506108676116e4565b60405161087491906132f6565b60405180910390f35b34801561088957600080fd5b506108926116ea565b60405161089f91906132f6565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca91906136a6565b6116f4565b005b3480156108dd57600080fd5b506108e6611797565b6040516108f391906132f6565b60405180910390f35b34801561090857600080fd5b5061091161179d565b60405161091e91906132f6565b60405180910390f35b34801561093357600080fd5b5061094e600480360381019061094991906134f5565b6117a3565b005b34801561095c57600080fd5b50610965611835565b60405161097291906132f6565b60405180910390f35b34801561098757600080fd5b5061099061183b565b60405161099d91906132f6565b60405180910390f35b3480156109b257600080fd5b506109bb611845565b6040516109c891906134da565b60405180910390f35b3480156109dd57600080fd5b506109e6611858565b6040516109f391906132f6565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e91906135af565b61185e565b604051610a3091906132f6565b60405180910390f35b348015610a4557600080fd5b50610a4e6118a7565b604051610a5b91906132f6565b60405180910390f35b348015610a7057600080fd5b50610a796118ad565b604051610a8691906134da565b60405180910390f35b348015610a9b57600080fd5b50610aa46118c5565b604051610ab191906136f5565b60405180910390f35b348015610ac657600080fd5b50610acf6118eb565b604051610adc91906136f5565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b0791906135af565b611914565b604051610b1991906134da565b60405180910390f35b348015610b2e57600080fd5b50610b37611934565b604051610b4491906132f6565b60405180910390f35b348015610b5957600080fd5b50610b6261193a565b604051610b6f91906132f6565b60405180910390f35b348015610b8457600080fd5b50610b8d611940565b604051610b9a91906133a1565b60405180910390f35b348015610baf57600080fd5b50610bca6004803603810190610bc591906133f4565b61197d565b005b348015610bd857600080fd5b50610be16119e9565b604051610bee91906132f6565b60405180910390f35b348015610c0357600080fd5b50610c1e6004803603810190610c1991906133f4565b6119ef565b005b348015610c2c57600080fd5b50610c35611b69565b604051610c4291906136f5565b60405180910390f35b348015610c5757600080fd5b50610c726004803603810190610c6d919061347f565b611b8f565b604051610c7f91906134da565b60405180910390f35b348015610c9457600080fd5b50610c9d611ba4565b604051610caa91906132f6565b60405180910390f35b348015610cbf57600080fd5b50610cc8611bae565b604051610cd591906132f6565b60405180910390f35b348015610cea57600080fd5b50610cf3611bb4565b604051610d0091906136f5565b60405180910390f35b348015610d1557600080fd5b50610d1e611bda565b604051610d2b91906132f6565b60405180910390f35b348015610d4057600080fd5b50610d5b6004803603810190610d569190613710565b611be0565b005b348015610d6957600080fd5b50610d72611c89565b604051610d7f91906132f6565b60405180910390f35b348015610d9457600080fd5b50610d9d611c8f565b604051610daa91906136f5565b60405180910390f35b348015610dbf57600080fd5b50610dda6004803603810190610dd59190613763565b611cb5565b604051610de791906132f6565b60405180910390f35b348015610dfc57600080fd5b50610e05611d3c565b604051610e1291906136f5565b60405180910390f35b348015610e2757600080fd5b50610e426004803603810190610e3d91906135af565b611d62565b005b348015610e5057600080fd5b50610e59611ed6565b005b348015610e6757600080fd5b50610e826004803603810190610e7d91906136a6565b6120aa565b005b348015610e9057600080fd5b50610e9961214d565b604051610ea69190613802565b60405180910390f35b60225481565b60606040518060400160405280600581526020017f434f4d4554000000000000000000000000000000000000000000000000000000815250905090565b610efb336113e5565b610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613869565b60405180910390fd5b806103e8600554610f4b91906138e7565b610f559190613918565b601b8190555050565b600081600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161103e91906132f6565b60405180910390a36001905092915050565b60135481565b61105f336113e5565b61109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590613869565b60405180910390fd5b806103e86005546110af91906138e7565b6110b99190613918565b60198190555050565b6110cb336113e5565b61110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190613869565b60405180910390fd5b83600f8190555082601281905550816011819055508060108190555080828486611134919061395a565b61113e919061395a565b611148919061395a565b60138190555050505050565b6000600554905090565b6000601954905090565b611171336113e5565b6111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a790613869565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc606484846111dd9190613918565b6111e791906138e7565b9081150290604051600060405180830381858888f19350505050158015611212573d6000803e3d6000fd5b505050565b600e5481565b60155481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113d15781600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611350919061398e565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6113dc848484612173565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006008905090565b60195481565b6000611458336113e5565b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90613869565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016114d29291906139c2565b6020604051808303816000875af11580156114f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115159190613a00565b905092915050565b600d5481565b61152c336113e5565b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613869565b60405180910390fd5b83601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60245481565b60086020528060005260406000206000915054906101000a900460ff1681565b60175481565b60235481565b6000601a54905090565b60006116dd827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610f5e565b9050919050565b60125481565b6000600254905090565b6116fd336113e5565b61173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390613869565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b5481565b600c5481565b6117ac336113e5565b6117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290613869565b60405180910390fd5b8360148190555082601781905550816016819055508060158190555080828486611815919061395a565b61181f919061395a565b611829919061395a565b60188190555050505050565b60165481565b6000602254905090565b602160149054906101000a900460ff1681565b600f5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601b5481565b6000602560009054906101000a900460ff1615905090565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60096020528060005260406000206000915054906101000a900460ff1681565b60115481565b60105481565b60606040518060400160405280600581526020017f434f4d4554000000000000000000000000000000000000000000000000000000815250905090565b611986336113e5565b6119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc90613869565b60405180910390fd5b806103e86005546119d691906138e7565b6119e09190613918565b601a8190555050565b600a5481565b6119f8336113e5565b611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90613869565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042611ae5919061395a565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611b9c338484612173565b905092915050565b6000601b54905090565b60185481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611be9336113e5565b611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90613869565b60405180910390fd5b82602160146101000a81548160ff02191690831515021790555081612710600554611c5391906138e7565b611c5d9190613918565b60228190555080612710600554611c7491906138e7565b611c7e9190613918565b602381905550505050565b60145481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d6b336113e5565b611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190613869565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090613a9f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5d90613b31565b60405180910390fd5b6002544211611faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa190613b9d565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6120b3336113e5565b6120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613869565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000602560009054906101000a900460ff161561219c576121958484846127f0565b90506127e9565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036121fa576121f961297e565b5b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612258576122576129ad565b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156122e057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561233a5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123945750602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b806123e85750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561244c5760006123f88461185e565b9050601b548382612409919061395a565b111561244a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244190613c2f565b60405180910390fd5b505b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361253b57601954821115806124fb5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61253a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253190613c9b565b60405180910390fd5b5b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361262a57601a54821115806125ea5750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262090613c9b565b60405180910390fd5b5b6126326129dc565b156126405761263f612ab3565b5b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461268b919061398e565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006126d985613049565b6126e357826126ee565b6126ed84846130a0565b5b905080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273b919061395a565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127db91906132f6565b60405180910390a360019150505b9392505050565b600081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461283d919061398e565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cb919061395a565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161296b91906132f6565b60405180910390a3600190509392505050565b600f54600a81905550601054600b81905550601154600c81905550601254600d81905550601354600e81905550565b601454600a81905550601554600b81905550601654600c81905550601754600d81905550601854600e81905550565b6000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612a495750602560009054906101000a900460ff16155b8015612a615750602160149054906101000a900460ff165b8015612aae5750602254600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602560006101000a81548160ff0219169083151502179055506000612ad93061185e565b90506023548110612af257602354602481905550612afa565b806024819055505b60006002600a54600e54602454612b1191906138e7565b612b1b9190613918565b612b2591906138e7565b9050600081602454612b37919061398e565b90506000600267ffffffffffffffff811115612b5657612b55613cbb565b5b604051908082528060200260200182016040528015612b845781602001602082028036833780820191505090505b5090503081600081518110612b9c57612b9b613cea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612c0d57612c0c613cea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b43d9bbb8460008530426040518663ffffffff1660e01b8152600401612cb0959493929190613e12565b600060405180830381600087803b158015612cca57600080fd5b505af1158015612cde573d6000803e3d6000fd5b5050505060008147612cf0919061398e565b905060006002600a54612d0391906138e7565b600e54612d10919061398e565b90506000600282600a5485612d259190613918565b612d2f91906138e7565b612d3991906138e7565b9050600082600d5485612d4c9190613918565b612d5691906138e7565b9050600083600c5486612d699190613918565b612d7391906138e7565b9050600081838588612d85919061398e565b612d8f919061398e565b612d99919061398e565b90506000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051612de790613e9d565b600060405180830381858888f193505050503d8060008114612e25576040519150601f19603f3d011682016040523d82523d6000602084013e612e2a565b606091505b5050905080612e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6590613efe565b60405180910390fd5b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168561753090604051612eba90613e9d565b600060405180830381858888f193505050503d8060008114612ef8576040519150601f19603f3d011682016040523d82523d6000602084013e612efd565b606091505b5050905080612f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3890613efe565b60405180910390fd5b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168461753090604051612f8d90613e9d565b600060405180830381858888f193505050503d8060008114612fcb576040519150601f19603f3d011682016040523d82523d6000602084013e612fd0565b606091505b5050905080613014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300b90613efe565b60405180910390fd5b61301e8d886131c7565b50505050505050505050505050506000602560006101000a81548160ff021916908315150217905550565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080600e546064846130b391906138e7565b6130bd9190613918565b905080600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a919061395a565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131aa91906132f6565b60405180910390a380836131be919061398e565b91505092915050565b60008211156132d957602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6529ab4823085600080601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161325996959493929190613f1e565b60606040518083038185885af1158015613277573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061329c9190613f94565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450681836040516132d0929190613fe7565b60405180910390a15b5050565b6000819050919050565b6132f0816132dd565b82525050565b600060208201905061330b60008301846132e7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561334b578082015181840152602081019050613330565b60008484015250505050565b6000601f19601f8301169050919050565b600061337382613311565b61337d818561331c565b935061338d81856020860161332d565b61339681613357565b840191505092915050565b600060208201905081810360008301526133bb8184613368565b905092915050565b600080fd5b6133d1816132dd565b81146133dc57600080fd5b50565b6000813590506133ee816133c8565b92915050565b60006020828403121561340a576134096133c3565b5b6000613418848285016133df565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061344c82613421565b9050919050565b61345c81613441565b811461346757600080fd5b50565b60008135905061347981613453565b92915050565b60008060408385031215613496576134956133c3565b5b60006134a48582860161346a565b92505060206134b5858286016133df565b9150509250929050565b60008115159050919050565b6134d4816134bf565b82525050565b60006020820190506134ef60008301846134cb565b92915050565b6000806000806080858703121561350f5761350e6133c3565b5b600061351d878288016133df565b945050602061352e878288016133df565b935050604061353f878288016133df565b9250506060613550878288016133df565b91505092959194509250565b600080600060608486031215613575576135746133c3565b5b60006135838682870161346a565b93505060206135948682870161346a565b92505060406135a5868287016133df565b9150509250925092565b6000602082840312156135c5576135c46133c3565b5b60006135d38482850161346a565b91505092915050565b600060ff82169050919050565b6135f2816135dc565b82525050565b600060208201905061360d60008301846135e9565b92915050565b6000806000806080858703121561362d5761362c6133c3565b5b600061363b8782880161346a565b945050602061364c8782880161346a565b935050604061365d8782880161346a565b925050606061366e8782880161346a565b91505092959194509250565b613683816134bf565b811461368e57600080fd5b50565b6000813590506136a08161367a565b92915050565b600080604083850312156136bd576136bc6133c3565b5b60006136cb8582860161346a565b92505060206136dc85828601613691565b9150509250929050565b6136ef81613441565b82525050565b600060208201905061370a60008301846136e6565b92915050565b600080600060608486031215613729576137286133c3565b5b600061373786828701613691565b9350506020613748868287016133df565b9250506040613759868287016133df565b9150509250925092565b6000806040838503121561377a576137796133c3565b5b60006137888582860161346a565b92505060206137998582860161346a565b9150509250929050565b6000819050919050565b60006137c86137c36137be84613421565b6137a3565b613421565b9050919050565b60006137da826137ad565b9050919050565b60006137ec826137cf565b9050919050565b6137fc816137e1565b82525050565b600060208201905061381760008301846137f3565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b600061385360068361331c565b915061385e8261381d565b602082019050919050565b6000602082019050818103600083015261388281613846565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138f2826132dd565b91506138fd836132dd565b92508261390d5761390c613889565b5b828204905092915050565b6000613923826132dd565b915061392e836132dd565b925082820261393c816132dd565b91508282048414831517613953576139526138b8565b5b5092915050565b6000613965826132dd565b9150613970836132dd565b9250828201905080821115613988576139876138b8565b5b92915050565b6000613999826132dd565b91506139a4836132dd565b92508282039050818111156139bc576139bb6138b8565b5b92915050565b60006040820190506139d760008301856136e6565b6139e460208301846132e7565b9392505050565b6000815190506139fa8161367a565b92915050565b600060208284031215613a1657613a156133c3565b5b6000613a24848285016139eb565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a8960268361331c565b9150613a9482613a2d565b604082019050919050565b60006020820190508181036000830152613ab881613a7c565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000613b1b60238361331c565b9150613b2682613abf565b604082019050919050565b60006020820190508181036000830152613b4a81613b0e565b9050919050565b7f436f6e7472616374206973206c6f636b65640000000000000000000000000000600082015250565b6000613b8760128361331c565b9150613b9282613b51565b602082019050919050565b60006020820190508181036000830152613bb681613b7a565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000613c19603e8361331c565b9150613c2482613bbd565b604082019050919050565b60006020820190508181036000830152613c4881613c0c565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000613c8560118361331c565b9150613c9082613c4f565b602082019050919050565b60006020820190508181036000830152613cb481613c78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613d3e613d39613d3484613d19565b6137a3565b6132dd565b9050919050565b613d4e81613d23565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d8981613441565b82525050565b6000613d9b8383613d80565b60208301905092915050565b6000602082019050919050565b6000613dbf82613d54565b613dc98185613d5f565b9350613dd483613d70565b8060005b83811015613e05578151613dec8882613d8f565b9750613df783613da7565b925050600181019050613dd8565b5085935050505092915050565b600060a082019050613e2760008301886132e7565b613e346020830187613d45565b8181036040830152613e468186613db4565b9050613e5560608301856136e6565b613e6260808301846132e7565b9695505050505050565b600081905092915050565b50565b6000613e87600083613e6c565b9150613e9282613e77565b600082019050919050565b6000613ea882613e7a565b9150819050919050565b7f72656365697665722072656a65637465642057444f4745207472616e73666572600082015250565b6000613ee860208361331c565b9150613ef382613eb2565b602082019050919050565b60006020820190508181036000830152613f1781613edb565b9050919050565b600060c082019050613f3360008301896136e6565b613f4060208301886132e7565b613f4d6040830187613d45565b613f5a6060830186613d45565b613f6760808301856136e6565b613f7460a08301846132e7565b979650505050505050565b600081519050613f8e816133c8565b92915050565b600080600060608486031215613fad57613fac6133c3565b5b6000613fbb86828701613f7f565b9350506020613fcc86828701613f7f565b9250506040613fdd86828701613f7f565b9150509250925092565b6000604082019050613ffc60008301856132e7565b61400960208301846132e7565b939250505056fea2646970667358221220502fa61633444a60f64f49316c5328ce0bcb90711b00afcfb3edea44eeb184ae64736f6c63430008160033