//
0x608060405260048054600160a01b60ff02191690553480156200002157600080fd5b5060405160408062002c77833981018060405260408110156200004357600080fd5b50805160209182015160008054336001600160a01b03199182168117835560028054909216179055604080517fd246699d0000000000000000000000000000000000000000000000000000000081529051939492936001600160a01b0385169363d246699d936004808501949293928390030190829087803b158015620000c957600080fd5b505af1158015620000de573d6000803e3d6000fd5b505050506040513d6020811015620000f557600080fd5b505115156200016557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f6973416c69616e612066616c7365000000000000000000000000000000000000604482015290519081900360640190fd5b600680546001600160a01b03199081166001600160a01b03858116919091179092556007805490911691831691909117905543600955611be6620001e9620001dd617080620001c984670de0b6b3a7640000620001f2602090811b620019ea17901c565b6200027760201b62001a531790919060201c565b620002c160201b60201c565b505050620006e9565b6000821515620002055750600062000271565b8282028284828115156200021557fe5b04146200026e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062002c566021913960400191505060405180910390fd5b90505b92915050565b60006200026e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620002ee60201b60201c565b6002546001600160a01b03163314620002d957600080fd5b620002e9620003b360201b60201c565b600a55565b6000818315156200039a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200035e57818101518382015260200162000344565b50505050905090810190601f1680156200038c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385811515620003a957fe5b0495945050505050565b60095443111580620003c55750600a54155b15620003d157620004a8565b600b546000620003e7620004aa602090811b901c565b9050811580620003f5575080155b156200040757505043600955620004a8565b6200042381600c54620005b260201b62001dea1790919060201c565b600c55604080518281526001602082015281517f46296264cd106b25aaa6bd852f4cf76bbd7d70550bbe6352bc3a47e35c6f1b2f929181900390910190a143600955620004a26200048b83620001c98464e8d4a51000620001f2602090811b620019ea17901c565b600854620005b260201b62001dea1790919060201c565b60085550505b565b600080620004e4600a54620004d0600954436200062760201b62001a951790919060201c565b620001f260201b620019ea1790919060201c565b600c54600654604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519394506000936200059693926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156200055557600080fd5b505afa1580156200056a573d6000803e3d6000fd5b505050506040513d60208110156200058157600080fd5b50519062000627602090811b62001a9517901c565b905081811015620005ab579150620005af9050565b5090505b90565b6000828201838110156200026e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006200026e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200067160201b60201c565b60008184841115620006e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156200035e57818101518382015260200162000344565b505050900390565b61255d80620006f96000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c80638456cb591161013b578063bb872b4a116100b8578063df8de3e71161007c578063df8de3e7146107e7578063e2ec6ec31461080d578063f2fde38b146108ae578063f40f0f52146108d4578063ff924edf146108fa5761023d565b8063bb872b4a1461073c578063c0dfd25c14610759578063c326bf4f14610761578063cd90dfdf146107d7578063db2e21bc146107df5761023d565b80639409745b116100ff5780639409745b146106485780639b19251a146106e9578063a9f8d1811461070f578063b047fb5014610717578063b6b55f251461071f5761023d565b80638456cb59146105655780638ae39cac1461056d5780638d949d4b146105755780638da5cb5b1461057d5780638f4ffcb1146105855761023d565b80633f4ba83a116101c957806368b482541161018d57806368b48254146104e35780636af04a571461050957806371587988146105115780637b9417c8146105375780637edbceb11461055d5761023d565b80633f4ba83a1461045d57806341f3e012146104655780634e0a33791461047f5780635c975abb146104a55780635e35359e146104ad5761023d565b806324953eaa1161021057806324953eaa1461031957806327d7874c146103ce578063286dd3f5146103f45780632ba73c151461041a5780632e1a7d4d146104405761023d565b80630519ce7914610242578063073af057146102665780630a0f8168146103095780631589a4fd14610311575b600080fd5b61024a610902565b604080516001600160a01b039092168252519081900360200190f35b6103076004803603602081101561027c57600080fd5b810190602081018135600160201b81111561029657600080fd5b8201836020820111156102a857600080fd5b803590602001918460208302840111600160201b831117156102c957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610911945050505050565b005b61024a610949565b61024a610958565b6103ba6004803603602081101561032f57600080fd5b810190602081018135600160201b81111561034957600080fd5b82018360208201111561035b57600080fd5b803590602001918460208302840111600160201b8311171561037c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610967945050505050565b604080519115158252519081900360200190f35b610307600480360360208110156103e457600080fd5b50356001600160a01b03166109c3565b6103ba6004803603602081101561040a57600080fd5b50356001600160a01b0316610a11565b6103076004803603602081101561043057600080fd5b50356001600160a01b0316610aa8565b6103076004803603602081101561045657600080fd5b5035610af6565b610307610da1565b61046d610de2565b60408051918252519081900360200190f35b6103076004803603602081101561049557600080fd5b50356001600160a01b0316610de8565b6103ba610e36565b610307600480360360608110156104c357600080fd5b506001600160a01b03813581169160208101359091169060400135610e46565b61046d600480360360208110156104f957600080fd5b50356001600160a01b0316610ef6565b61024a610f61565b6103076004803603602081101561052757600080fd5b50356001600160a01b0316610f70565b6103ba6004803603602081101561054d57600080fd5b50356001600160a01b0316610ff3565b61030761108e565b610307611141565b61046d6111b3565b6103076111b9565b61024a611286565b6103076004803603608081101561059b57600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b8111156105d457600080fd5b8201836020820111156105e657600080fd5b803590602001918460018302840111600160201b8311171561060757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611295945050505050565b6103076004803603602081101561065e57600080fd5b810190602081018135600160201b81111561067857600080fd5b82018360208201111561068a57600080fd5b803590602001918460208302840111600160201b831117156106ab57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611362945050505050565b6103ba600480360360208110156106ff57600080fd5b50356001600160a01b03166113ad565b61046d6113c2565b61024a6113c8565b6103076004803603602081101561073557600080fd5b50356113d7565b6103076004803603602081101561075257600080fd5b50356113fb565b61046d61141f565b6107876004803603602081101561077757600080fd5b50356001600160a01b0316611425565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107c35781810151838201526020016107ab565b505050509050019250505060405180910390f35b61024a611548565b610307611557565b610307600480360360208110156107fd57600080fd5b50356001600160a01b03166116b7565b6103ba6004803603602081101561082357600080fd5b810190602081018135600160201b81111561083d57600080fd5b82018360208201111561084f57600080fd5b803590602001918460208302840111600160201b8311171561087057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611852945050505050565b610307600480360360208110156108c457600080fd5b50356001600160a01b03166118a8565b61046d600480360360208110156108ea57600080fd5b50356001600160a01b031661192f565b61046d6119e4565b6003546001600160a01b031681565b60005b81518110156109455761093d828281518110151561092e57fe5b90602001906020020151610af6565b600101610914565b5050565b6002546001600160a01b031681565b6007546001600160a01b031681565b600080546001600160a01b0316331461097f57600080fd5b60005b82518110156109bd576109ab838281518110151561099c57fe5b90602001906020020151610a11565b156109b557600191505b600101610982565b50919050565b6002546001600160a01b031633146109da57600080fd5b6001600160a01b03811615156109ef57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314610a2957600080fd5b6001600160a01b03821660009081526001602052604090205460ff1615610aa3576001600160a01b038216600081815260016020908152604091829020805460ff19169055815192835290517ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a9281900390910190a15060015b919050565b6002546001600160a01b03163314610abf57600080fd5b6001600160a01b0381161515610ad457600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600d60209081526040808320848452600180820190935292200154801515610b6e5760408051600160e51b62461bcd02815260206004820152601460248201527f77697468647261773a206e6f7420676f6f642031000000000000000000000000604482015290519081900360640190fd5b8154811115610bc75760408051600160e51b62461bcd02815260206004820152601460248201527f77697468647261773a206e6f7420676f6f642032000000000000000000000000604482015290519081900360640190fd5b610bcf6111b9565b6000610c138360040154610c0764e8d4a51000610bfb60085488600001546119ea90919063ffffffff16565b9063ffffffff611a5316565b9063ffffffff611a9516565b90508015610c2557610c253382611ad7565b610c328360010185611c9b565b1515610c7257604051600160e51b62461bcd02815260040180806020018281038252602b815260200180612507602b913960400191505060405180910390fd5b6005830154610c8890600163ffffffff611a9516565b60058401558254610c9f908363ffffffff611a9516565b835560075460408051600160e11b635c46a7ef028152306004820152336024820152604481018790526080606482015260006084820181905291516001600160a01b039093169263b88d4fde9260c48084019391929182900301818387803b158015610d0a57600080fd5b505af1158015610d1e573d6000803e3d6000fd5b50506008548554610d41935064e8d4a510009250610bfb9163ffffffff6119ea16565b6004840155600b54610d59908363ffffffff611a9516565b600b5560408051838152602081018390528151869233927f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94929081900390910190a350505050565b6002546001600160a01b03163314610db857600080fd5b600454600160a01b900460ff161515610dd057600080fd5b60048054600160a01b60ff0219169055565b60085481565b6002546001600160a01b03163314610dff57600080fd5b6001600160a01b0381161515610e1457600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600454600160a01b900460ff1681565b6002546001600160a01b03163314610e5d57600080fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610ebd57600080fd5b505af1158015610ed1573d6000803e3d6000fd5b505050506040513d6020811015610ee757600080fd5b50511515610ef157fe5b505050565b60006001600160a01b0382161515610f4257604051600160e51b62461bcd02815260040180806020018281038252602a815260200180612454602a913960400191505060405180910390fd5b506001600160a01b03166000908152600d602052604090206005015490565b6005546001600160a01b031681565b6002546001600160a01b03163314610f8757600080fd5b600454600160a01b900460ff161515610f9f57600080fd5b600580546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa4461993059181900360200190a150565b600080546001600160a01b0316331461100b57600080fd5b6001600160a01b03821660009081526001602052604090205460ff161515610aa3576001600160a01b038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f9281900390910190a1506001919050565b336000908152600d602052604090206110a56111b9565b60006110d18260040154610c0764e8d4a51000610bfb60085487600001546119ea90919063ffffffff16565b905080156110e3576110e33382611ad7565b60085482546111029164e8d4a5100091610bfb9163ffffffff6119ea16565b600483015560408051828152905133917f9a92c3472ba0d2d183e38c3801bae5d41d693c2803377eae8b0f94683862253e919081900360200190a25050565b6004546001600160a01b031633148061116457506002546001600160a01b031633145b8061117957506003546001600160a01b031633145b151561118457600080fd5b600454600160a01b900460ff161561119b57600080fd5b60048054600160a01b60ff021916600160a01b179055565b600a5481565b600954431115806111ca5750600a54155b156111d457611284565b600b5460006111e1611d21565b90508115806111ee575080155b156111fe57505043600955611284565b600c54611211908263ffffffff611dea16565b600c55604080518281526001602082015281517f46296264cd106b25aaa6bd852f4cf76bbd7d70550bbe6352bc3a47e35c6f1b2f929181900390910190a14360095561127e61126f83610bfb8464e8d4a5100063ffffffff6119ea16565b6008549063ffffffff611dea16565b60085550505b565b6000546001600160a01b031681565b6020810151600181146112f25760408051600160e51b62461bcd02815260206004820152600d60248201527f756e6b6e6f7720616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b806001141561135b576007546001600160a01b0384811691161461134a57604051600160e51b62461bcd02815260040180806020018281038252603e81526020018061247e603e913960400191505060405180910390fd5b60408201516113598682611e47565b505b5050505050565b600454600160a01b900460ff161561137957600080fd5b60005b8151811015610945576113a5828281518110151561139657fe5b906020019060200201516113d7565b60010161137c565b60016020526000908152604090205460ff1681565b60095481565b6004546001600160a01b031681565b600454600160a01b900460ff16156113ee57600080fd5b6113f83382611e47565b50565b6002546001600160a01b0316331461141257600080fd5b61141a6111b9565b600a55565b600c5481565b6000546060906001600160a01b0316151561147457604051600160e51b62461bcd02815260040180806020018281038252602a8152602001806124bc602a913960400191505060405180910390fd5b6000600d6000846001600160a01b03166001600160a01b031681526020019081526020016000209050606081600501546040519080825280602002602001820160405280156114cd578160200160208202803883390190505b5090506000806114df600185016121aa565b90505b6114ef84600101826121b8565b1561153e5760008061150460018701846121c3565b86519193509150829086908690811061151957fe5b60209081029091010152505060019182019161153790850182612200565b90506114e2565b5090949350505050565b6006546001600160a01b031681565b336000908152600d6020526040812080549091611576600184016121aa565b90505b61158683600101826121b8565b156116375760008061159b60018601846121c3565b60075460408051600160e11b635c46a7ef028152306004820152336024820152604481018590526080606482015260006084820181905291519496509294506001600160a01b039091169263b88d4fde9260c480820193929182900301818387803b15801561160957600080fd5b505af115801561161d573d6000803e3d6000fd5b5050505050506116308360010182612200565b9050611579565b50600080835560048301819055600183019061165660028501826123e0565b5060006002919091018190556005830155600b5461167a908263ffffffff611a9516565b600b5560408051828152905133917f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695919081900360200190a25050565b6002546001600160a01b031633146116ce57600080fd5b6001600160a01b0381161515611711576040513390303180156108fc02916000818181858888f1935050505015801561170b573d6000803e3d6000fd5b506113f8565b60408051600160e01b6370a08231028152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561175f57600080fd5b505afa158015611773573d6000803e3d6000fd5b505050506040513d602081101561178957600080fd5b505160408051600160e01b63a9059cbb0281523360048201526024810183905290519192506001600160a01b0384169163a9059cbb916044808201926020929091908290030181600087803b1580156117e157600080fd5b505af11580156117f5573d6000803e3d6000fd5b505050506040513d602081101561180b57600080fd5b505060408051828152905133916001600160a01b038616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c9181900360200190a3505050565b600080546001600160a01b0316331461186a57600080fd5b60005b82518110156109bd57611896838281518110151561188757fe5b90602001906020020151610ff3565b156118a057600191505b60010161186d565b6000546001600160a01b031633146118bf57600080fd5b6001600160a01b03811615156118d457600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600d60205260408120600a54151561195a576000915050610aa3565b600854600a54156119b457600b54600954431180156119795750600081115b156119b2576119af6119a282610bfb64e8d4a51000611996611d21565b9063ffffffff6119ea16565b839063ffffffff611dea16565b91505b505b6119dc8260040154610c0764e8d4a51000610bfb8587600001546119ea90919063ffffffff16565b949350505050565b600b5481565b60008215156119fb57506000611a4d565b828202828482811515611a0a57fe5b0414611a4a57604051600160e51b62461bcd0281526004018080602001828103825260218152602001806124e66021913960400191505060405180910390fd5b90505b92915050565b6000611a4a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061224c565b6000611a4a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122f7565b60065460408051600160e01b6370a0823102815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611b2557600080fd5b505afa158015611b39573d6000803e3d6000fd5b505050506040513d6020811015611b4f57600080fd5b50519050818111611baa5760408051600160e51b62461bcd02815260206004820152601460248201527f696e73756666696369656e742062616c616e6365000000000000000000000000604482015290519081900360640190fd5b600c54611bbd908363ffffffff611a9516565b600c5560065460408051600160e01b63a9059cbb0281526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015611c1957600080fd5b505af1158015611c2d573d6000803e3d6000fd5b505050506040513d6020811015611c4357600080fd5b50511515610ef15760408051600160e51b62461bcd02815260206004820152601c60248201527f6661696c656420746f207472616e736665722067616520746f6b656e00000000604482015290519081900360640190fd5b600081815260208390526040812054801515611cbb576000915050611a4d565b600083815260208590526040812081815560019081019190915580850180546000198401908110611ce857fe5b600091825260209091206002918202016001908101805460ff191693151593909317909255949094018054600019019055509192915050565b600080611d3f600a5461199660095443611a9590919063ffffffff16565b600c5460065460408051600160e01b6370a082310281523060048201529051939450600093611dd093926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d9857600080fd5b505afa158015611dac573d6000803e3d6000fd5b505050506040513d6020811015611dc257600080fd5b50519063ffffffff611a9516565b905081811015611de3579150611de79050565b5090505b90565b600082820183811015611a4a5760408051600160e51b62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600454600160a01b900460ff1615611e5e57600080fd5b60075460408051600160e11b6331a9108f0281526004810184905290516001600160a01b03808616931691636352211e916024808301926020929190829003018186803b158015611eae57600080fd5b505afa158015611ec2573d6000803e3d6000fd5b505050506040513d6020811015611ed857600080fd5b50516001600160a01b031614611f385760408051600160e51b62461bcd02815260206004820152601960248201527f416c69616e613a206d75737420626520746865206f776e657200000000000000604482015290519081900360640190fd5b60075460408051600160e01b636363bccd0281526004810184905290516000926001600160a01b031691636363bccd9160248083019260a0929190829003018186803b158015611f8757600080fd5b505afa158015611f9b573d6000803e3d6000fd5b505050506040513d60a0811015611fb157600080fd5b5060800151905080151561200f5760408051600160e51b62461bcd02815260206004820152601d60248201527f416c69616e613a2067656e65205f616d6f756e74206d757374203e2030000000604482015290519081900360640190fd5b6120176111b9565b6001600160a01b0383166000908152600d602052604090208054156120765760006120628260040154610c0764e8d4a51000610bfb60085487600001546119ea90919063ffffffff16565b90508015612074576120748582611ad7565b505b60075460408051600160e01b6323b872dd0281526001600160a01b03878116600483015230602483015260448201879052915191909216916323b872dd91606480830192600092919082900301818387803b1580156120d457600080fd5b505af11580156120e8573d6000803e3d6000fd5b505050506120fa816001018484612355565b50600581015461211190600163ffffffff611dea16565b60058201558054612128908363ffffffff611dea16565b8155600b5461213d908363ffffffff611dea16565b600b55600854815461215f9164e8d4a5100091610bfb9163ffffffff6119ea16565b600482015560408051838152905184916001600160a01b038716917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350505050565b6000611a4d82600019612200565b600191909101541190565b60008083600101838154811015156121d757fe5b600091825260208083206002909202909101548083529590526040902060010154939492505050565b60010160005b60018301548210801561223c57506001830180548390811061222457fe5b600091825260209091206001600290920201015460ff165b156109bd57600190910190612206565b6000818315156122dd57604051600160e51b62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122a257818101518382015260200161228a565b50505050905090810190601f1680156122cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858115156122eb57fe5b049150505b9392505050565b6000818484111561234d57604051600160e51b62461bcd028152600401808060200182810382528381815181526020019150805190602001908083836000838110156122a257818101518382015260200161228a565b505050900390565b600082815260208490526040812080546001909101839055801561237d5760019150506122f0565b600180860180549161239191908301612401565b60008581526020879052604090206001808301909155860180549192508591839081106123ba57fe5b600091825260208220600291820201929092559086018054600101905591506122f09050565b50805460008255600202906000526020600020908101906113f89190612429565b815481835581811115610ef157600202816002028360005260206000209182019101610ef191905b611de791905b8082111561244f576000815560018101805460ff1916905560020161242f565b509056fe4552433732313a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373617070726f76616c20616e642077616e74206d696e742075736520616c69616e612c20627574207573656420746f6b656e2069736e277420416c69616e614552433732313a20746f6b656e647320717565727920666f7220746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7777697468647261773a206e6f7420676f6f642c2072656d6f76652066726f6d20616d6f756e74546f6b656ea165627a7a7230582012b790640554cf8314848d8b1990c47dd497cca91c772c0236590eb3161e4cb00029536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7700000000000000000000000017df9fbfc1cdab0f90eddc318c4f6fcada730cf200000000000000000000000082454302f9293b8c8f892ebce97f1b6defc54133