608060405234801561000f575f80fd5b505f80546001600160a01b031916339081178255604051909182917f22500af037c600dd7b720644ab6e358635085601d9ac508ad83eb2d6b2d729ca908290a35061005c6012600a6101c4565b61006a90633b9aca006101d9565b335f81815260026020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6100aa6012600a6101c4565b6100b890633b9aca006101d9565b60405190815260200160405180910390a36101f0565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561011c57815f1904821115610102576101026100ce565b8085161561010f57918102915b93841c93908002906100e7565b509250929050565b5f82610132575060016101be565b8161013e57505f6101be565b8160018114610154576002811461015e5761017a565b60019150506101be565b60ff84111561016f5761016f6100ce565b50506001821b6101be565b5060208310610133831016604e8410600b841016171561019d575081810a6101be565b6101a783836100e2565b805f19048211156101ba576101ba6100ce565b0290505b92915050565b5f6101d260ff841683610124565b9392505050565b80820281158282048414176101be576101be6100ce565b611161806101fd5f395ff3fe608060405234801561000f575f80fd5b506004361061013d575f3560e01c80638e32c003116100b4578063c345cf2311610079578063c345cf23146102b0578063cadc24b5146102b8578063d8fb9361146102e0578063dd62ed3e146102f3578063e03504af1461021b578063e156b1b61461032b575f80fd5b80638e32c0031461026f57806395d89b4114610141578063a713fd5314610282578063a9059cbb1461028a578063adacad8c1461029d575f80fd5b806328226aa71161010557806328226aa7146101d1578063313ce567146101f5578063416c3c9d1461020a5780635c01b60c1461021b57806370a082311461023d578063715018a614610265575f80fd5b806306fdde0314610141578063095ea7b31461017257806318160ddd146101955780631ae1ffbc146101ab57806323b872dd146101be575b5f80fd5b60408051808201909152600381526208aa8960eb1b60208201525b6040516101699190610b76565b60405180910390f35b610185610180366004610bc6565b61033e565b6040519015158152602001610169565b61019d6103a5565b604051908152602001610169565b6101856101b9366004610d25565b6103c5565b6101856101cc366004610dc8565b6105cc565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610169565b60125b60405160ff9091168152602001610169565b6004546001600160a01b03166101dd565b61015c6040518060400160405280600381526020016208aa8960eb1b81525081565b61019d61024b366004610e01565b6001600160a01b03165f9081526002602052604090205490565b61026d610786565b005b61026d61027d366004610e01565b6107fd565b6101f8601281565b610185610298366004610bc6565b610848565b61026d6102ab366004610e21565b610985565b61019d610a0b565b61019d6102c6366004610e01565b6001600160a01b03165f9081526003602052604090205490565b61026d6102ee366004610e95565b610a28565b61019d610301366004610ed7565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610185610339366004610dc8565b610b43565b335f8181526001602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b5f6103b26012600a610ffc565b6103c090633b9aca0061100a565b905090565b5f805b85518110156105bf578581815181106103e3576103e3611021565b60200260200101516001600160a01b0316876001600160a01b03165f8051602061110c83398151915287848151811061041e5761041e611021565b602002602001015160405161043591815260200190565b60405180910390a385818151811061044f5761044f611021565b60200260200101516001600160a01b0316736bded42c6da8fbf0d2ba55b2fa120c5e0c8d78916001600160a01b03167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228784815181106104b1576104b1611021565b60200260200101515f808987815181106104cd576104cd611021565b6020908102919091018101516040805195865291850193909352830152606082015260800160405180910390a3826001600160a01b031663e156b1b687838151811061051b5761051b611021565b60200260200101518987858151811061053657610536611021565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015610592573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b69190611035565b506001016103c8565b5060019695505050505050565b6001600160a01b0383165f9081526001602090815260408083203384529091528120548211156106435760405162461bcd60e51b815260206004820152601960248201527f416c6c6f77616e6365206c696d6974207375727061737365640000000000000060448201526064015b60405180910390fd5b6001600160a01b0384165f9081526003602052604090205480156106b0578083146106b05760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d61746368604482015260640161063a565b6001600160a01b0385165f90815260026020526040812080548592906106d7908490611054565b90915550506001600160a01b0384165f9081526002602052604081208054859290610703908490611067565b90915550506001600160a01b0385165f9081526001602090815260408083203384529091528120805485929061073a908490611054565b92505081905550836001600160a01b0316856001600160a01b03165f8051602061110c8339815191528560405161077391815260200190565b60405180910390a3506001949350505050565b5f546001600160a01b031633146107af5760405162461bcd60e51b815260040161063a9061107a565b5f805460405161dead926001600160a01b03909216917f22500af037c600dd7b720644ab6e358635085601d9ac508ad83eb2d6b2d729ca91a35f80546001600160a01b03191661dead179055565b5f546001600160a01b031633146108265760405162461bcd60e51b815260040161063a9061107a565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526002602052604081205482111561089d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161063a565b5f6108a7336102c6565b905080156108fe578083146108fe5760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d61746368604482015260640161063a565b335f908152600260205260408120805485929061091c908490611054565b90915550506001600160a01b0384165f9081526002602052604081208054859290610948908490611067565b90915550506040518381526001600160a01b0385169033905f8051602061110c833981519152906020015b60405180910390a35060019392505050565b6004546001600160a01b031633146109af5760405162461bcd60e51b815260040161063a906110c5565b5f5b82811015610a05578160035f8686858181106109cf576109cf611021565b90506020020160208101906109e49190610e01565b6001600160a01b0316815260208101919091526040015f20556001016109b1565b50505050565b610a176012600a610ffc565b610a2590633b9aca0061100a565b81565b6004546001600160a01b03163314610a525760405162461bcd60e51b815260040161063a906110c5565b5f5b8251811015610b3e575f838281518110610a7057610a70611021565b602002602001015190505f6001600160a01b0316816001600160a01b031603610adb5760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420616464726573732073706563696669656400000000000000604482015260640161063a565b6001600160a01b0381165f81815260026020908152604091829020805490879055825181815291820187905292917fef88868e7a1bd2fac29f7b777f32f9d8ea2ac5e10c2d23234d4715ab11c84890910160405180910390a25050600101610a54565b505050565b5f826001600160a01b0316846001600160a01b03165f8051602061110c8339815191528460405161097391815260200190565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610bc1575f80fd5b919050565b5f8060408385031215610bd7575f80fd5b610be083610bab565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610c2b57610c2b610bee565b604052919050565b5f67ffffffffffffffff821115610c4c57610c4c610bee565b5060051b60200190565b5f82601f830112610c65575f80fd5b81356020610c7a610c7583610c33565b610c02565b8083825260208201915060208460051b870101935086841115610c9b575f80fd5b602086015b84811015610cbe57610cb181610bab565b8352918301918301610ca0565b509695505050505050565b5f82601f830112610cd8575f80fd5b81356020610ce8610c7583610c33565b8083825260208201915060208460051b870101935086841115610d09575f80fd5b602086015b84811015610cbe5780358352918301918301610d0e565b5f805f805f60a08688031215610d39575f80fd5b610d4286610bab565b9450602086013567ffffffffffffffff80821115610d5e575f80fd5b610d6a89838a01610c56565b95506040880135915080821115610d7f575f80fd5b610d8b89838a01610cc9565b94506060880135915080821115610da0575f80fd5b50610dad88828901610cc9565b925050610dbc60808701610bab565b90509295509295909350565b5f805f60608486031215610dda575f80fd5b610de384610bab565b9250610df160208501610bab565b9150604084013590509250925092565b5f60208284031215610e11575f80fd5b610e1a82610bab565b9392505050565b5f805f60408486031215610e33575f80fd5b833567ffffffffffffffff80821115610e4a575f80fd5b818601915086601f830112610e5d575f80fd5b813581811115610e6b575f80fd5b8760208260051b8501011115610e7f575f80fd5b6020928301989097509590910135949350505050565b5f8060408385031215610ea6575f80fd5b823567ffffffffffffffff811115610ebc575f80fd5b610ec885828601610c56565b95602094909401359450505050565b5f8060408385031215610ee8575f80fd5b610ef183610bab565b9150610eff60208401610bab565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115610f5657815f1904821115610f3c57610f3c610f08565b80851615610f4957918102915b93841c9390800290610f21565b509250929050565b5f82610f6c5750600161039f565b81610f7857505f61039f565b8160018114610f8e5760028114610f9857610fb4565b600191505061039f565b60ff841115610fa957610fa9610f08565b50506001821b61039f565b5060208310610133831016604e8410600b8410161715610fd7575081810a61039f565b610fe18383610f1c565b805f1904821115610ff457610ff4610f08565b029392505050565b5f610e1a60ff841683610f5e565b808202811582820484141761039f5761039f610f08565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611045575f80fd5b81518015158114610e1a575f80fd5b8181038181111561039f5761039f610f08565b8082018082111561039f5761039f610f08565b6020808252602b908201527f556e617574686f72697a65643a2053696e676c65204f776e657220616363657360408201526a39903932b8bab4b932b21760a91b606082015260800190565b60208082526026908201527f556e617574686f72697a65643a2043726561746f7220616363657373207265716040820152653ab4b932b21760d11b60608201526080019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220eb7789fffb5304ef323662784296a1dd7b8acf65541f3d6f664dafbc6b14961664736f6c63430008190033