60806040526477712eca006002556000600560006101000a81548160ff0219169083151502179055506811ac28a8c7295800006006553480156200004257600080fd5b50604051620017d2380380620017d2833981810160405281019062000068919062000149565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620001e3565b6000815190506200014381620001c9565b92915050565b60008060408385031215620001635762000162620001c4565b5b6000620001738582860162000132565b9250506020620001868582860162000132565b9150509250929050565b60006200019d82620001a4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001d48162000190565b8114620001e057600080fd5b50565b6115df80620001f36000396000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c80637b0a47ee116100c3578063ca628c781161007c578063ca628c781461037b578063cd3daf9d14610385578063d1af0c7d146103a3578063df136d65146103c1578063e9fad8ee146103df578063f7a726f9146103e95761014c565b80637b0a47ee146102b95780638b876347146102d7578063a694fc3a14610307578063b2bdfa7b14610323578063b970da8214610341578063c8f33c911461035d5761014c565b806336cb89c41161011557806336cb89c4146102095780633d18b912146102255780636ecfc3e51461022f57806370a082311461024d57806372f702f31461027d578063789ce1d51461029b5761014c565b80628cc262146101515780630700037d1461018157806318160ddd146101b157806322e15b31146101cf5780632e1a7d4d146101ed575b600080fd5b61016b60048036038101906101669190611108565b610405565b6040516101789190611319565b60405180910390f35b61019b60048036038101906101969190611108565b610507565b6040516101a89190611319565b60405180910390f35b6101b961051f565b6040516101c69190611319565b60405180910390f35b6101d7610529565b6040516101e491906112c3565b60405180910390f35b6102076004803603810190610202919061118f565b610540565b005b610223600480360381019061021e919061118f565b61070b565b005b61022d6107a5565b005b610237610988565b60405161024491906112c3565b60405180910390f35b61026760048036038101906102629190611108565b61099b565b6040516102749190611319565b60405180910390f35b6102856109e4565b60405161029291906112de565b60405180910390f35b6102a3610a0a565b6040516102b09190611319565b60405180910390f35b6102c1610a10565b6040516102ce9190611319565b60405180910390f35b6102f160048036038101906102ec9190611108565b610a16565b6040516102fe9190611319565b60405180910390f35b610321600480360381019061031c919061118f565b610a2e565b005b61032b610bfb565b6040516103389190611248565b60405180910390f35b61035b60048036038101906103569190611135565b610c21565b005b610365610cce565b6040516103729190611319565b60405180910390f35b610383610cd4565b005b61038d610ec3565b60405161039a9190611319565b60405180910390f35b6103ab610f89565b6040516103b891906112de565b60405180910390f35b6103c9610fad565b6040516103d69190611319565b60405180910390f35b6103e7610fb3565b005b61040360048036038101906103fe919061118f565b611005565b005b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054670de0b6b3a7640000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610498610ec3565b6104a29190611426565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104ec91906113cc565b6104f6919061139b565b6105009190611345565b9050919050565b60096020528060005260406000206000915090505481565b6000600a54905090565b6000600560009054906101000a900460ff16905090565b33610549610ec3565b6004819055504260038190555061055f81610405565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60008282546105fa9190611426565b9250508190555081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106509190611426565b92505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016106b492919061129a565b602060405180830381600087803b1580156106ce57600080fd5b505af11580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107069190611162565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461079b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610792906112f9565b60405180910390fd5b8060028190555050565b336107ae610ec3565b600481905550426003819055506107c481610405565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161093192919061129a565b602060405180830381600087803b15801561094b57600080fd5b505af115801561095f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109839190611162565b505050565b600560009054906101000a900460ff1681565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b60025481565b60086020528060005260406000206000915090505481565b33610a37610ec3565b60048190555042600381905550610a4d81610405565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600454600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a6000828254610ae89190611345565b9250508190555081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b3e9190611345565b92505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401610ba493929190611263565b602060405180830381600087803b158015610bbe57600080fd5b505af1158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611162565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca8906112f9565b60405180910390fd5b80600560006101000a81548160ff02191690831515021790555050565b60035481565b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b906112f9565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610dc09190611248565b60206040518083038186803b158015610dd857600080fd5b505afa158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1091906111bc565b905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610e6d92919061129a565b602060405180830381600087803b158015610e8757600080fd5b505af1158015610e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebf9190611162565b5050565b600080600a541415610ed85760009050610f86565b600560009054906101000a900460ff16610f3b57600654670de0b6b3a764000060025460035442610f099190611426565b610f1391906113cc565b610f1d91906113cc565b610f27919061139b565b600454610f349190611345565b9050610f86565b600a54670de0b6b3a764000060025460035442610f589190611426565b610f6291906113cc565b610f6c91906113cc565b610f76919061139b565b600454610f839190611345565b90505b90565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b610ffb600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610540565b6110036107a5565b565b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c906112f9565b60405180910390fd5b8060068190555050565b6000813590506110ae81611564565b92915050565b6000813590506110c38161157b565b92915050565b6000815190506110d88161157b565b92915050565b6000813590506110ed81611592565b92915050565b60008151905061110281611592565b92915050565b60006020828403121561111e5761111d611536565b5b600061112c8482850161109f565b91505092915050565b60006020828403121561114b5761114a611536565b5b6000611159848285016110b4565b91505092915050565b60006020828403121561117857611177611536565b5b6000611186848285016110c9565b91505092915050565b6000602082840312156111a5576111a4611536565b5b60006111b3848285016110de565b91505092915050565b6000602082840312156111d2576111d1611536565b5b60006111e0848285016110f3565b91505092915050565b6111f28161145a565b82525050565b6112018161146c565b82525050565b611210816114a2565b82525050565b6000611223602083611334565b915061122e8261153b565b602082019050919050565b61124281611498565b82525050565b600060208201905061125d60008301846111e9565b92915050565b600060608201905061127860008301866111e9565b61128560208301856111e9565b6112926040830184611239565b949350505050565b60006040820190506112af60008301856111e9565b6112bc6020830184611239565b9392505050565b60006020820190506112d860008301846111f8565b92915050565b60006020820190506112f36000830184611207565b92915050565b6000602082019050818103600083015261131281611216565b9050919050565b600060208201905061132e6000830184611239565b92915050565b600082825260208201905092915050565b600061135082611498565b915061135b83611498565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156113905761138f6114d8565b5b828201905092915050565b60006113a682611498565b91506113b183611498565b9250826113c1576113c0611507565b5b828204905092915050565b60006113d782611498565b91506113e283611498565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561141b5761141a6114d8565b5b828202905092915050565b600061143182611498565b915061143c83611498565b92508282101561144f5761144e6114d8565b5b828203905092915050565b600061146582611478565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006114ad826114b4565b9050919050565b60006114bf826114c6565b9050919050565b60006114d182611478565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61156d8161145a565b811461157857600080fd5b50565b6115848161146c565b811461158f57600080fd5b50565b61159b81611498565b81146115a657600080fd5b5056fea26469706673582212201e57ced2ec872bc1e94d878762f4af6aaef3d0d6c14414eb95da8e3ac892c66964736f6c6343000807003300000000000000000000000017eef6d422f57b812747ea804aa01c847caf020300000000000000000000000017eef6d422f57b812747ea804aa01c847caf0203