608060405260405180602001604052806000815250600d9081620000249190620008ae565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e90816200006b9190620008ae565b5060006010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff021916908315150217905550732cb56fb45fad6fd114d59baff93cefdaf137816e601160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c084a29dd0c9436568435938b1c6c5af4f5c035f601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e6d48bf4ee912235398b96e16db6f310c21e82cb601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738bdfd304d22c9f02d542b59aa9b91236c21dfd82601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739370045ce37f381500ac7d6802513bb89871e076601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200027857600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280601181526020017f446f7878656420446567656e733a2053320000000000000000000000000000008152506040518060400160405280600e81526020017f446f78786564446567656e73533200000000000000000000000000000000000081525081600290816200030d9190620008ae565b5080600390816200031f9190620008ae565b50620003306200055d60201b60201c565b6000819055505050620003586200034c6200056660201b60201c565b6200056e60201b60201c565b600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620005555780156200041b576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620003e1929190620009da565b600060405180830381600087803b158015620003fc57600080fd5b505af115801562000411573d6000803e3d6000fd5b5050505062000554565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620004d5576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200049b929190620009da565b600060405180830381600087803b158015620004b657600080fd5b505af1158015620004cb573d6000803e3d6000fd5b5050505062000553565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b81526004016200051e919062000a07565b600060405180830381600087803b1580156200053957600080fd5b505af11580156200054e573d6000803e3d6000fd5b505050505b5b5b505062000a24565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006b657607f821691505b602082108103620006cc57620006cb6200066e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006f7565b620007428683620006f7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200078f6200078962000783846200075a565b62000764565b6200075a565b9050919050565b6000819050919050565b620007ab836200076e565b620007c3620007ba8262000796565b84845462000704565b825550505050565b600090565b620007da620007cb565b620007e7818484620007a0565b505050565b5b818110156200080f5762000803600082620007d0565b600181019050620007ed565b5050565b601f8211156200085e576200082881620006d2565b6200083384620006e7565b8101602085101562000843578190505b6200085b6200085285620006e7565b830182620007ec565b50505b505050565b600082821c905092915050565b6000620008836000198460080262000863565b1980831691505092915050565b60006200089e838362000870565b9150826002028217905092915050565b620008b98262000634565b67ffffffffffffffff811115620008d557620008d46200063f565b5b620008e182546200069d565b620008ee82828562000813565b600060209050601f83116001811462000926576000841562000911578287015190505b6200091d858262000890565b8655506200098d565b601f1984166200093686620006d2565b60005b82811015620009605784890151825560018201915060208501945060208101905062000939565b868310156200098057848901516200097c601f89168262000870565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009c28262000995565b9050919050565b620009d481620009b5565b82525050565b6000604082019050620009f16000830185620009c9565b62000a006020830184620009c9565b9392505050565b600060208201905062000a1e6000830184620009c9565b92915050565b614fb98062000a346000396000f3fe6080604052600436106103355760003560e01c806362b99ad4116101ab5780638ec4f21e116100f7578063babf92cd11610095578063de272abf1161006f578063de272abf14610bd5578063e985e9c514610c12578063f2fde38b14610c4f578063f90c8d1014610c7857610335565b8063babf92cd14610b30578063c87b56dd14610b6d578063ce4c521614610baa57610335565b8063a22cb465116100d1578063a22cb46514610a83578063a80f3dae14610aac578063a9591d4514610ae9578063b88d4fde14610b1457610335565b80638ec4f21e146109f257806395d89b4114610a1b578063a1903da014610a4657610335565b8063715018a6116101645780637e0c7fc51161013e5780637e0c7fc5146109385780637ec4a65914610961578063878325231461098a5780638da5cb5b146109c757610335565b8063715018a6146108da5780637b73a38b146108f15780637cf58ee61461091c57610335565b806362b99ad4146107c357806363356bb7146107ee578063633794821461080a5780636352211e14610835578063665d94bb1461087257806370a082311461089d57610335565b806328aec5bd116102855780633f140aa0116102235780634ceab10d116101fd5780634ceab10d1461070957806354d77e0e146107325780635503a0e81461075b5780635cbdd9cd1461078657610335565b80633f140aa0146106a657806342842e0e146106d157806348271d41146106ed57610335565b8063315222731161025f57806331522273146105e857806332cb6b0c1461062557806336d6ef23146106505780633a59fe3f1461067b57610335565b806328aec5bd146105555780632c19b7f3146105805780632d84fa5f146105ab57610335565b806316ba10e0116102f25780631ece84c2116102cc5780631ece84c2146104ce57806321cc00a0146104f757806323b872dd1461052257806324600fc31461053e57610335565b806316ba10e01461043d57806317baa7e91461046657806318160ddd146104a357610335565b806301ffc9a71461033a57806306fdde0314610377578063081812fc146103a2578063095ea7b3146103df5780630e4539bf146103fb578063147c69e214610412575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c91906137ea565b610cb5565b60405161036e9190613832565b60405180910390f35b34801561038357600080fd5b5061038c610d47565b60405161039991906138dd565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613935565b610dd9565b6040516103d691906139a3565b60405180910390f35b6103f960048036038101906103f491906139ea565b610e58565b005b34801561040757600080fd5b50610410610f9c565b005b34801561041e57600080fd5b50610427611053565b6040516104349190613832565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613b5f565b611066565b005b34801561047257600080fd5b5061048d60048036038101906104889190613be1565b611081565b60405161049a9190613c27565b60405180910390f35b3480156104af57600080fd5b506104b8611099565b6040516104c59190613c51565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190613c98565b6110b0565b005b34801561050357600080fd5b5061050c6110d5565b6040516105199190613c51565b60405180910390f35b61053c60048036038101906105379190613cc5565b6110e0565b005b34801561054a57600080fd5b50610553611230565b005b34801561056157600080fd5b5061056a611309565b6040516105779190613c51565b60405180910390f35b34801561058c57600080fd5b5061059561130e565b6040516105a29190613c51565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190613d18565b611314565b6040516105df9190613c51565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a9190613d18565b61132c565b60405161061c9190613832565b60405180910390f35b34801561063157600080fd5b5061063a6113e5565b6040516106479190613c51565b60405180910390f35b34801561065c57600080fd5b506106656113eb565b6040516106729190613832565b60405180910390f35b34801561068757600080fd5b506106906113fe565b60405161069d9190613c51565b60405180910390f35b3480156106b257600080fd5b506106bb611403565b6040516106c89190613d54565b60405180910390f35b6106eb60048036038101906106e69190613cc5565b611408565b005b61070760048036038101906107029190613e63565b611558565b005b34801561071557600080fd5b50610730600480360381019061072b9190613c98565b611841565b005b34801561073e57600080fd5b5061075960048036038101906107549190613ebf565b611866565b005b34801561076757600080fd5b506107706118ea565b60405161077d91906138dd565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190613d18565b611978565b6040516107ba9190613c51565b60405180910390f35b3480156107cf57600080fd5b506107d8611990565b6040516107e591906138dd565b60405180910390f35b61080860048036038101906108039190613e63565b611a1e565b005b34801561081657600080fd5b5061081f611cc1565b60405161082c9190613c51565b60405180910390f35b34801561084157600080fd5b5061085c60048036038101906108579190613935565b611cc6565b60405161086991906139a3565b60405180910390f35b34801561087e57600080fd5b50610887611cd8565b6040516108949190613c51565b60405180910390f35b3480156108a957600080fd5b506108c460048036038101906108bf9190613d18565b611cdd565b6040516108d19190613c51565b60405180910390f35b3480156108e657600080fd5b506108ef611d95565b005b3480156108fd57600080fd5b50610906611da9565b6040516109139190613832565b60405180910390f35b61093660048036038101906109319190613935565b611dbc565b005b34801561094457600080fd5b5061095f600480360381019061095a9190613935565b61201b565b005b34801561096d57600080fd5b5061098860048036038101906109839190613b5f565b61209b565b005b34801561099657600080fd5b506109b160048036038101906109ac9190613d18565b6120b6565b6040516109be9190613c51565b60405180910390f35b3480156109d357600080fd5b506109dc6120ce565b6040516109e991906139a3565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613c98565b6120f8565b005b348015610a2757600080fd5b50610a3061211d565b604051610a3d91906138dd565b60405180910390f35b348015610a5257600080fd5b50610a6d6004803603810190610a689190613d18565b6121af565b604051610a7a9190613832565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613eff565b612268565b005b348015610ab857600080fd5b50610ad36004803603810190610ace9190613d18565b612373565b604051610ae09190613832565b60405180910390f35b348015610af557600080fd5b50610afe61242c565b604051610b0b9190613c51565b60405180910390f35b610b2e6004803603810190610b299190613fe0565b612437565b005b348015610b3c57600080fd5b50610b576004803603810190610b529190613d18565b61258a565b604051610b649190613832565b60405180910390f35b348015610b7957600080fd5b50610b946004803603810190610b8f9190613935565b612643565b604051610ba191906138dd565b60405180910390f35b348015610bb657600080fd5b50610bbf6126ed565b604051610bcc9190613d54565b60405180910390f35b348015610be157600080fd5b50610bfc6004803603810190610bf79190614063565b6126f2565b604051610c099190613832565b60405180910390f35b348015610c1e57600080fd5b50610c396004803603810190610c3491906140bf565b612762565b604051610c469190613832565b60405180910390f35b348015610c5b57600080fd5b50610c766004803603810190610c719190613d18565b6127f6565b005b348015610c8457600080fd5b50610c9f6004803603810190610c9a9190614063565b612879565b604051610cac9190613832565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d1057506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d405750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610d569061412e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d829061412e565b8015610dcf5780601f10610da457610100808354040283529160200191610dcf565b820191906000526020600020905b815481529060010190602001808311610db257829003601f168201915b5050505050905090565b6000610de4826128e9565b610e1a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e6382611cc6565b90508073ffffffffffffffffffffffffffffffffffffffff16610e84612948565b73ffffffffffffffffffffffffffffffffffffffff1614610ee757610eb081610eab612948565b612762565b610ee6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610fa4612950565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610fca90614190565b60006040518083038185875af1925050503d8060008114611007576040519150601f19603f3d011682016040523d82523d6000602084013e61100c565b606091505b5050905080611050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611047906141f1565b60405180910390fd5b50565b601160009054906101000a900460ff1681565b61106e612950565b80600e908161107d91906143bd565b5050565b60126020528060005260406000206000915090505481565b60006110a36129ce565b6001546000540303905090565b6110b8612950565b80601160016101000a81548160ff02191690831515021790555050565b66f523226980800081565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b111561121e573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111525761114d8484846129d7565b61122a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161119b92919061448f565b602060405180830381865afa1580156111b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dc91906144cd565b61121d57336040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161121491906139a3565b60405180910390fd5b5b6112298484846129d7565b5b50505050565b611238612950565b6000601160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161128090614190565b60006040518083038185875af1925050503d80600081146112bd576040519150601f19603f3d011682016040523d82523d6000602084013e6112c2565b606091505b5050905080611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd906141f1565b60405180910390fd5b50565b600181565b60105481565b600a6020528060005260406000206000915090505481565b600080600090506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161139091906139a3565b602060405180830381865afa1580156113ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d1919061450f565b11156113dc57600190505b80915050919050565b6103e881565b601160029054906101000a900460ff1681565b600381565b600181565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611546573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361147a57611475848484612cf9565b611552565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016114c392919061448f565b602060405180830381865afa1580156114e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150491906144cd565b61154557336040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161153c91906139a3565b60405180910390fd5b5b611551848484612cf9565b5b50505050565b611560612d19565b601160019054906101000a900460ff166115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690614588565b60405180910390fd5b6103e8826010546115c091906145d7565b1115611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890614657565b60405180910390fd5b61160b33826126f2565b8061161b575061161a336121af565b5b8061162b575061162a3361258a565b5b8061163b575061163a3361132c565b5b8061164b575061164a33612373565b5b61168a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611681906146c3565b60405180910390fd5b66f52322698080008261169d91906146e3565b34146116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590614771565b60405180910390fd5b6000821180156116ef575060038211155b61172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590614803565b60405180910390fd5b600382600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461177b91906145d7565b11156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b39061486f565b60405180910390fd5b81600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461180b91906145d7565b92505081905550816010600082825461182491906145d7565b925050819055506118353383612d68565b61183d612d86565b5050565b611849612950565b80601160026101000a81548160ff02191690831515021790555050565b61186e612950565b600160ff168260ff1614806118895750600260ff168260ff16145b6118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf906148db565b60405180910390fd5b80601260008460ff1660ff168152602001908152602001600020819055505050565b600e80546118f79061412e565b80601f01602080910402602001604051908101604052809291908181526020018280546119239061412e565b80156119705780601f1061194557610100808354040283529160200191611970565b820191906000526020600020905b81548152906001019060200180831161195357829003601f168201915b505050505081565b600c6020528060005260406000206000915090505481565b600d805461199d9061412e565b80601f01602080910402602001604051908101604052809291908181526020018280546119c99061412e565b8015611a165780601f106119eb57610100808354040283529160200191611a16565b820191906000526020600020905b8154815290600101906020018083116119f957829003601f168201915b505050505081565b611a26612d19565b601160009054906101000a900460ff16611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c90614947565b60405180910390fd5b6103e882601054611a8691906145d7565b1115611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe90614657565b60405180910390fd5b600082611ad491906146e3565b3414611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c90614771565b60405180910390fd5b611b1f3382612879565b611b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b55906149b3565b60405180910390fd5b600082118015611b6f575060018211155b611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba590614803565b60405180910390fd5b600182600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bfb91906145d7565b1115611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c339061486f565b60405180910390fd5b81600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c8b91906145d7565b925050819055508160106000828254611ca491906145d7565b92505081905550611cb53383612d68565b611cbd612d86565b5050565b600581565b6000611cd182612d90565b9050919050565b600081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d44576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611d9d612950565b611da76000612e5c565b565b601160019054906101000a900460ff1681565b611dc4612d19565b601160029054906101000a900460ff16611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90614a1f565b60405180910390fd5b6103e881601054611e2491906145d7565b1115611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90614657565b60405180910390fd5b66f523226980800081611e7891906146e3565b3414611eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb090614771565b60405180910390fd5b600081118015611eca575060058111155b611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0090614803565b60405180910390fd5b600581600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f5691906145d7565b1115611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e9061486f565b60405180910390fd5b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fe691906145d7565b925050819055508060106000828254611fff91906145d7565b925050819055506120103382612d68565b612018612d86565b50565b612023612950565b6103e88160105461203491906145d7565b1115612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90614a8b565b60405180910390fd5b806010600082825461208791906145d7565b925050819055506120983382612d68565b50565b6120a3612950565b80600d90816120b291906143bd565b5050565b600b6020528060005260406000206000915090505481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612100612950565b80601160006101000a81548160ff02191690831515021790555050565b60606003805461212c9061412e565b80601f01602080910402602001604051908101604052809291908181526020018280546121589061412e565b80156121a55780601f1061217a576101008083540402835291602001916121a5565b820191906000526020600020905b81548152906001019060200180831161218857829003601f168201915b5050505050905090565b600080600090506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161221391906139a3565b602060405180830381865afa158015612230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612254919061450f565b111561225f57600190505b80915050919050565b8060076000612275612948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612322612948565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123679190613832565b60405180910390a35050565b600080600090506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016123d791906139a3565b602060405180830381865afa1580156123f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612418919061450f565b111561242357600190505b80915050919050565b66f523226980800081565b8360006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115612576573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124aa576124a585858585612f22565b612583565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016124f392919061448f565b602060405180830381865afa158015612510573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253491906144cd565b61257557336040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161256c91906139a3565b60405180910390fd5b5b61258285858585612f22565b5b5050505050565b600080600090506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016125ee91906139a3565b602060405180830381865afa15801561260b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262f919061450f565b111561263a57600190505b80915050919050565b606061264e826128e9565b61268d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268490614b1d565b60405180910390fd5b6000612697612f95565b905060008151116126b757604051806020016040528060008152506126e5565b806126c184613027565b600e6040516020016126d593929190614bfc565b6040516020818303038152906040525b915050919050565b600281565b600080600090506000600290506000601260008360ff1660ff1681526020019081526020016000205490506000866040516020016127309190614c75565b6040516020818303038152906040528051906020012090506127538683836130f5565b93508394505050505092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127fe612950565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361286d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286490614d02565b60405180910390fd5b61287681612e5c565b50565b600080600090506000600190506000601260008360ff1660ff1681526020019081526020016000205490506000866040516020016128b79190614c75565b6040516020818303038152906040528051906020012090506128da8683836130f5565b93508394505050505092915050565b6000816128f46129ce565b11158015612903575060005482105b8015612941575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b61295861310c565b73ffffffffffffffffffffffffffffffffffffffff166129766120ce565b73ffffffffffffffffffffffffffffffffffffffff16146129cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c390614d6e565b60405180910390fd5b565b60006001905090565b60006129e282612d90565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612a49576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080612a5584613114565b91509150612a6b8187612a66612948565b61313b565b612ab757612a8086612a7b612948565b612762565b612ab6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612b1d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b2a868686600161317f565b8015612b3557600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550612c0385612bdf888887613185565b7c0200000000000000000000000000000000000000000000000000000000176131ad565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603612c895760006001850190506000600460008381526020019081526020016000205403612c87576000548114612c86578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612cf186868660016131d8565b505050505050565b612d1483838360405180602001604052806000815250612437565b505050565b600260095403612d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5590614dda565b60405180910390fd5b6002600981905550565b612d828282604051806020016040528060008152506131de565b5050565b6001600981905550565b60008082905080612d9f6129ce565b11612e2557600054811015612e245760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612e22575b60008103612e18576004600083600190039350838152602001908152602001600020549050612dee565b8092505050612e57565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f2d8484846110e0565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612f8f57612f588484848461327b565b612f8e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600d8054612fa49061412e565b80601f0160208091040260200160405190810160405280929190818152602001828054612fd09061412e565b801561301d5780601f10612ff25761010080835404028352916020019161301d565b820191906000526020600020905b81548152906001019060200180831161300057829003601f168201915b5050505050905090565b606060006001613036846133cb565b01905060008167ffffffffffffffff81111561305557613054613a34565b5b6040519080825280601f01601f1916602001820160405280156130875781602001600182028036833780820191505090505b509050600082602001820190505b6001156130ea578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816130de576130dd614dfa565b5b04945060008503613095575b819350505050919050565b600082613102858461351e565b1490509392505050565b600033905090565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861319c868684613593565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6131e8838361359c565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461327657600080549050600083820390505b613228600086838060010194508661327b565b61325e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061321557816000541461327357600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132a1612948565b8786866040518563ffffffff1660e01b81526004016132c39493929190614e7e565b6020604051808303816000875af19250505080156132ff57506040513d601f19601f820116820180604052508101906132fc9190614edf565b60015b613378573d806000811461332f576040519150601f19603f3d011682016040523d82523d6000602084013e613334565b606091505b506000815103613370576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613429577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161341f5761341e614dfa565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613466576d04ee2d6d415b85acef8100000000838161345c5761345b614dfa565b5b0492506020810190505b662386f26fc10000831061349557662386f26fc10000838161348b5761348a614dfa565b5b0492506010810190505b6305f5e10083106134be576305f5e10083816134b4576134b3614dfa565b5b0492506008810190505b61271083106134e35761271083816134d9576134d8614dfa565b5b0492506004810190505b6064831061350657606483816134fc576134fb614dfa565b5b0492506002810190505b600a8310613515576001810190505b80915050919050565b60008082905060005b845181101561358857600085828151811061354557613544614f0c565b5b60200260200101519050808311613567576135608382613757565b9250613574565b6135718184613757565b92505b50808061358090614f3b565b915050613527565b508091505092915050565b60009392505050565b600080549050600082036135dc576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6135e9600084838561317f565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550613660836136516000866000613185565b61365a8561376e565b176131ad565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461370157808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001810190506136c6565b506000820361373c576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600081905550505061375260008483856131d8565b505050565b600082600052816020526040600020905092915050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6137c781613792565b81146137d257600080fd5b50565b6000813590506137e4816137be565b92915050565b600060208284031215613800576137ff613788565b5b600061380e848285016137d5565b91505092915050565b60008115159050919050565b61382c81613817565b82525050565b60006020820190506138476000830184613823565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561388757808201518184015260208101905061386c565b60008484015250505050565b6000601f19601f8301169050919050565b60006138af8261384d565b6138b98185613858565b93506138c9818560208601613869565b6138d281613893565b840191505092915050565b600060208201905081810360008301526138f781846138a4565b905092915050565b6000819050919050565b613912816138ff565b811461391d57600080fd5b50565b60008135905061392f81613909565b92915050565b60006020828403121561394b5761394a613788565b5b600061395984828501613920565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061398d82613962565b9050919050565b61399d81613982565b82525050565b60006020820190506139b86000830184613994565b92915050565b6139c781613982565b81146139d257600080fd5b50565b6000813590506139e4816139be565b92915050565b60008060408385031215613a0157613a00613788565b5b6000613a0f858286016139d5565b9250506020613a2085828601613920565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a6c82613893565b810181811067ffffffffffffffff82111715613a8b57613a8a613a34565b5b80604052505050565b6000613a9e61377e565b9050613aaa8282613a63565b919050565b600067ffffffffffffffff821115613aca57613ac9613a34565b5b613ad382613893565b9050602081019050919050565b82818337600083830152505050565b6000613b02613afd84613aaf565b613a94565b905082815260208101848484011115613b1e57613b1d613a2f565b5b613b29848285613ae0565b509392505050565b600082601f830112613b4657613b45613a2a565b5b8135613b56848260208601613aef565b91505092915050565b600060208284031215613b7557613b74613788565b5b600082013567ffffffffffffffff811115613b9357613b9261378d565b5b613b9f84828501613b31565b91505092915050565b600060ff82169050919050565b613bbe81613ba8565b8114613bc957600080fd5b50565b600081359050613bdb81613bb5565b92915050565b600060208284031215613bf757613bf6613788565b5b6000613c0584828501613bcc565b91505092915050565b6000819050919050565b613c2181613c0e565b82525050565b6000602082019050613c3c6000830184613c18565b92915050565b613c4b816138ff565b82525050565b6000602082019050613c666000830184613c42565b92915050565b613c7581613817565b8114613c8057600080fd5b50565b600081359050613c9281613c6c565b92915050565b600060208284031215613cae57613cad613788565b5b6000613cbc84828501613c83565b91505092915050565b600080600060608486031215613cde57613cdd613788565b5b6000613cec868287016139d5565b9350506020613cfd868287016139d5565b9250506040613d0e86828701613920565b9150509250925092565b600060208284031215613d2e57613d2d613788565b5b6000613d3c848285016139d5565b91505092915050565b613d4e81613ba8565b82525050565b6000602082019050613d696000830184613d45565b92915050565b600067ffffffffffffffff821115613d8a57613d89613a34565b5b602082029050602081019050919050565b600080fd5b613da981613c0e565b8114613db457600080fd5b50565b600081359050613dc681613da0565b92915050565b6000613ddf613dda84613d6f565b613a94565b90508083825260208201905060208402830185811115613e0257613e01613d9b565b5b835b81811015613e2b5780613e178882613db7565b845260208401935050602081019050613e04565b5050509392505050565b600082601f830112613e4a57613e49613a2a565b5b8135613e5a848260208601613dcc565b91505092915050565b60008060408385031215613e7a57613e79613788565b5b6000613e8885828601613920565b925050602083013567ffffffffffffffff811115613ea957613ea861378d565b5b613eb585828601613e35565b9150509250929050565b60008060408385031215613ed657613ed5613788565b5b6000613ee485828601613bcc565b9250506020613ef585828601613db7565b9150509250929050565b60008060408385031215613f1657613f15613788565b5b6000613f24858286016139d5565b9250506020613f3585828601613c83565b9150509250929050565b600067ffffffffffffffff821115613f5a57613f59613a34565b5b613f6382613893565b9050602081019050919050565b6000613f83613f7e84613f3f565b613a94565b905082815260208101848484011115613f9f57613f9e613a2f565b5b613faa848285613ae0565b509392505050565b600082601f830112613fc757613fc6613a2a565b5b8135613fd7848260208601613f70565b91505092915050565b60008060008060808587031215613ffa57613ff9613788565b5b6000614008878288016139d5565b9450506020614019878288016139d5565b935050604061402a87828801613920565b925050606085013567ffffffffffffffff81111561404b5761404a61378d565b5b61405787828801613fb2565b91505092959194509250565b6000806040838503121561407a57614079613788565b5b6000614088858286016139d5565b925050602083013567ffffffffffffffff8111156140a9576140a861378d565b5b6140b585828601613e35565b9150509250929050565b600080604083850312156140d6576140d5613788565b5b60006140e4858286016139d5565b92505060206140f5858286016139d5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061414657607f821691505b602082108103614159576141586140ff565b5b50919050565b600081905092915050565b50565b600061417a60008361415f565b91506141858261416a565b600082019050919050565b600061419b8261416d565b9150819050919050565b7f5749544844524157204641494c45442100000000000000000000000000000000600082015250565b60006141db601083613858565b91506141e6826141a5565b602082019050919050565b6000602082019050818103600083015261420a816141ce565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026142737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614236565b61427d8683614236565b95508019841693508086168417925050509392505050565b6000819050919050565b60006142ba6142b56142b0846138ff565b614295565b6138ff565b9050919050565b6000819050919050565b6142d48361429f565b6142e86142e0826142c1565b848454614243565b825550505050565b600090565b6142fd6142f0565b6143088184846142cb565b505050565b5b8181101561432c576143216000826142f5565b60018101905061430e565b5050565b601f8211156143715761434281614211565b61434b84614226565b8101602085101561435a578190505b61436e61436685614226565b83018261430d565b50505b505050565b600082821c905092915050565b600061439460001984600802614376565b1980831691505092915050565b60006143ad8383614383565b9150826002028217905092915050565b6143c68261384d565b67ffffffffffffffff8111156143df576143de613a34565b5b6143e9825461412e565b6143f4828285614330565b600060209050601f8311600181146144275760008415614415578287015190505b61441f85826143a1565b865550614487565b601f19841661443586614211565b60005b8281101561445d57848901518255600182019150602085019450602081019050614438565b8683101561447a5784890151614476601f891682614383565b8355505b6001600288020188555050505b505050505050565b60006040820190506144a46000830185613994565b6144b16020830184613994565b9392505050565b6000815190506144c781613c6c565b92915050565b6000602082840312156144e3576144e2613788565b5b60006144f1848285016144b8565b91505092915050565b60008151905061450981613909565b92915050565b60006020828403121561452557614524613788565b5b6000614533848285016144fa565b91505092915050565b7f4d696e74506861736532206973206e6f7420656e61626c656400000000000000600082015250565b6000614572601983613858565b915061457d8261453c565b602082019050919050565b600060208201905081810360008301526145a181614565565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145e2826138ff565b91506145ed836138ff565b9250828201905080821115614605576146046145a8565b5b92915050565b7f457863656564206d617820737570706c79000000000000000000000000000000600082015250565b6000614641601183613858565b915061464c8261460b565b602082019050919050565b6000602082019050818103600083015261467081614634565b9050919050565b7f4e6f7420486f6c646572206f6620436f6c6c656374696f6e732e000000000000600082015250565b60006146ad601a83613858565b91506146b882614677565b602082019050919050565b600060208201905081810360008301526146dc816146a0565b9050919050565b60006146ee826138ff565b91506146f9836138ff565b9250828202614707816138ff565b9150828204841483151761471e5761471d6145a8565b5b5092915050565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b600061475b601683613858565b915061476682614725565b602082019050919050565b6000602082019050818103600083015261478a8161474e565b9050919050565b7f4d757374206d696e74206265747765656e20746865206d696e20616e64206d6160008201527f782e000000000000000000000000000000000000000000000000000000000000602082015250565b60006147ed602283613858565b91506147f882614791565b604082019050919050565b6000602082019050818103600083015261481c816147e0565b9050919050565b7f416c7265616479206d696e746564204d61780000000000000000000000000000600082015250565b6000614859601283613858565b915061486482614823565b602082019050919050565b600060208201905081810360008301526148888161484c565b9050919050565b7f4e6f7420612076616c696420547970652e000000000000000000000000000000600082015250565b60006148c5601183613858565b91506148d08261488f565b602082019050919050565b600060208201905081810360008301526148f4816148b8565b9050919050565b7f4d696e74506861736531206973206e6f7420656e61626c656400000000000000600082015250565b6000614931601983613858565b915061493c826148fb565b602082019050919050565b6000602082019050818103600083015261496081614924565b9050919050565b7f4e6f7420486f6c646572206f66204444204d696e7420506173732e0000000000600082015250565b600061499d601b83613858565b91506149a882614967565b602082019050919050565b600060208201905081810360008301526149cc81614990565b9050919050565b7f4d696e74506861736533206973206e6f7420656e61626c656400000000000000600082015250565b6000614a09601983613858565b9150614a14826149d3565b602082019050919050565b60006020820190508181036000830152614a38816149fc565b9050919050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b6000614a75601483613858565b9150614a8082614a3f565b602082019050919050565b60006020820190508181036000830152614aa481614a68565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614b07602f83613858565b9150614b1282614aab565b604082019050919050565b60006020820190508181036000830152614b3681614afa565b9050919050565b600081905092915050565b6000614b538261384d565b614b5d8185614b3d565b9350614b6d818560208601613869565b80840191505092915050565b60008154614b868161412e565b614b908186614b3d565b94506001821660008114614bab5760018114614bc057614bf3565b60ff1983168652811515820286019350614bf3565b614bc985614211565b60005b83811015614beb57815481890152600182019150602081019050614bcc565b838801955050505b50505092915050565b6000614c088286614b48565b9150614c148285614b48565b9150614c208284614b79565b9150819050949350505050565b60008160601b9050919050565b6000614c4582614c2d565b9050919050565b6000614c5782614c3a565b9050919050565b614c6f614c6a82613982565b614c4c565b82525050565b6000614c818284614c5e565b60148201915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cec602683613858565b9150614cf782614c90565b604082019050919050565b60006020820190508181036000830152614d1b81614cdf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d58602083613858565b9150614d6382614d22565b602082019050919050565b60006020820190508181036000830152614d8781614d4b565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614dc4601f83613858565b9150614dcf82614d8e565b602082019050919050565b60006020820190508181036000830152614df381614db7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000614e5082614e29565b614e5a8185614e34565b9350614e6a818560208601613869565b614e7381613893565b840191505092915050565b6000608082019050614e936000830187613994565b614ea06020830186613994565b614ead6040830185613c42565b8181036060830152614ebf8184614e45565b905095945050505050565b600081519050614ed9816137be565b92915050565b600060208284031215614ef557614ef4613788565b5b6000614f0384828501614eca565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614f46826138ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f7857614f776145a8565b5b60018201905091905056fea264697066735822122022ddcdaf1f9f604e44b99618f91c69b5f74b80dd5dd5552c01c77008d8df687264736f6c63430008110033