60806040526040805190810160405280600881526020017f616e69746f6b656e0000000000000000000000000000000000000000000000008152506001908051906020019062000051929190620000e6565b506040805190810160405280600381526020017f414e490000000000000000000000000000000000000000000000000000000000815250600390805190602001906200009f929190620000e6565b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000195565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200012957805160ff19168380011785556200015a565b828001600101855582156200015a579182015b82811115620001595782518255916020019190600101906200013c565b5b5090506200016991906200016d565b5090565b6200019291905b808211156200018e57600081600090555060010162000174565b5090565b90565b611d5780620001a56000396000f300608060405260043610610128576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461012d578063095ea7b3146101bd5780630c3795201461020a57806318160ddd1461025357806323b872dd1461027e57806336363d14146102eb5780636352211e1461033257806370a082311461039f5780638da5cb5b146103f657806395d89b411461044d578063998dd3ca146104dd5780639af636e514610551578063a9059cbb146105e9578063af17dea614610636578063b2e6ceeb146106c6578063d81c513a146106f3578063e2b9e18614610760578063e52cfe58146107f0578063ea7cabdd14610839578063ecaf39b0146108d7578063f2fde38b146108e1578063f34674d614610924575b600080fd5b34801561013957600080fd5b5061014261096d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610182578082015181840152602081019050610167565b50505050905090810190601f1680156101af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101c957600080fd5b50610208600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a0f565b005b34801561021657600080fd5b5061023560048036038101908080359060200190929190505050610b2d565b60405180826000191660001916815260200191505060405180910390f35b34801561025f57600080fd5b50610268610b57565b6040518082815260200191505060405180910390f35b34801561028a57600080fd5b506102e9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b64565b005b3480156102f757600080fd5b5061031660048036038101908080359060200190929190505050610daf565b604051808260ff1660ff16815260200191505060405180910390f35b34801561033e57600080fd5b5061035d60048036038101908080359060200190929190505050610de6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ab57600080fd5b506103e0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e23565b6040518082815260200191505060405180910390f35b34801561040257600080fd5b5061040b610e6c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045957600080fd5b50610462610e91565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104a2578082015181840152602081019050610487565b50505050905090810190601f1680156104cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104e957600080fd5b5061050860048036038101908080359060200190929190505050610f33565b6040518085600019166000191681526020018460ff1660ff1681526020018361ffff1661ffff1681526020018261ffff1661ffff16815260200194505050505060405180910390f35b34801561055d57600080fd5b50610592600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f9b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156105d55780820151818401526020810190506105ba565b505050509050019250505060405180910390f35b3480156105f557600080fd5b50610634600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110cd565b005b34801561064257600080fd5b5061064b611317565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561068b578082015181840152602081019050610670565b50505050905090810190601f1680156106b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156106d257600080fd5b506106f1600480360381019080803590602001909291905050506113b5565b005b3480156106ff57600080fd5b5061071e60048036038101908080359060200190929190505050611650565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076c57600080fd5b50610775611683565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107b557808201518184015260208101905061079a565b50505050905090810190601f1680156107e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107fc57600080fd5b5061081b60048036038101908080359060200190929190505050611721565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561084557600080fd5b506108bd60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611759565b604051808215151515815260200191505060405180910390f35b6108df61180b565b005b3480156108ed57600080fd5b50610922600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a47565b005b34801561093057600080fd5b5061094f60048036038101908080359060200190929190505050611b9c565b604051808261ffff1661ffff16815260200191505060405180910390f35b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a055780601f106109da57610100808354040283529160200191610a05565b820191906000526020600020905b8154815290600101906020018083116109e857829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610a7c57600080fd5b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000600282815481101515610b3e57fe5b9060005260206000209060020201600001549050919050565b6000600280549050905090565b3373ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610bd157600080fd5b610c246001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bd490919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cba6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf290919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600282815481101515610dc057fe5b906000526020600020906002020160010160009054906101000a900460ff169050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f295780601f10610efe57610100808354040283529160200191610f29565b820191906000526020600020905b815481529060010190602001808311610f0c57829003601f168201915b5050505050905090565b600281815481101515610f4257fe5b90600052602060002090600202016000915090508060000154908060010160009054906101000a900460ff16908060010160019054906101000a900461ffff16908060010160039054906101000a900461ffff16905084565b606080600080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405190808252806020026020018201604052801561100f5781602001602082028038833980820191505090505b50925060009150600090505b6002805490508110156110c2578473ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110b55780838381518110151561109e57fe5b906020019060200201818152505081806001019250505b808060010191505061101b565b829350505050919050565b3373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561113a57600080fd5b61118d6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bd490919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112236001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf290919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113ad5780601f10611382576101008083540402835291602001916113ad565b820191906000526020600020905b81548152906001019060200180831161139057829003601f168201915b505050505081565b60003373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561142457600080fd5b61142d82610de6565b90506114826001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bd490919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115186001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf290919063ffffffff16565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550336004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f9bbd814328e65758b36306475bbc61410445dd088c88681ed74c940dc604db1a338284604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117195780601f106116ee57610100808354040283529160200191611719565b820191906000526020600020905b8154815290600101906020018083116116fc57829003601f168201915b505050505081565b600060028281548110151561173257fe5b906000526020600020906002020160010160039054906101000a900461ffff169050919050565b600080600090505b83518110156117ff5760046000858381518110151561177c57fe5b90602001906020020151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415156117f25760009150611804565b8080600101915050611761565b600191505b5092915050565b60008060008060008061181c611c0b565b95506064611828611c0b565b6001900481151561183557fe5b069150602882101561184a5760019450611875565b604182101561185c5760039450611874565b605f82101561186e5760049450611873565b600594505b5b5b60016004611881611c0b565b6001900481151561188e57fe5b060193506103e861189d611c0b565b600190048115156118aa57fe5b0692506064341415156118bc57600080fd5b60016002608060405190810160405280896000191681526020018860ff1681526020018760ff1661ffff1681526020018660ff1661ffff16815250908060018154018082558091505090600182039060005260206000209060020201600090919290919091506000820151816000019060001916905560208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160010160016101000a81548161ffff021916908361ffff16021790555060608201518160010160036101000a81548161ffff021916908361ffff1602179055505050039050336004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611aa257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611ade57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600282815481101515611bad57fe5b906000526020600020906002020160010160019054906101000a900461ffff169050919050565b6000808284019050838110151515611be857fe5b8091505092915050565b6000828211151515611c0057fe5b818303905092915050565b60008041600143034033604051602001808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040526040518082805190602001908083835b602083101515611cf55780518252602082019150602081019050602083039250611cd0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905080915050905600a165627a7a72305820440f0e0e976c0898ae07a4e2d4615fe8c77adc2eaf07d8b9b41e6717d93b09980029