60806040523480156200001157600080fd5b506040518060400160405280600981526020017f4c616d626f436f696e00000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4c616d626f00000000000000000000000000000000000000000000000000000081525081600390816200008f91906200073a565b508060049081620000a191906200073a565b505050620000c4620000b86200019a60201b60201c565b620001a260201b60201c565b600160066000733acb1cc07057210e7e8ec44c4566fb9802d4690373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000184733acb1cc07057210e7e8ec44c4566fb9802d46903620001596200026860201b60201c565b600a620001679190620009b1565b633b9aca0062000178919062000a02565b6200027160201b60201c565b62000194620003e960201b60201c565b62000bab565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006009905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002da9062000aae565b60405180910390fd5b620002f7600083836200048c60201b60201c565b80600260008282546200030b919062000ad0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000362919062000ad0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003c9919062000b1c565b60405180910390a3620003e5600083836200049160201b60201c565b5050565b620003f96200019a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200041f6200049660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000478576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200046f9062000b89565b60405180910390fd5b6200048a6000620001a260201b60201c565b565b505050565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200054257607f821691505b602082108103620005585762000557620004fa565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005c27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000583565b620005ce868362000583565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200061b620006156200060f84620005e6565b620005f0565b620005e6565b9050919050565b6000819050919050565b6200063783620005fa565b6200064f620006468262000622565b84845462000590565b825550505050565b600090565b6200066662000657565b620006738184846200062c565b505050565b5b818110156200069b576200068f6000826200065c565b60018101905062000679565b5050565b601f821115620006ea57620006b4816200055e565b620006bf8462000573565b81016020851015620006cf578190505b620006e7620006de8562000573565b83018262000678565b50505b505050565b600082821c905092915050565b60006200070f60001984600802620006ef565b1980831691505092915050565b60006200072a8383620006fc565b9150826002028217905092915050565b6200074582620004c0565b67ffffffffffffffff811115620007615762000760620004cb565b5b6200076d825462000529565b6200077a8282856200069f565b600060209050601f831160018114620007b257600084156200079d578287015190505b620007a985826200071c565b86555062000819565b601f198416620007c2866200055e565b60005b82811015620007ec57848901518255600182019150602085019450602081019050620007c5565b868310156200080c578489015162000808601f891682620006fc565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620008af5780860481111562000887576200088662000821565b5b6001851615620008975780820291505b8081029050620008a78562000850565b945062000867565b94509492505050565b600082620008ca57600190506200099d565b81620008da57600090506200099d565b8160018114620008f35760028114620008fe5762000934565b60019150506200099d565b60ff84111562000913576200091262000821565b5b8360020a9150848211156200092d576200092c62000821565b5b506200099d565b5060208310610133831016604e8410600b84101617156200096e5782820a90508381111562000968576200096762000821565b5b6200099d565b6200097d84848460016200085d565b9250905081840481111562000997576200099662000821565b5b81810290505b9392505050565b600060ff82169050919050565b6000620009be82620005e6565b9150620009cb83620009a4565b9250620009fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620008b8565b905092915050565b600062000a0f82620005e6565b915062000a1c83620005e6565b925082820262000a2c81620005e6565b9150828204841483151762000a465762000a4562000821565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a96601f8362000a4d565b915062000aa38262000a5e565b602082019050919050565b6000602082019050818103600083015262000ac98162000a87565b9050919050565b600062000add82620005e6565b915062000aea83620005e6565b925082820190508082111562000b055762000b0462000821565b5b92915050565b62000b1681620005e6565b82525050565b600060208201905062000b33600083018462000b0b565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000b7160208362000a4d565b915062000b7e8262000b39565b602082019050919050565b6000602082019050818103600083015262000ba48162000b62565b9050919050565b61217a8062000bbb6000396000f3fe6080604052600436106101185760003560e01c806370a08231116100a057806395d89b411161006457806395d89b4114610398578063a9059cbb146103c3578063bd0f375014610400578063dd62ed3e1461043d578063f2fde38b1461047a5761011f565b806370a08231146102c5578063715018a61461030257806375d5e02c146103195780638a8c523c146103565780638da5cb5b1461036d5761011f565b806323b872dd116100e757806323b872dd146101e0578063313ce5671461021d57806346757a5414610248578063484d993f146102715780634ada218b1461029a5761011f565b80630165c3671461012457806306fdde031461014d578063095ea7b31461017857806318160ddd146101b55761011f565b3661011f57005b600080fd5b34801561013057600080fd5b5061014b600480360381019061014691906115a0565b6104a3565b005b34801561015957600080fd5b5061016261053d565b60405161016f919061167d565b60405180910390f35b34801561018457600080fd5b5061019f600480360381019061019a9190611733565b6105cf565b6040516101ac919061178e565b60405180910390f35b3480156101c157600080fd5b506101ca6105ed565b6040516101d791906117b8565b60405180910390f35b3480156101ec57600080fd5b50610207600480360381019061020291906117d3565b6105f7565b604051610214919061178e565b60405180910390f35b34801561022957600080fd5b5061023261071f565b60405161023f9190611842565b60405180910390f35b34801561025457600080fd5b5061026f600480360381019061026a91906115a0565b610728565b005b34801561027d57600080fd5b5061029860048036038101906102939190611889565b6107c2565b005b3480156102a657600080fd5b506102af6108b7565b6040516102bc919061178e565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e791906118c9565b6108ca565b6040516102f991906117b8565b60405180910390f35b34801561030e57600080fd5b50610317610912565b005b34801561032557600080fd5b50610340600480360381019061033b91906118c9565b61099a565b60405161034d919061178e565b60405180910390f35b34801561036257600080fd5b5061036b6109f0565b005b34801561037957600080fd5b50610382610a65565b60405161038f9190611905565b60405180910390f35b3480156103a457600080fd5b506103ad610a8f565b6040516103ba919061167d565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611733565b610b21565b6040516103f7919061178e565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906118c9565b610b3f565b60405161043491906117b8565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190611920565b610b88565b60405161047191906117b8565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c91906118c9565b610c0f565b005b6104ab610d06565b60005b82829050811015610538576000600760008585858181106104d2576104d1611960565b5b90506020020160208101906104e791906118c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610530906119be565b9150506104ae565b505050565b60606003805461054c90611a35565b80601f016020809104026020016040519081016040528092919081815260200182805461057890611a35565b80156105c55780601f1061059a576101008083540402835291602001916105c5565b820191906000526020600020905b8154815290600101906020018083116105a857829003601f168201915b5050505050905090565b60006105e36105dc610d67565b8484610d6f565b6001905092915050565b6000600254905090565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610643610d67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461070857828110156106ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e190611ad8565b60405180910390fd5b610707856106f6610d67565b85846107029190611af8565b610d6f565b5b610713858585610f38565b60019150509392505050565b60006009905090565b610730610d06565b60005b828290508110156107bd5760646007600085858581811061075757610756611960565b5b905060200201602081019061076c91906118c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806107b5906119be565b915050610733565b505050565b6107ca610d06565b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361085c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085390611b9e565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61091a610d67565b73ffffffffffffffffffffffffffffffffffffffff16610938610a65565b73ffffffffffffffffffffffffffffffffffffffff161461098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098590611c0a565b60405180910390fd5b61099860006111a7565b565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6109f8610d06565b600860009054906101000a900460ff1615610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f90611c76565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a9e90611a35565b80601f0160208091040260200160405190810160405280929190818152602001828054610aca90611a35565b8015610b175780601f10610aec57610100808354040283529160200191610b17565b820191906000526020600020905b815481529060010190602001808311610afa57829003601f168201915b5050505050905090565b6000610b35610b2e610d67565b8484610f38565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c17610d67565b73ffffffffffffffffffffffffffffffffffffffff16610c35610a65565b73ffffffffffffffffffffffffffffffffffffffff1614610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8290611c0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf190611d08565b60405180910390fd5b610d03816111a7565b50565b610d0e61126d565b3373ffffffffffffffffffffffffffffffffffffffff1614610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90611c0a565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590611d9a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4490611e2c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f2b91906117b8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90611ebe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d90611f50565b60405180910390fd5b600860009054906101000a900460ff168061107a5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806110ce5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490611fbc565b60405180910390fd5b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000606482846111619190611fdc565b61116b919061204d565b90506000818461117b9190611af8565b90506000821115611194576111938661dead8461129f565b5b61119f86868361129f565b505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000733acb1cc07057210e7e8ec44c4566fb9802d4690373ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590611ebe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490611f50565b60405180910390fd5b611388838383611527565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561140e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611405906120f0565b60405180910390fd5b818161141a9190611af8565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114aa9190612110565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161150e91906117b8565b60405180910390a361152184848461152c565b50505050565b505050565b505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126115605761155f61153b565b5b8235905067ffffffffffffffff81111561157d5761157c611540565b5b60208301915083602082028301111561159957611598611545565b5b9250929050565b600080602083850312156115b7576115b6611531565b5b600083013567ffffffffffffffff8111156115d5576115d4611536565b5b6115e18582860161154a565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561162757808201518184015260208101905061160c565b60008484015250505050565b6000601f19601f8301169050919050565b600061164f826115ed565b61165981856115f8565b9350611669818560208601611609565b61167281611633565b840191505092915050565b600060208201905081810360008301526116978184611644565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116ca8261169f565b9050919050565b6116da816116bf565b81146116e557600080fd5b50565b6000813590506116f7816116d1565b92915050565b6000819050919050565b611710816116fd565b811461171b57600080fd5b50565b60008135905061172d81611707565b92915050565b6000806040838503121561174a57611749611531565b5b6000611758858286016116e8565b92505060206117698582860161171e565b9150509250929050565b60008115159050919050565b61178881611773565b82525050565b60006020820190506117a3600083018461177f565b92915050565b6117b2816116fd565b82525050565b60006020820190506117cd60008301846117a9565b92915050565b6000806000606084860312156117ec576117eb611531565b5b60006117fa868287016116e8565b935050602061180b868287016116e8565b925050604061181c8682870161171e565b9150509250925092565b600060ff82169050919050565b61183c81611826565b82525050565b60006020820190506118576000830184611833565b92915050565b61186681611773565b811461187157600080fd5b50565b6000813590506118838161185d565b92915050565b600080604083850312156118a05761189f611531565b5b60006118ae858286016116e8565b92505060206118bf85828601611874565b9150509250929050565b6000602082840312156118df576118de611531565b5b60006118ed848285016116e8565b91505092915050565b6118ff816116bf565b82525050565b600060208201905061191a60008301846118f6565b92915050565b6000806040838503121561193757611936611531565b5b6000611945858286016116e8565b9250506020611956858286016116e8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006119c9826116fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036119fb576119fa61198f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a4d57607f821691505b602082108103611a6057611a5f611a06565b5b50919050565b7f45524332303a207472616e736665722061626e6d746f75746e7420657863656560008201527f647320616c6c6f77616e63650000000000000000000000000000000000000000602082015250565b6000611ac2602c836115f8565b9150611acd82611a66565b604082019050919050565b60006020820190508181036000830152611af181611ab5565b9050919050565b6000611b03826116fd565b9150611b0e836116fd565b9250828203905081811115611b2657611b2561198f565b5b92915050565b7f61636e676f74756e7420697320616c7265616479207468652076616c7565206f60008201527f6620276578636c75646564270000000000000000000000000000000000000000602082015250565b6000611b88602c836115f8565b9150611b9382611b2c565b604082019050919050565b60006020820190508181036000830152611bb781611b7b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611bf46020836115f8565b9150611bff82611bbe565b602082019050919050565b60006020820190508181036000830152611c2381611be7565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000611c606018836115f8565b9150611c6b82611c2a565b602082019050919050565b60006020820190508181036000830152611c8f81611c53565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611cf26026836115f8565b9150611cfd82611c96565b604082019050919050565b60006020820190508181036000830152611d2181611ce5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611d846024836115f8565b9150611d8f82611d28565b604082019050919050565b60006020820190508181036000830152611db381611d77565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e166022836115f8565b9150611e2182611dba565b604082019050919050565b60006020820190508181036000830152611e4581611e09565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611ea86025836115f8565b9150611eb382611e4c565b604082019050919050565b60006020820190508181036000830152611ed781611e9b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611f3a6023836115f8565b9150611f4582611ede565b604082019050919050565b60006020820190508181036000830152611f6981611f2d565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000611fa66018836115f8565b9150611fb182611f70565b602082019050919050565b60006020820190508181036000830152611fd581611f99565b9050919050565b6000611fe7826116fd565b9150611ff2836116fd565b9250828202612000816116fd565b915082820484148315176120175761201661198f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612058826116fd565b9150612063836116fd565b9250826120735761207261201e565b5b828204905092915050565b7f45524332303a207472616e736665722061626e6d746f75746e7420657863656560008201527f64732062616c616e636500000000000000000000000000000000000000000000602082015250565b60006120da602a836115f8565b91506120e58261207e565b604082019050919050565b60006020820190508181036000830152612109816120cd565b9050919050565b600061211b826116fd565b9150612126836116fd565b925082820190508082111561213e5761213d61198f565b5b9291505056fea2646970667358221220948af236ec8144e6983bbd2cd585209d57414772bc6814696a867fbbeb37830564736f6c63430008110033