6080604052600e805465ffffffffffff1916905566b1a2bc2ec50000600f8190556010553480156200002f575f80fd5b50604051620025a2380380620025a283398101604081905262000052916200027d565b6040518060400160405280600781526020016612d2d2d2d3919560ca1b815250604051806040016040528060058152602001644b4b4b4b4b60d81b8152508160029081620000a19190620003a5565b506003620000b08282620003a5565b50505f805550620000c13362000110565b6011805461ffff8581166401000000000261ffff60201b19888316620100000263ffffffff19909416928a1692909217929092171617905562000105828262000161565b50505050506200046d565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6127106001600160601b0382161115620001d55760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b0382166200022d5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401620001cc565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600a55565b805161ffff8116811462000278575f80fd5b919050565b5f805f805f60a0868803121562000292575f80fd5b6200029d8662000266565b9450620002ad6020870162000266565b9350620002bd6040870162000266565b60608701519093506001600160a01b0381168114620002da575f80fd5b60808701519092506001600160601b0381168114620002f7575f80fd5b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200032e57607f821691505b6020821081036200034d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003a0575f81815260208120601f850160051c810160208610156200037b5750805b601f850160051c820191505b818110156200039c5782815560010162000387565b5050505b505050565b81516001600160401b03811115620003c157620003c162000305565b620003d981620003d2845462000319565b8462000353565b602080601f8311600181146200040f575f8415620003f75750858301515b5f19600386901b1c1916600185901b1785556200039c565b5f85815260208120601f198616915b828110156200043f578886015182559484019460019091019084016200041e565b50858210156200045d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b612127806200047b5f395ff3fe608060405260043610610232575f3560e01c80638535923f11610129578063c50497ae116100a8578063e1911d701161006d578063e1911d7014610672578063e985e9c514610686578063eced0280146106a5578063f2fde38b146106cb578063febc39fb146106ea575f80fd5b8063c50497ae146105dd578063c87b56dd146105fb578063ceaf77871461061a578063dc33e68114610639578063ddb72b2c14610658575f80fd5b8063a6d6ad2f116100ee578063a6d6ad2f1461056e578063ad570dd51461058e578063b079fe74146105a3578063b88d4fde146105b6578063becd61d8146105c9575f80fd5b80638535923f146104b15780638abdc714146104e95780638da5cb5b1461051e57806395d89b411461053b578063a22cb4651461054f575f80fd5b80632a55205a116101b5578063611f3f101161017a578063611f3f101461042b5780636352211e1461044057806370a082311461045f578063715018a61461047e5780637cb6475914610492575f80fd5b80632a55205a1461038857806332cb6b0c146103c657806342842e0e146103da57806342966c68146103ed5780634312dc7c1461040c575f80fd5b8063081812fc116101fb578063081812fc146102de578063095ea7b314610315578063144a79e31461032857806318160ddd1461035457806323b872dd14610375575f80fd5b8062f714ce1461023657806301ffc9a71461025757806302d179c81461028b57806302fe53051461029e57806306fdde03146102bd575b5f80fd5b348015610241575f80fd5b50610255610250366004611a50565b610709565b005b348015610262575f80fd5b50610276610271366004611a8f565b6107e0565b60405190151581526020015b60405180910390f35b610255610299366004611aaa565b6107ff565b3480156102a9575f80fd5b506102556102b8366004611b2e565b610a27565b3480156102c8575f80fd5b506102d1610a80565b6040516102829190611be7565b3480156102e9575f80fd5b506102fd6102f8366004611bf9565b610b10565b6040516001600160a01b039091168152602001610282565b610255610323366004611c10565b610b49565b348015610333575f80fd5b5061033d610fff81565b60405165ffffffffffff9091168152602001610282565b34801561035f575f80fd5b506001545f54035b604051908152602001610282565b610255610383366004611c38565b610b59565b348015610393575f80fd5b506103a76103a2366004611c71565b610cbd565b604080516001600160a01b039093168352602083019190915201610282565b3480156103d1575f80fd5b5061033d600381565b6102556103e8366004611c38565b610d67565b3480156103f8575f80fd5b50610255610407366004611bf9565b610d86565b348015610417575f80fd5b50610255610426366004611ca6565b610dbe565b348015610436575f80fd5b50610367600f5481565b34801561044b575f80fd5b506102fd61045a366004611bf9565b610e1b565b34801561046a575f80fd5b50610367610479366004611cce565b610e25565b348015610489575f80fd5b50610255610e69565b34801561049d575f80fd5b506102556104ac366004611bf9565b610e7c565b3480156104bc575f80fd5b506104d06104cb366004611cce565b610eb6565b60405167ffffffffffffffff9091168152602001610282565b3480156104f4575f80fd5b5060115461050b90640100000000900461ffff1681565b60405161ffff9091168152602001610282565b348015610529575f80fd5b506009546001600160a01b03166102fd565b348015610546575f80fd5b506102d1610ed7565b34801561055a575f80fd5b50610255610569366004611ce7565b610ee6565b348015610579575f80fd5b5060115461050b9062010000900461ffff1681565b348015610599575f80fd5b5061036760105481565b6102556105b1366004611d20565b610f51565b6102556105c4366004611d4d565b61111f565b3480156105d4575f80fd5b5061033d600f81565b3480156105e8575f80fd5b50600e5461033d9065ffffffffffff1681565b348015610606575f80fd5b506102d1610615366004611bf9565b61115a565b348015610625575f80fd5b506104d0610634366004611cce565b6111d2565b348015610644575f80fd5b50610367610653366004611cce565b6111e0565b348015610663575f80fd5b5060115461050b9061ffff1681565b34801561067d575f80fd5b506102d161120a565b348015610691575f80fd5b506102766106a0366004611e22565b611296565b3480156106b0575f80fd5b506106b96112c3565b60405160ff9091168152602001610282565b3480156106d6575f80fd5b506102556106e5366004611cce565b611314565b3480156106f5575f80fd5b506104d0610704366004611cce565b61138d565b61071161139b565b478281101561073357604051639abc749160e01b815260040160405180910390fd5b5f826001600160a01b0316846040515f6040518083038185875af1925050503d805f811461077c576040519150601f19603f3d011682016040523d82523d5f602084013e610781565b606091505b50509050826001600160a01b0316847f8353ffcac0876ad14e226d9783c04540bfebf13871e868157d2a391cad98e91860405160405180910390a3806107da576040516327fcd9d160e01b815260040160405180910390fd5b50505050565b5f6107ea826113f5565b806107f957506107f982611442565b92915050565b32331461081f57604051637df1f81760e01b815260040160405180910390fd5b600e546003906108389065ffffffffffff166001611e5e565b65ffffffffffff16111561085f57604051632370216f60e01b815260040160405180910390fd5b6040516bffffffffffffffffffffffff193360601b166020820152600160f01b60348201526001600160f81b031960f883901b1660368201526001905f906037016040516020818303038152906040528051906020012090506108c68585600c5484611476565b6108e35760405163582f497d60e11b815260040160405180910390fd5b8260ff166108ef6112c3565b60ff161461091057604051631409953160e11b815260040160405180910390fd5b5f61091a3361148f565b905067ffffffffffffffff811660ff85161c600f1661ffff84168110610953576040516309be243160e21b815260040160405180910390fd5b6010543410156109765760405163356680b760e01b815260040160405180910390fd5b610984338561ffff166114ac565b5f61099a61ffff80871660ff89161b1684611e84565b90508560ff168561ffff167fd5a06ab27fda8c8f87b18fc92d660297a64163493811b3877b0b77232ebcf01f60405160405180910390a36109db3382611566565b600e805461ffff871691905f906109fb90849065ffffffffffff16611e5e565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055505050505050505050565b610a2f61139b565b600d610a3c828483611f2a565b508181604051610a4d929190611fe6565b604051908190038120907f562bf0237fa5139edc73ec903039c3a552e19ae62cc8292da62afeea43024b0a905f90a25050565b606060028054610a8f90611ea5565b80601f0160208091040260200160405190810160405280929190818152602001828054610abb90611ea5565b8015610b065780601f10610add57610100808354040283529160200191610b06565b820191905f5260205f20905b815481529060010190602001808311610ae957829003601f168201915b5050505050905090565b5f610b1a82611597565b610b2e57610b2e6333d1c03960e21b6115d9565b505f908152600660205260409020546001600160a01b031690565b610b55828260016115e1565b5050565b5f610b6382611682565b6001600160a01b039485169490915081168414610b8957610b8962a1148160e81b6115d9565b5f8281526006602052604090208054610bb48187335b6001600160a01b039081169116811491141790565b610bd657610bc28633611296565b610bd657610bd6632ce44b5f60e11b6115d9565b8015610be0575f82555b6001600160a01b038681165f9081526005602052604080822080545f19019055918716808252919020805460010190554260a01b17600160e11b175f85815260046020526040812091909155600160e11b84169003610c6c57600184015f818152600460205260408120549003610c6a575f548114610c6a575f8181526004602052604090208490555b505b6001600160a01b0385168481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4805f03610cb457610cb4633a954ecd60e21b6115d9565b50505050505050565b5f828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610d31575060408051808201909152600a546001600160a01b0381168252600160a01b90046001600160601b031660208201525b60208101515f9061271090610d4f906001600160601b031687611ff5565b610d59919061200c565b915196919550909350505050565b610d8183838360405180602001604052805f81525061111f565b505050565b610d91816001611711565b60405181907fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb905f90a250565b610dc661139b565b600e54600390610ddf90839065ffffffffffff16611e5e565b65ffffffffffff161115610e0957604051600162e92e1f60e01b0319815260040160405180910390fd5b610b55828265ffffffffffff166114ac565b5f6107f982611682565b5f6001600160a01b038216610e4457610e446323d3ad8160e21b6115d9565b506001600160a01b03165f9081526005602052604090205467ffffffffffffffff1690565b610e7161139b565b610e7a5f611848565b565b610e8461139b565b600c81905560405181907f914960aef5e033ce5cae8a7992d4b7a6f0f9741227b66acb67c605b7019f8a46905f90a250565b5f600f600c610ec48461148f565b67ffffffffffffffff16901c1692915050565b606060038054610a8f90611ea5565b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b323314610f7157604051637df1f81760e01b815260040160405180910390fd5b600e548190600390610f8c90839065ffffffffffff16611e5e565b65ffffffffffff161115610fde5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b60448201526064015b60405180910390fd5b610fe66112c3565b60ff1660021461100957604051631409953160e11b815260040160405180910390fd5b8165ffffffffffff165f036110315760405163199f5a0360e31b815260040160405180910390fd5b600f546110469065ffffffffffff8416611ff5565b3410156110665760405163356680b760e01b815260040160405180910390fd5b5f6110703361148f565b90505f61108965fffffffff000600c86901b1683611e84565b90506110953382611566565b6110a7338565ffffffffffff166114ac565b6040515f9065ffffffffffff8616907fd5a06ab27fda8c8f87b18fc92d660297a64163493811b3877b0b77232ebcf01f908390a3600e80548591905f906110f790849065ffffffffffff16611e5e565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555050505050565b61112a848484610b59565b6001600160a01b0383163b156107da5761114684848484611899565b6107da576107da6368d2bf6b60e11b6115d9565b606061116582611597565b61117957611179630a14c4b560e41b6115d9565b5f611182611974565b905080515f036111a05760405180602001604052805f8152506111cb565b806111aa84611983565b6040516020016111bb92919061202b565b6040516020818303038152906040525b9392505050565b5f600f6002610ec48461148f565b6001600160a01b0381165f908152600560205260408082205467ffffffffffffffff911c166107f9565b600d805461121790611ea5565b80601f016020809104026020016040519081016040528092919081815260200182805461124390611ea5565b801561128e5780601f106112655761010080835404028352916020019161128e565b820191905f5260205f20905b81548152906001019060200180831161127157829003601f168201915b505050505081565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205460ff1690565b6011545f90640100000000900461ffff164211156112e15750600390565b60115462010000900461ffff164211156112fb5750600290565b60115461ffff1642111561130f5750600190565b505f90565b61131c61139b565b6001600160a01b0381166113815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fd5565b61138a81611848565b50565b5f600f6001610ec48461148f565b6009546001600160a01b03163314610e7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fd5565b5f6301ffc9a760e01b6001600160e01b03198316148061142557506380ac58cd60e01b6001600160e01b03198316145b806107f95750506001600160e01b031916635b5e139f60e01b1490565b5f6001600160e01b0319821663152a902d60e11b14806107f957506301ffc9a760e01b6001600160e01b03198316146107f9565b5f826114838686856119c6565b1490505b949350505050565b6001600160a01b03165f9081526005602052604090205460c01c90565b5f8054908290036114c7576114c763b562e8dd60e01b6115d9565b5f8181526004602090815260408083206001600160a01b0387164260a01b6001881460e11b1781179091558084526005909252822080546801000000000000000186020190559081900361152457611524622e076360e81b6115d9565b818301825b80835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a481816001019150810361152957505f5550505050565b6001600160a01b039091165f90815260056020526040902080546001600160c01b031660c09290921b919091179055565b5f80548210156115d4575f5b505f82815260046020526040812054908190036115ca576115c383612059565b92506115a3565b600160e01b161590505b919050565b805f5260045ffd5b5f6115eb83610e1b565b90508180156116035750336001600160a01b03821614155b15611626576116128133611296565b611626576116266367d9dca160e11b6115d9565b5f8381526006602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b5f81815260046020526040902054805f036116ef575f5482106116af576116af636f96cda160e11b6115d9565b5b505f19015f8181526004602052604090205480156116b057600160e01b81165f036116da57919050565b6116ea636f96cda160e11b6115d9565b6116b0565b600160e01b81165f0361170157919050565b6115d4636f96cda160e11b6115d9565b5f61171b83611682565b9050805f80611737865f90815260066020526040902080549091565b91509150841561176e5761174c818433610b9f565b61176e5761175a8333611296565b61176e5761176e632ce44b5f60e11b6115d9565b8015611778575f82555b6001600160a01b0383165f81815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b175f87815260046020526040812091909155600160e11b8516900361180157600186015f8181526004602052604081205490036117ff575f5481146117ff575f8181526004602052604090208590555b505b60405186905f906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050600180548101905550505050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a02906118cd90339089908890889060040161206e565b6020604051808303815f875af1925050508015611907575060408051601f3d908101601f19168201909252611904918101906120aa565b60015b61195a573d808015611934576040519150601f19603f3d011682016040523d82523d5f602084013e611939565b606091505b5080515f03611952576119526368d2bf6b60e11b6115d9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611487565b6060600d8054610a8f90611ea5565b606060a06040510180604052602081039150505f815280825b600183039250600a81066030018353600a90048061199c5750819003601f19909101908152919050565b5f81815b84811015611a08576119f4828787848181106119e8576119e86120c5565b90506020020135611a11565b915080611a00816120d9565b9150506119ca565b50949350505050565b5f818310611a2b575f8281526020849052604090206111cb565b505f9182526020526040902090565b80356001600160a01b03811681146115d4575f80fd5b5f8060408385031215611a61575f80fd5b82359150611a7160208401611a3a565b90509250929050565b6001600160e01b03198116811461138a575f80fd5b5f60208284031215611a9f575f80fd5b81356111cb81611a7a565b5f805f60408486031215611abc575f80fd5b833567ffffffffffffffff80821115611ad3575f80fd5b818601915086601f830112611ae6575f80fd5b813581811115611af4575f80fd5b8760208260051b8501011115611b08575f80fd5b6020928301955093505084013560ff81168114611b23575f80fd5b809150509250925092565b5f8060208385031215611b3f575f80fd5b823567ffffffffffffffff80821115611b56575f80fd5b818501915085601f830112611b69575f80fd5b813581811115611b77575f80fd5b866020828501011115611b88575f80fd5b60209290920196919550909350505050565b5f5b83811015611bb4578181015183820152602001611b9c565b50505f910152565b5f8151808452611bd3816020860160208601611b9a565b601f01601f19169290920160200192915050565b602081525f6111cb6020830184611bbc565b5f60208284031215611c09575f80fd5b5035919050565b5f8060408385031215611c21575f80fd5b611c2a83611a3a565b946020939093013593505050565b5f805f60608486031215611c4a575f80fd5b611c5384611a3a565b9250611c6160208501611a3a565b9150604084013590509250925092565b5f8060408385031215611c82575f80fd5b50508035926020909101359150565b803565ffffffffffff811681146115d4575f80fd5b5f8060408385031215611cb7575f80fd5b611cc083611a3a565b9150611a7160208401611c91565b5f60208284031215611cde575f80fd5b6111cb82611a3a565b5f8060408385031215611cf8575f80fd5b611d0183611a3a565b915060208301358015158114611d15575f80fd5b809150509250929050565b5f60208284031215611d30575f80fd5b6111cb82611c91565b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611d60575f80fd5b611d6985611a3a565b9350611d7760208601611a3a565b925060408501359150606085013567ffffffffffffffff80821115611d9a575f80fd5b818701915087601f830112611dad575f80fd5b813581811115611dbf57611dbf611d39565b604051601f8201601f19908116603f01168101908382118183101715611de757611de7611d39565b816040528281528a6020848701011115611dff575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f8060408385031215611e33575f80fd5b611e3c83611a3a565b9150611a7160208401611a3a565b634e487b7160e01b5f52601160045260245ffd5b65ffffffffffff818116838216019080821115611e7d57611e7d611e4a565b5092915050565b67ffffffffffffffff818116838216019080821115611e7d57611e7d611e4a565b600181811c90821680611eb957607f821691505b602082108103611ed757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610d81575f81815260208120601f850160051c81016020861015611f035750805b601f850160051c820191505b81811015611f2257828155600101611f0f565b505050505050565b67ffffffffffffffff831115611f4257611f42611d39565b611f5683611f508354611ea5565b83611edd565b5f601f841160018114611f87575f8515611f705750838201355b5f19600387901b1c1916600186901b178355611fdf565b5f83815260209020601f19861690835b82811015611fb75786850135825560209485019460019092019101611f97565b5086821015611fd3575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b818382375f9101908152919050565b80820281158282048414176107f9576107f9611e4a565b5f8261202657634e487b7160e01b5f52601260045260245ffd5b500490565b5f835161203c818460208801611b9a565b835190830190612050818360208801611b9a565b01949350505050565b5f8161206757612067611e4a565b505f190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906120a090830184611bbc565b9695505050505050565b5f602082840312156120ba575f80fd5b81516111cb81611a7a565b634e487b7160e01b5f52603260045260245ffd5b5f600182016120ea576120ea611e4a565b506001019056fea264697066735822122020ae5fc04804827bc815184f4092f3e47886f1ee8567df08565cec82d7ea62c064736f6c634300081400330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cd53a8000533909bb6a77e46fd44a8e01ebfe9800000000000000000000000000000000000000000000000000000000000003e8