0x60806040526004361061026b5760003560e01c80639770393611610144578063d1d7d7ef116100b6578063e0bf7fd11161007a578063e0bf7fd1146107ae578063f1f3bca3146107de578063f2fde38b146107fe578063f887ea401461081e578063f951212e1461083e578063fabb0b4f1461085e57600080fd5b8063d1d7d7ef146106b7578063d2138a6d146106e7578063db8d55f114610707578063dd62ed3e14610748578063df20fd491461078e57600080fd5b8063aaa867a011610108578063aaa867a014610601578063adf1869314610621578063bf56b37114610641578063c851cc3214610657578063cbf9b84b14610677578063d16336491461069757600080fd5b806397703936146105615780639f5bf42514610581578063a4b45c00146105a1578063a8aa1b31146105c1578063a9059cbb146105e157600080fd5b8063571ac8b0116101dd57806370a08231116101a157806370a0823114610493578063715018a6146104c957806375f0a874146104de578063893d20e8146105165780638da5cb5b1461051657806395d89b411461053457600080fd5b8063571ac8b0146103fd5780635d0044ca1461041d57806365acb9a91461043d57806366eb37851461045d5780636ddd17131461047257600080fd5b8063129951b11161022f578063129951b11461034b57806318160ddd1461036d57806323b872dd146103825780632b112e49146103a2578063313ce567146103b75780633b9a30a1146103d357600080fd5b80630445b6671461027757806306fdde03146102a057806307866291146102d6578063095ea7b3146103165780630fa604e41461033657600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028d60125481565b6040519081526020015b60405180910390f35b3480156102ac57600080fd5b50604080518082019091526004815263446f706560e01b60208201525b6040516102979190611f10565b3480156102e257600080fd5b506103066102f1366004611f76565b600a6020526000908152604090205460ff1681565b6040519015158152602001610297565b34801561032257600080fd5b50610306610331366004611f93565b610874565b34801561034257600080fd5b5061028d6108e1565b34801561035757600080fd5b5061036b610366366004611fcd565b610901565b005b34801561037957600080fd5b5060035461028d565b34801561038e57600080fd5b5061030661039d36600461202b565b610a3e565b3480156103ae57600080fd5b5061028d610ad3565b3480156103c357600080fd5b5060405160128152602001610297565b3480156103df57600080fd5b506103e8610b14565b60408051928352602083019190915201610297565b34801561040957600080fd5b50610306610418366004611f76565b610b51565b34801561042957600080fd5b5061036b61043836600461206c565b610b5f565b34801561044957600080fd5b5061036b610458366004612085565b610c3c565b34801561046957600080fd5b5061036b610d49565b34801561047e57600080fd5b50601b54610306906301000000900460ff1681565b34801561049f57600080fd5b5061028d6104ae366004611f76565b6001600160a01b031660009081526007602052604090205490565b3480156104d557600080fd5b5061036b610d7d565b3480156104ea57600080fd5b506014546104fe906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b34801561052257600080fd5b506000546001600160a01b03166104fe565b34801561054057600080fd5b50604080518082019091526004815263444f504560e01b60208201526102c9565b34801561056d57600080fd5b506013546104fe906001600160a01b031681565b34801561058d57600080fd5b5061036b61059c3660046120a7565b610df1565b3480156105ad57600080fd5b5061036b6105bc3660046120d7565b610f21565b3480156105cd57600080fd5b506018546104fe906001600160a01b031681565b3480156105ed57600080fd5b506103066105fc366004611f93565b610fb3565b34801561060d57600080fd5b5061036b61061c366004612105565b610fc0565b34801561062d57600080fd5b5061036b61063c366004612105565b611042565b34801561064d57600080fd5b5061028d60195481565b34801561066357600080fd5b5061036b610672366004611f76565b6110c4565b34801561068357600080fd5b5061036b6106923660046120a7565b611138565b3480156106a357600080fd5b5061036b6106b236600461206c565b6111b4565b3480156106c357600080fd5b506103066106d2366004611f76565b600b6020526000908152604090205460ff1681565b3480156106f357600080fd5b5061036b610702366004612105565b61122d565b34801561071357600080fd5b50600c54600d54600f546010546040805194855260208501939093529183015260608201526103e8608082015260a001610297565b34801561075457600080fd5b5061028d6107633660046120d7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561079a57600080fd5b5061036b6107a9366004612133565b6112af565b3480156107ba57600080fd5b506103066107c9366004611f76565b60096020526000908152604090205460ff1681565b3480156107ea57600080fd5b5061028d6107f9366004612151565b611363565b34801561080a57600080fd5b5061036b610819366004611f76565b61139e565b34801561082a57600080fd5b506015546104fe906001600160a01b031681565b34801561084a57600080fd5b5061036b610859366004612105565b611488565b34801561086a57600080fd5b5061028d601a5481565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108cf9086815260200190565b60405180910390a35060015b92915050565b60006108ef6012600a612268565b6006546108fc9190612277565b905090565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161092b90612299565b60405180910390fd5b600d859055600c86905561094885876122ce565b600e556010839055600f86905561095f83856122ce565b6011819055601b805462ffff0019166101008515150262ff00001916176201000084151502179055600e5460fa91610996916122ce565b11156109e55760405163344f058b60e11b815260206004820181905260248201527f546f74616c2066656573206d757374206265206c6f776572207468616e203235604482015260640161092b565b600c54600d54600f546010546040805194855260208501939093529183015260608201527f5c3aee3d65f7eb02cded951435d06b06ef307bc7f57b98975c4a41dc116e711c9060800160405180910390a1505050505050565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610abe576001600160a01b0384166000908152600860209081526040808320338452909152902054610a999083906122e1565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610ac9848484611565565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610b07916122ce565b6003546108fc91906122e1565b600080610b236012600a612268565b600454610b309190612277565b610b3c6012600a612268565b600554610b499190612277565b915091509091565b60006108db82600019610874565b6000546001600160a01b03163314610b895760405162461bcd60e51b815260040161092b90612299565b801580610b96575060c881115b15610bf357604051631f3ab60b60e31b815260206004820152602660248201527f4d61782077616c6c6574206d757374206265203e20302e352520746f74616c20604482015265737570706c7960d01b606482015260840161092b565b80600354610c019190612277565b60068190556040519081527fdd4ef051c4c49233ec73abfc2ee1514725d2a818fbcde46ee5d34a49034922f99060200160405180910390a150565b6000546001600160a01b03163314610c665760405162461bcd60e51b815260040161092b90612299565b801580610c73575060c882115b80610c7c575081155b80610c87575060c881115b15610ce0576040516316a844b960e31b815260206004820152602260248201527f4d6178205478206d757374206265203e20302e352520746f74616c20737570706044820152616c7960f01b606482015260840161092b565b81600354610cee9190612277565b600455600354610cff908290612277565b60058190556004546040517fa4a0c48c7ad1c3f2f625f4aa3fad8cc71425ca0146c7eb495b494886c8317e9092610d3d928252602082015260400190565b60405180910390a15050565b6000546001600160a01b03163314610d735760405162461bcd60e51b815260040161092b90612299565b610d7b6118f1565b565b6000546001600160a01b03163314610da75760405162461bcd60e51b815260040161092b90612299565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610e1b5760405162461bcd60e51b815260040161092b90612299565b6040516370a0823160e01b8152306004820152819060009060649085906001600160a01b038516906370a0823190602401602060405180830381865afa158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d91906122f4565b610e97919061230d565b610ea19190612277565b60145460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af1158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a9190612324565b5050505050565b6000546001600160a01b03163314610f4b5760405162461bcd60e51b815260040161092b90612299565b601380546001600160a01b038481166001600160a01b03199283168117909355601480549185169190921681179091556040519081527f3a8707a38eb82a54cc7e314a4f6a1b57f8728dea75f05950a9310f71f4068a57906020015b60405180910390a25050565b6000610acc338484611565565b6000546001600160a01b03163314610fea5760405162461bcd60e51b815260040161092b90612299565b6001600160a01b0382166000818152600b6020908152604091829020805460ff191685151590811790915591519182527f9f7d06cb9b03b01b6fb89199a37bd0825030434f6a9f909100d20dfeeb4770879101610fa7565b6000546001600160a01b0316331461106c5760405162461bcd60e51b815260040161092b90612299565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527f16789932756b3e9ad3678ce73d5dccbe519b382cda6ac6ae21909510c316a2f39101610fa7565b6000546001600160a01b031633146110ee5760405162461bcd60e51b815260040161092b90612299565b601580546001600160a01b0319166001600160a01b0383169081179091556040517fd5f5b4d616f94f5e10b2955392470790b3fdde7c0c0b68bd1f3ea635e2caa8d790600090a250565b6000546001600160a01b031633146111625760405162461bcd60e51b815260040161092b90612299565b476001600160a01b0382166108fc606461117c868561230d565b6111869190612277565b6040518115909202916000818181858888f193505050501580156111ae573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146111de5760405162461bcd60e51b815260040161092b90612299565b601b5460ff16806111ef5750600a81115b1561120c57604051621ef9a960e21b815260040160405180910390fd5b601b8054601a9290925563ff0000ff19909116630100000117905543601955565b6000546001600160a01b031633146112575760405162461bcd60e51b815260040161092b90612299565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527f65b985db66ed938ec9e38480d030ac6a175ffe7aaf389975ae0c333ca002d3539101610fa7565b6000546001600160a01b031633146112d95760405162461bcd60e51b815260040161092b90612299565b60648110806112e9575061271081115b15611337576040516310e59e8d60e11b815260206004820152601f60248201527f4d6178207468726573686f64203125202c206d696e696e756d20302e30312500604482015260640161092b565b601b805463ff000000191663010000008415150217905560035461135c908290612277565b6012555050565b600043601a5460195461137691906122ce565b10611388576108db60016103e86122e1565b811561139657505060115490565b5050600e5490565b6000546001600160a01b031633146113c85760405162461bcd60e51b815260040161092b90612299565b6001600160a01b03811661142d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114b25760405162461bcd60e51b815260040161092b90612299565b6001600160a01b0382166000908152601760205260409020805460ff19168215801591909117909155611507576001600160a01b0382166000908152600960205260409020805460ff19166001179055611528565b6001600160a01b0382166000908152600960205260409020805460ff191690555b816001600160a01b03167fb1e99c778afe37c48795fa4ca546217351f2f8f668639c904f7f3a1697dfd45e82604051610fa7911515815260200190565b60006001600160a01b0384166115be576040516341b02f3b60e01b815260206004820152601860248201527f45524332303a207472616e736665722066726f6d203078300000000000000000604482015260640161092b565b6000821161160f5760405163ecb60f7760e01b815260206004820152601a60248201527f416d6f756e74206d757374206265206d6f7265207468616e2030000000000000604482015260640161092b565b6001600160a01b03841660009081526007602052604090205482111561164857604051631e9acf1760e31b815260040160405180910390fd5b601b54640100000000900460ff166118e6576000546001600160a01b0385811691161480159061167b5750601b5460ff16155b156116c1576040516341b02f3b60e01b81526020600482015260156024820152742a3930b234b733903737ba1037b832b7103cb2ba1760591b604482015260640161092b565b6116cc848484611c4e565b6001600160a01b0380841660009081526017602052604080822054928716825290205460ff918216911680156117da576117068585611d59565b6001600160a01b03851660009081526009602052604090205460ff161580156117365750601b54610100900460ff165b156117d55760006103e861174a8315611363565b611754908761230d565b61175e9190612277565b905061176a81866122e1565b3060009081526007602052604081208054929750839290919061178e9084906122ce565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b6118d9565b81156118d9576001600160a01b03861660009081526009602052604090205460ff161580156118115750601b5462010000900460ff165b156118af5760006103e861182484611363565b61182e908761230d565b6118389190612277565b905061184481866122e1565b306000908152600760205260408120805492975083929091906118689084906122ce565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b6118b882611deb565b156118c5576118c56118f1565b6118d0868686611e56565b92505050610acc565b6118e38585611d59565b50505b610ac9848484611e56565b601b805464ff000000001916640100000000179055601254306000908152600760205260409020548111156119325750306000908152600760205260409020545b6000601154600260105484611947919061230d565b6119519190612277565b61195b9190612277565b905061196781836122e1565b604080516002808252606082018352929450600092909160208301908036833701905050905030816000815181106119a1576119a1612341565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612357565b81600181518110611a3157611a31612341565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b81524792919091169063791ac94790611a7b908790600090879030904290600401612374565b600060405180830381600087803b158015611a9557600080fd5b505af1158015611aa9573d6000803e3d6000fd5b5050505060008147611abb91906122e1565b905060006002601054611ace9190612277565b601154611adb91906122e1565b9050600081600260105485611af0919061230d565b611afa9190612277565b611b049190612277565b90506000611b1282856122e1565b90508015611b56576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611b54573d6000803e3d6000fd5b505b8615611bf55760155460135460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990849060c40160606040518083038185885af1158015611bcc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bf191906123e5565b5050505b60408051828152602081018490529081018890527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a15050601b805464ff0000000019169055505050505050565b6001600160a01b0383166000908152600a602052604090205460ff16611d545760045481118015611c9757506001600160a01b03831660009081526017602052604090205460ff165b15611cdd576040516341b02f3b60e01b8152602060048201526015602482015274109d5e48151608131a5b5a5d08115e18d959591959605a1b604482015260640161092b565b60055481118015611d0657506001600160a01b03821660009081526017602052604090205460ff165b15611d54576040516341b02f3b60e01b815260206004820152601760248201527f53656c6c205458204c6974696d74204578636565646564000000000000000000604482015260640161092b565b505050565b6001600160a01b0382166000908152600b602052604090205460ff16611de7576006546001600160a01b0383166000908152600760205260409020548190611da29084906122ce565b1115611d54576040516341b02f3b60e01b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b604482015260640161092b565b5050565b3360009081526017602052604081205460ff16158015611e165750601b54640100000000900460ff16155b8015611e2b5750601b546301000000900460ff165b8015611e345750815b80156108db575060125430600090815260076020526040902054101592915050565b6001600160a01b038316600090815260076020526040812054611e7a9083906122e1565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611eaa9083906122ce565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611efe9086815260200190565b60405180910390a35060019392505050565b600060208083528351808285015260005b81811015611f3d57858101830151858201604001528201611f21565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611f7357600080fd5b50565b600060208284031215611f8857600080fd5b8135610acc81611f5e565b60008060408385031215611fa657600080fd5b8235611fb181611f5e565b946020939093013593505050565b8015158114611f7357600080fd5b60008060008060008060c08789031215611fe657600080fd5b86359550602087013594506040870135935060608701359250608087013561200d81611fbf565b915060a087013561201d81611fbf565b809150509295509295509295565b60008060006060848603121561204057600080fd5b833561204b81611f5e565b9250602084013561205b81611f5e565b929592945050506040919091013590565b60006020828403121561207e57600080fd5b5035919050565b6000806040838503121561209857600080fd5b50508035926020909101359150565b600080604083850312156120ba57600080fd5b8235915060208301356120cc81611f5e565b809150509250929050565b600080604083850312156120ea57600080fd5b82356120f581611f5e565b915060208301356120cc81611f5e565b6000806040838503121561211857600080fd5b823561212381611f5e565b915060208301356120cc81611fbf565b6000806040838503121561214657600080fd5b8235611fb181611fbf565b60006020828403121561216357600080fd5b8135610acc81611fbf565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156121bf5781600019048211156121a5576121a561216e565b808516156121b257918102915b93841c9390800290612189565b509250929050565b6000826121d6575060016108db565b816121e3575060006108db565b81600181146121f957600281146122035761221f565b60019150506108db565b60ff8411156122145761221461216e565b50506001821b6108db565b5060208310610133831016604e8410600b8410161715612242575081810a6108db565b61224c8383612184565b80600019048211156122605761226061216e565b029392505050565b6000610acc60ff8416836121c7565b60008261229457634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b808201808211156108db576108db61216e565b818103818111156108db576108db61216e565b60006020828403121561230657600080fd5b5051919050565b80820281158282048414176108db576108db61216e565b60006020828403121561233657600080fd5b8151610acc81611fbf565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561236957600080fd5b8151610acc81611f5e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123c45784516001600160a01b03168352938301939183019160010161239f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156123fa57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122009d486cbfe1889548d2c69830a84150bde3403ed624ab8cc5ad49536acc6b48064736f6c63430008110033
0x6080604052600180546001600160a01b031990811661dead17909155600280549091169055620000326012600a620005a9565b6200004290633b9aca00620005c1565b6003556032600354620000569190620005db565b60045560646003546200006a9190620005db565b60055560326003546200007e9190620005db565b6006556032600c8190556014600d8190556200009a91620005fe565b600e556032600f81905560146010819055620000b691620005fe565b60115560c8600354620000ca9190620005db565b601255601380546001600160a01b031990811673050c5ccd4c8c254e84f7dd1d57a76f8acddc6dd990811790925560148054821690921790915560168054909116737a250d5630b4cf539739df2c5dacb4c659f2488d179055601b805463ffffffff1916620101001790553480156200014257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601654601580546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000207919062000614565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000269573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028f919062000614565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000302919062000614565b601880546001600160a01b0319166001600160a01b039290921691821790556000908152601760205260408120805460ff1916600117905560001990600890620003546000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120601680548416835290855283822095909555308082526008855283822086548416835285528382206000199055815483168252600985528382208054600160ff1991821681179092558284528584208054821683179055601880548616855286852080548316841790555485168452600b8752858420805482168317905581548516845285842080548216831790559183528483208054831682179055600a86528483208054831682179055825484168352848320805483168217905595548316825283822080549091169095179094556003548454821685526007845282852081905584549251908152911692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36200063f565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004eb578160001904821115620004cf57620004cf62000494565b80851615620004dd57918102915b93841c9390800290620004af565b509250929050565b6000826200050457506001620005a3565b816200051357506000620005a3565b81600181146200052c5760028114620005375762000557565b6001915050620005a3565b60ff8411156200054b576200054b62000494565b50506001821b620005a3565b5060208310610133831016604e8410600b84101617156200057c575081810a620005a3565b620005888383620004aa565b80600019048211156200059f576200059f62000494565b0290505b92915050565b6000620005ba60ff841683620004f3565b9392505050565b8082028115828204841417620005a357620005a362000494565b600082620005f957634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005a357620005a362000494565b6000602082840312156200062757600080fd5b81516001600160a01b0381168114620005ba57600080fd5b612449806200064f6000396000f3fe60806040526004361061026b5760003560e01c80639770393611610144578063d1d7d7ef116100b6578063e0bf7fd11161007a578063e0bf7fd1146107ae578063f1f3bca3146107de578063f2fde38b146107fe578063f887ea401461081e578063f951212e1461083e578063fabb0b4f1461085e57600080fd5b8063d1d7d7ef146106b7578063d2138a6d146106e7578063db8d55f114610707578063dd62ed3e14610748578063df20fd491461078e57600080fd5b8063aaa867a011610108578063aaa867a014610601578063adf1869314610621578063bf56b37114610641578063c851cc3214610657578063cbf9b84b14610677578063d16336491461069757600080fd5b806397703936146105615780639f5bf42514610581578063a4b45c00146105a1578063a8aa1b31146105c1578063a9059cbb146105e157600080fd5b8063571ac8b0116101dd57806370a08231116101a157806370a0823114610493578063715018a6146104c957806375f0a874146104de578063893d20e8146105165780638da5cb5b1461051657806395d89b411461053457600080fd5b8063571ac8b0146103fd5780635d0044ca1461041d57806365acb9a91461043d57806366eb37851461045d5780636ddd17131461047257600080fd5b8063129951b11161022f578063129951b11461034b57806318160ddd1461036d57806323b872dd146103825780632b112e49146103a2578063313ce567146103b75780633b9a30a1146103d357600080fd5b80630445b6671461027757806306fdde03146102a057806307866291146102d6578063095ea7b3146103165780630fa604e41461033657600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028d60125481565b6040519081526020015b60405180910390f35b3480156102ac57600080fd5b50604080518082019091526004815263446f706560e01b60208201525b6040516102979190611f10565b3480156102e257600080fd5b506103066102f1366004611f76565b600a6020526000908152604090205460ff1681565b6040519015158152602001610297565b34801561032257600080fd5b50610306610331366004611f93565b610874565b34801561034257600080fd5b5061028d6108e1565b34801561035757600080fd5b5061036b610366366004611fcd565b610901565b005b34801561037957600080fd5b5060035461028d565b34801561038e57600080fd5b5061030661039d36600461202b565b610a3e565b3480156103ae57600080fd5b5061028d610ad3565b3480156103c357600080fd5b5060405160128152602001610297565b3480156103df57600080fd5b506103e8610b14565b60408051928352602083019190915201610297565b34801561040957600080fd5b50610306610418366004611f76565b610b51565b34801561042957600080fd5b5061036b61043836600461206c565b610b5f565b34801561044957600080fd5b5061036b610458366004612085565b610c3c565b34801561046957600080fd5b5061036b610d49565b34801561047e57600080fd5b50601b54610306906301000000900460ff1681565b34801561049f57600080fd5b5061028d6104ae366004611f76565b6001600160a01b031660009081526007602052604090205490565b3480156104d557600080fd5b5061036b610d7d565b3480156104ea57600080fd5b506014546104fe906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b34801561052257600080fd5b506000546001600160a01b03166104fe565b34801561054057600080fd5b50604080518082019091526004815263444f504560e01b60208201526102c9565b34801561056d57600080fd5b506013546104fe906001600160a01b031681565b34801561058d57600080fd5b5061036b61059c3660046120a7565b610df1565b3480156105ad57600080fd5b5061036b6105bc3660046120d7565b610f21565b3480156105cd57600080fd5b506018546104fe906001600160a01b031681565b3480156105ed57600080fd5b506103066105fc366004611f93565b610fb3565b34801561060d57600080fd5b5061036b61061c366004612105565b610fc0565b34801561062d57600080fd5b5061036b61063c366004612105565b611042565b34801561064d57600080fd5b5061028d60195481565b34801561066357600080fd5b5061036b610672366004611f76565b6110c4565b34801561068357600080fd5b5061036b6106923660046120a7565b611138565b3480156106a357600080fd5b5061036b6106b236600461206c565b6111b4565b3480156106c357600080fd5b506103066106d2366004611f76565b600b6020526000908152604090205460ff1681565b3480156106f357600080fd5b5061036b610702366004612105565b61122d565b34801561071357600080fd5b50600c54600d54600f546010546040805194855260208501939093529183015260608201526103e8608082015260a001610297565b34801561075457600080fd5b5061028d6107633660046120d7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561079a57600080fd5b5061036b6107a9366004612133565b6112af565b3480156107ba57600080fd5b506103066107c9366004611f76565b60096020526000908152604090205460ff1681565b3480156107ea57600080fd5b5061028d6107f9366004612151565b611363565b34801561080a57600080fd5b5061036b610819366004611f76565b61139e565b34801561082a57600080fd5b506015546104fe906001600160a01b031681565b34801561084a57600080fd5b5061036b610859366004612105565b611488565b34801561086a57600080fd5b5061028d601a5481565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108cf9086815260200190565b60405180910390a35060015b92915050565b60006108ef6012600a612268565b6006546108fc9190612277565b905090565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161092b90612299565b60405180910390fd5b600d859055600c86905561094885876122ce565b600e556010839055600f86905561095f83856122ce565b6011819055601b805462ffff0019166101008515150262ff00001916176201000084151502179055600e5460fa91610996916122ce565b11156109e55760405163344f058b60e11b815260206004820181905260248201527f546f74616c2066656573206d757374206265206c6f776572207468616e203235604482015260640161092b565b600c54600d54600f546010546040805194855260208501939093529183015260608201527f5c3aee3d65f7eb02cded951435d06b06ef307bc7f57b98975c4a41dc116e711c9060800160405180910390a1505050505050565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610abe576001600160a01b0384166000908152600860209081526040808320338452909152902054610a999083906122e1565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610ac9848484611565565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610b07916122ce565b6003546108fc91906122e1565b600080610b236012600a612268565b600454610b309190612277565b610b3c6012600a612268565b600554610b499190612277565b915091509091565b60006108db82600019610874565b6000546001600160a01b03163314610b895760405162461bcd60e51b815260040161092b90612299565b801580610b96575060c881115b15610bf357604051631f3ab60b60e31b815260206004820152602660248201527f4d61782077616c6c6574206d757374206265203e20302e352520746f74616c20604482015265737570706c7960d01b606482015260840161092b565b80600354610c019190612277565b60068190556040519081527fdd4ef051c4c49233ec73abfc2ee1514725d2a818fbcde46ee5d34a49034922f99060200160405180910390a150565b6000546001600160a01b03163314610c665760405162461bcd60e51b815260040161092b90612299565b801580610c73575060c882115b80610c7c575081155b80610c87575060c881115b15610ce0576040516316a844b960e31b815260206004820152602260248201527f4d6178205478206d757374206265203e20302e352520746f74616c20737570706044820152616c7960f01b606482015260840161092b565b81600354610cee9190612277565b600455600354610cff908290612277565b60058190556004546040517fa4a0c48c7ad1c3f2f625f4aa3fad8cc71425ca0146c7eb495b494886c8317e9092610d3d928252602082015260400190565b60405180910390a15050565b6000546001600160a01b03163314610d735760405162461bcd60e51b815260040161092b90612299565b610d7b6118f1565b565b6000546001600160a01b03163314610da75760405162461bcd60e51b815260040161092b90612299565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610e1b5760405162461bcd60e51b815260040161092b90612299565b6040516370a0823160e01b8152306004820152819060009060649085906001600160a01b038516906370a0823190602401602060405180830381865afa158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d91906122f4565b610e97919061230d565b610ea19190612277565b60145460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af1158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a9190612324565b5050505050565b6000546001600160a01b03163314610f4b5760405162461bcd60e51b815260040161092b90612299565b601380546001600160a01b038481166001600160a01b03199283168117909355601480549185169190921681179091556040519081527f3a8707a38eb82a54cc7e314a4f6a1b57f8728dea75f05950a9310f71f4068a57906020015b60405180910390a25050565b6000610acc338484611565565b6000546001600160a01b03163314610fea5760405162461bcd60e51b815260040161092b90612299565b6001600160a01b0382166000818152600b6020908152604091829020805460ff191685151590811790915591519182527f9f7d06cb9b03b01b6fb89199a37bd0825030434f6a9f909100d20dfeeb4770879101610fa7565b6000546001600160a01b0316331461106c5760405162461bcd60e51b815260040161092b90612299565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527f16789932756b3e9ad3678ce73d5dccbe519b382cda6ac6ae21909510c316a2f39101610fa7565b6000546001600160a01b031633146110ee5760405162461bcd60e51b815260040161092b90612299565b601580546001600160a01b0319166001600160a01b0383169081179091556040517fd5f5b4d616f94f5e10b2955392470790b3fdde7c0c0b68bd1f3ea635e2caa8d790600090a250565b6000546001600160a01b031633146111625760405162461bcd60e51b815260040161092b90612299565b476001600160a01b0382166108fc606461117c868561230d565b6111869190612277565b6040518115909202916000818181858888f193505050501580156111ae573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146111de5760405162461bcd60e51b815260040161092b90612299565b601b5460ff16806111ef5750600a81115b1561120c57604051621ef9a960e21b815260040160405180910390fd5b601b8054601a9290925563ff0000ff19909116630100000117905543601955565b6000546001600160a01b031633146112575760405162461bcd60e51b815260040161092b90612299565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527f65b985db66ed938ec9e38480d030ac6a175ffe7aaf389975ae0c333ca002d3539101610fa7565b6000546001600160a01b031633146112d95760405162461bcd60e51b815260040161092b90612299565b60648110806112e9575061271081115b15611337576040516310e59e8d60e11b815260206004820152601f60248201527f4d6178207468726573686f64203125202c206d696e696e756d20302e30312500604482015260640161092b565b601b805463ff000000191663010000008415150217905560035461135c908290612277565b6012555050565b600043601a5460195461137691906122ce565b10611388576108db60016103e86122e1565b811561139657505060115490565b5050600e5490565b6000546001600160a01b031633146113c85760405162461bcd60e51b815260040161092b90612299565b6001600160a01b03811661142d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114b25760405162461bcd60e51b815260040161092b90612299565b6001600160a01b0382166000908152601760205260409020805460ff19168215801591909117909155611507576001600160a01b0382166000908152600960205260409020805460ff19166001179055611528565b6001600160a01b0382166000908152600960205260409020805460ff191690555b816001600160a01b03167fb1e99c778afe37c48795fa4ca546217351f2f8f668639c904f7f3a1697dfd45e82604051610fa7911515815260200190565b60006001600160a01b0384166115be576040516341b02f3b60e01b815260206004820152601860248201527f45524332303a207472616e736665722066726f6d203078300000000000000000604482015260640161092b565b6000821161160f5760405163ecb60f7760e01b815260206004820152601a60248201527f416d6f756e74206d757374206265206d6f7265207468616e2030000000000000604482015260640161092b565b6001600160a01b03841660009081526007602052604090205482111561164857604051631e9acf1760e31b815260040160405180910390fd5b601b54640100000000900460ff166118e6576000546001600160a01b0385811691161480159061167b5750601b5460ff16155b156116c1576040516341b02f3b60e01b81526020600482015260156024820152742a3930b234b733903737ba1037b832b7103cb2ba1760591b604482015260640161092b565b6116cc848484611c4e565b6001600160a01b0380841660009081526017602052604080822054928716825290205460ff918216911680156117da576117068585611d59565b6001600160a01b03851660009081526009602052604090205460ff161580156117365750601b54610100900460ff165b156117d55760006103e861174a8315611363565b611754908761230d565b61175e9190612277565b905061176a81866122e1565b3060009081526007602052604081208054929750839290919061178e9084906122ce565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b6118d9565b81156118d9576001600160a01b03861660009081526009602052604090205460ff161580156118115750601b5462010000900460ff165b156118af5760006103e861182484611363565b61182e908761230d565b6118389190612277565b905061184481866122e1565b306000908152600760205260408120805492975083929091906118689084906122ce565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b6118b882611deb565b156118c5576118c56118f1565b6118d0868686611e56565b92505050610acc565b6118e38585611d59565b50505b610ac9848484611e56565b601b805464ff000000001916640100000000179055601254306000908152600760205260409020548111156119325750306000908152600760205260409020545b6000601154600260105484611947919061230d565b6119519190612277565b61195b9190612277565b905061196781836122e1565b604080516002808252606082018352929450600092909160208301908036833701905050905030816000815181106119a1576119a1612341565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612357565b81600181518110611a3157611a31612341565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b81524792919091169063791ac94790611a7b908790600090879030904290600401612374565b600060405180830381600087803b158015611a9557600080fd5b505af1158015611aa9573d6000803e3d6000fd5b5050505060008147611abb91906122e1565b905060006002601054611ace9190612277565b601154611adb91906122e1565b9050600081600260105485611af0919061230d565b611afa9190612277565b611b049190612277565b90506000611b1282856122e1565b90508015611b56576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611b54573d6000803e3d6000fd5b505b8615611bf55760155460135460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990849060c40160606040518083038185885af1158015611bcc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bf191906123e5565b5050505b60408051828152602081018490529081018890527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a15050601b805464ff0000000019169055505050505050565b6001600160a01b0383166000908152600a602052604090205460ff16611d545760045481118015611c9757506001600160a01b03831660009081526017602052604090205460ff165b15611cdd576040516341b02f3b60e01b8152602060048201526015602482015274109d5e48151608131a5b5a5d08115e18d959591959605a1b604482015260640161092b565b60055481118015611d0657506001600160a01b03821660009081526017602052604090205460ff165b15611d54576040516341b02f3b60e01b815260206004820152601760248201527f53656c6c205458204c6974696d74204578636565646564000000000000000000604482015260640161092b565b505050565b6001600160a01b0382166000908152600b602052604090205460ff16611de7576006546001600160a01b0383166000908152600760205260409020548190611da29084906122ce565b1115611d54576040516341b02f3b60e01b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b604482015260640161092b565b5050565b3360009081526017602052604081205460ff16158015611e165750601b54640100000000900460ff16155b8015611e2b5750601b546301000000900460ff165b8015611e345750815b80156108db575060125430600090815260076020526040902054101592915050565b6001600160a01b038316600090815260076020526040812054611e7a9083906122e1565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611eaa9083906122ce565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611efe9086815260200190565b60405180910390a35060019392505050565b600060208083528351808285015260005b81811015611f3d57858101830151858201604001528201611f21565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611f7357600080fd5b50565b600060208284031215611f8857600080fd5b8135610acc81611f5e565b60008060408385031215611fa657600080fd5b8235611fb181611f5e565b946020939093013593505050565b8015158114611f7357600080fd5b60008060008060008060c08789031215611fe657600080fd5b86359550602087013594506040870135935060608701359250608087013561200d81611fbf565b915060a087013561201d81611fbf565b809150509295509295509295565b60008060006060848603121561204057600080fd5b833561204b81611f5e565b9250602084013561205b81611f5e565b929592945050506040919091013590565b60006020828403121561207e57600080fd5b5035919050565b6000806040838503121561209857600080fd5b50508035926020909101359150565b600080604083850312156120ba57600080fd5b8235915060208301356120cc81611f5e565b809150509250929050565b600080604083850312156120ea57600080fd5b82356120f581611f5e565b915060208301356120cc81611f5e565b6000806040838503121561211857600080fd5b823561212381611f5e565b915060208301356120cc81611fbf565b6000806040838503121561214657600080fd5b8235611fb181611fbf565b60006020828403121561216357600080fd5b8135610acc81611fbf565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156121bf5781600019048211156121a5576121a561216e565b808516156121b257918102915b93841c9390800290612189565b509250929050565b6000826121d6575060016108db565b816121e3575060006108db565b81600181146121f957600281146122035761221f565b60019150506108db565b60ff8411156122145761221461216e565b50506001821b6108db565b5060208310610133831016604e8410600b8410161715612242575081810a6108db565b61224c8383612184565b80600019048211156122605761226061216e565b029392505050565b6000610acc60ff8416836121c7565b60008261229457634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b808201808211156108db576108db61216e565b818103818111156108db576108db61216e565b60006020828403121561230657600080fd5b5051919050565b80820281158282048414176108db576108db61216e565b60006020828403121561233657600080fd5b8151610acc81611fbf565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561236957600080fd5b8151610acc81611f5e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123c45784516001600160a01b03168352938301939183019160010161239f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156123fa57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122009d486cbfe1889548d2c69830a84150bde3403ed624ab8cc5ad49536acc6b48064736f6c63430008110033