0x60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f746f6b656e206e616d65000000000000000000000000000000000000000000008152506002908162000058919062000460565b506012600360006101000a81548160ff021916908360ff1602179055506040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525060049081620000bb919062000460565b5033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900460ff16600a6200011b9190620006d7565b620186a06200012b919062000728565b6006819055506006546000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620001d8919062000784565b60405180910390a3620007a1565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200026857607f821691505b6020821081036200027e576200027d62000220565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002a9565b620002f48683620002a9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003416200033b62000335846200030c565b62000316565b6200030c565b9050919050565b6000819050919050565b6200035d8362000320565b620003756200036c8262000348565b848454620002b6565b825550505050565b600090565b6200038c6200037d565b6200039981848462000352565b505050565b5b81811015620003c157620003b560008262000382565b6001810190506200039f565b5050565b601f8211156200041057620003da8162000284565b620003e58462000299565b81016020851015620003f5578190505b6200040d620004048562000299565b8301826200039e565b50505b505050565b600082821c905092915050565b6000620004356000198460080262000415565b1980831691505092915050565b600062000450838362000422565b9150826002028217905092915050565b6200046b82620001e6565b67ffffffffffffffff811115620004875762000486620001f1565b5b6200049382546200024f565b620004a0828285620003c5565b600060209050601f831160018114620004d85760008415620004c3578287015190505b620004cf858262000442565b8655506200053f565b601f198416620004e88662000284565b60005b828110156200051257848901518255600182019150602085019450602081019050620004eb565b868310156200053257848901516200052e601f89168262000422565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620005d557808604811115620005ad57620005ac62000547565b5b6001851615620005bd5780820291505b8081029050620005cd8562000576565b94506200058d565b94509492505050565b600082620005f05760019050620006c3565b81620006005760009050620006c3565b816001811462000619576002811462000624576200065a565b6001915050620006c3565b60ff84111562000639576200063862000547565b5b8360020a91508482111562000653576200065262000547565b5b50620006c3565b5060208310610133831016604e8410600b8410161715620006945782820a9050838111156200068e576200068d62000547565b5b620006c3565b620006a3848484600162000583565b92509050818404811115620006bd57620006bc62000547565b5b81810290505b9392505050565b600060ff82169050919050565b6000620006e4826200030c565b9150620006f183620006ca565b9250620007207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005de565b905092915050565b600062000735826200030c565b915062000742836200030c565b925082820262000752816200030c565b915082820484148315176200076c576200076b62000547565b5b5092915050565b6200077e816200030c565b82525050565b60006020820190506200079b600083018462000773565b92915050565b61178f80620007b16000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c5780638da5cb5b116100665780638da5cb5b1461029957806395d89b41146102b7578063a9059cbb146102d5578063dd62ed3e14610305576100ea565b806370a082311461020957806379cc6790146102395780638863dd1a14610269576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806340c10f19146101a957806342966c68146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f7610335565b60405161010491906111bd565b60405180910390f35b61012760048036038101906101229190611278565b6103c7565b60405161013491906112d3565b60405180910390f35b610145610527565b60405161015291906112fd565b60405180910390f35b61017560048036038101906101709190611318565b610531565b60405161018291906112d3565b60405180910390f35b6101936108e6565b6040516101a09190611387565b60405180910390f35b6101c360048036038101906101be9190611278565b6108fd565b6040516101d091906112d3565b60405180910390f35b6101f360048036038101906101ee91906113a2565b610a6d565b60405161020091906112d3565b60405180910390f35b610223600480360381019061021e91906113cf565b610b4c565b60405161023091906112fd565b60405180910390f35b610253600480360381019061024e9190611278565b610b94565b60405161026091906112d3565b60405180910390f35b610283600480360381019061027e91906113cf565b610d04565b60405161029091906112d3565b60405180910390f35b6102a1610de0565b6040516102ae919061140b565b60405180910390f35b6102bf610e0a565b6040516102cc91906111bd565b60405180910390f35b6102ef60048036038101906102ea9190611278565b610e9c565b6040516102fc91906112d3565b60405180910390f35b61031f600480360381019061031a9190611426565b6110a6565b60405161032c91906112fd565b60405180910390f35b60606002805461034490611495565b80601f016020809104026020016040519081016040528092919081815260200182805461037090611495565b80156103bd5780601f10610392576101008083540402835291602001916103bd565b820191906000526020600020905b8154815290600101906020018083116103a057829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042e90611512565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161051591906112fd565b60405180910390a36001905092915050565b6000600654905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105989061157e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062890611610565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156107005750828110155b61073f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610736906116a2565b60405180910390fd5b826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461078d91906116f1565b92505081905550826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107e29190611725565b9250508190555082816107f59190611725565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516108d291906112fd565b60405180910390a360019150509392505050565b6000600360009054906101000a900460ff16905090565b60003373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461098f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098690611610565b60405180910390fd5b81600660008282546109a19190611725565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109f69190611725565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a5b91906112fd565b60405180910390a36001905092915050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610abd91906116f1565b925050819055508160066000828254610ad691906116f1565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b3b91906112fd565b60405180910390a360019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60003373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90611610565b60405180910390fd5b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c7491906116f1565b925050819055508160066000828254610c8d91906116f1565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cf291906112fd565b60405180910390a36001905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90611610565b60405180910390fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e1990611495565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4590611495565b8015610e925780601f10610e6757610100808354040283529160200191610e92565b820191906000526020600020905b815481529060010190602001808311610e7557829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f039061157e565b60405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f84906116a2565b60405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fdb91906116f1565b92505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110309190611725565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161109491906112fd565b60405180910390a36001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561116757808201518184015260208101905061114c565b60008484015250505050565b6000601f19601f8301169050919050565b600061118f8261112d565b6111998185611138565b93506111a9818560208601611149565b6111b281611173565b840191505092915050565b600060208201905081810360008301526111d78184611184565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061120f826111e4565b9050919050565b61121f81611204565b811461122a57600080fd5b50565b60008135905061123c81611216565b92915050565b6000819050919050565b61125581611242565b811461126057600080fd5b50565b6000813590506112728161124c565b92915050565b6000806040838503121561128f5761128e6111df565b5b600061129d8582860161122d565b92505060206112ae85828601611263565b9150509250929050565b60008115159050919050565b6112cd816112b8565b82525050565b60006020820190506112e860008301846112c4565b92915050565b6112f781611242565b82525050565b600060208201905061131260008301846112ee565b92915050565b600080600060608486031215611331576113306111df565b5b600061133f8682870161122d565b93505060206113508682870161122d565b925050604061136186828701611263565b9150509250925092565b600060ff82169050919050565b6113818161136b565b82525050565b600060208201905061139c6000830184611378565b92915050565b6000602082840312156113b8576113b76111df565b5b60006113c684828501611263565b91505092915050565b6000602082840312156113e5576113e46111df565b5b60006113f38482850161122d565b91505092915050565b61140581611204565b82525050565b600060208201905061142060008301846113fc565b92915050565b6000806040838503121561143d5761143c6111df565b5b600061144b8582860161122d565b925050602061145c8582860161122d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114ad57607f821691505b6020821081036114c0576114bf611466565b5b50919050565b7f45524332303a20417070726f766520746f207a65726f20616464726573730000600082015250565b60006114fc601e83611138565b9150611507826114c6565b602082019050919050565b6000602082019050818103600083015261152b816114ef565b9050919050565b7f45524332303a205472616e7366657220746f207a65726f206164647265737300600082015250565b6000611568601f83611138565b915061157382611532565b602082019050919050565b600060208201905081810360008301526115978161155b565b9050919050565b7f596f7520617265206e6f74206f776e6572206f66207468697320636f6e74726160008201527f6374210000000000000000000000000000000000000000000000000000000000602082015250565b60006115fa602383611138565b91506116058261159e565b604082019050919050565b60006020820190508181036000830152611629816115ed565b9050919050565b7f546f6b656e2062616c616e6365206973206c6f776572207468616e207468652060008201527f76616c7565207265717565737465642e00000000000000000000000000000000602082015250565b600061168c603083611138565b915061169782611630565b604082019050919050565b600060208201905081810360008301526116bb8161167f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006116fc82611242565b915061170783611242565b925082820390508181111561171f5761171e6116c2565b5b92915050565b600061173082611242565b915061173b83611242565b9250828201905080821115611753576117526116c2565b5b9291505056fea2646970667358221220e28cd3fc5eff7f166c35f246c2aeff67f796c903bacc4653735361763f333c8a64736f6c63430008120033