60806040526113886009556102ee600a9081556001600b55600c5566071afd498d0000600d55600f805460ff191690553480156200003c57600080fd5b506040805180820182526007808252666d656d69676f7360c81b60208084018290528451808601909552918452908301529060026200007c83826200019b565b5060036200008b82826200019b565b50506001600055506200009e33620000a4565b62000267565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200012157607f821691505b6020821081036200014257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019657600081815260208120601f850160051c81016020861015620001715750805b601f850160051c820191505b8181101562000192578281556001016200017d565b5050505b505050565b81516001600160401b03811115620001b757620001b7620000f6565b620001cf81620001c884546200010c565b8462000148565b602080601f831160018114620002075760008415620001ee5750858301515b600019600386901b1c1916600185901b17855562000192565b600085815260208120601f198616915b82811015620002385788860151825594840194600190910190840162000217565b5085821015620002575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6124e480620002776000396000f3fe6080604052600436106102675760003560e01c8063857c4b6211610144578063c23dc68f116100b6578063e8a3d4851161007a578063e8a3d485146106f1578063e985e9c514610706578063efdcb04a1461074f578063f19e75d414610765578063f2fde38b14610785578063f77b1edd146107a557600080fd5b8063c23dc68f14610641578063c87b56dd1461066e578063dc33e6811461068e578063e0ec7c36146106ae578063e55f58bb146106db57600080fd5b806399a2557a1161010857806399a2557a1461059b5780639aaf21f4146105bb5780639d9e3c47146105db578063a0712d68146105fb578063a22cb4651461060e578063b88d4fde1461062e57600080fd5b8063857c4b621461051d578063899d7b38146105335780638da5cb5b14610548578063938e3d7b1461056657806395d89b411461058657600080fd5b80634c10337c116101dd5780636352211e116101a15780636352211e1461046f57806365b1de201461048f57806370a08231146104a5578063715018a6146104c5578063845bb3bb146104da5780638462151c146104f057600080fd5b80634c10337c146103d25780634f7f8976146103e857806355f804b3146104085780635bbb2177146104285780635c474f9e1461045557600080fd5b806323b872dd1161022f57806323b872dd1461033757806324600fc31461034a578063253ca9341461035f5780632b1065931461037f5780633267838f1461039f57806342842e0e146103bf57600080fd5b806301ffc9a71461026c57806306fdde03146102a1578063081812fc146102c3578063095ea7b3146102fb57806318160ddd14610310575b600080fd5b34801561027857600080fd5b5061028c610287366004611cc9565b6107c5565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b6610817565b6040516102989190611d36565b3480156102cf57600080fd5b506102e36102de366004611d49565b6108a9565b6040516001600160a01b039091168152602001610298565b61030e610309366004611d7e565b6108ed565b005b34801561031c57600080fd5b5060015460005403600019015b604051908152602001610298565b61030e610345366004611da8565b61098d565b34801561035657600080fd5b5061030e610b26565b34801561036b57600080fd5b5061030e61037a366004611d49565b610bc9565b34801561038b57600080fd5b5061030e61039a366004611d49565b610bd6565b3480156103ab57600080fd5b5061030e6103ba366004611d49565b610be3565b61030e6103cd366004611da8565b610bf0565b3480156103de57600080fd5b50610329600d5481565b3480156103f457600080fd5b5061030e610403366004611d7e565b610c10565b34801561041457600080fd5b5061030e610423366004611de4565b610cb6565b34801561043457600080fd5b50610448610443366004611e55565b610ccb565b6040516102989190611ef3565b34801561046157600080fd5b50600f5461028c9060ff1681565b34801561047b57600080fd5b506102e361048a366004611d49565b610d96565b34801561049b57600080fd5b5061032960095481565b3480156104b157600080fd5b506103296104c0366004611f35565b610da1565b3480156104d157600080fd5b5061030e610def565b3480156104e657600080fd5b50610329600b5481565b3480156104fc57600080fd5b5061051061050b366004611f35565b610e03565b6040516102989190611f50565b34801561052957600080fd5b50610329600c5481565b34801561053f57600080fd5b5061030e610f0b565b34801561055457600080fd5b506008546001600160a01b03166102e3565b34801561057257600080fd5b5061030e610581366004612013565b610f27565b34801561059257600080fd5b506102b6610f3f565b3480156105a757600080fd5b506105106105b636600461205b565b610f4e565b3480156105c757600080fd5b5061030e6105d6366004611d7e565b6110d5565b3480156105e757600080fd5b5061030e6105f6366004611d49565b611121565b61030e610609366004611d49565b61112e565b34801561061a57600080fd5b5061030e61062936600461208e565b611489565b61030e61063c3660046120ca565b6114f5565b34801561064d57600080fd5b5061066161065c366004611d49565b61153f565b6040516102989190612145565b34801561067a57600080fd5b506102b6610689366004611d49565b6115c7565b34801561069a57600080fd5b506103296106a9366004611f35565b61164a565b3480156106ba57600080fd5b506103296106c9366004611f35565b60116020526000908152604090205481565b3480156106e757600080fd5b5061032960105481565b3480156106fd57600080fd5b506102b6611674565b34801561071257600080fd5b5061028c610721366004612153565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561075b57600080fd5b50610329600a5481565b34801561077157600080fd5b5061030e610780366004611d49565b611683565b34801561079157600080fd5b5061030e6107a0366004611f35565b6116c5565b3480156107b157600080fd5b5061030e6107c0366004611d49565b61173b565b60006301ffc9a760e01b6001600160e01b0319831614806107f657506380ac58cd60e01b6001600160e01b03198316145b806108115750635b5e139f60e01b6001600160e01b03198316145b92915050565b60606002805461082690612186565b80601f016020809104026020016040519081016040528092919081815260200182805461085290612186565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b5050505050905090565b60006108b482611748565b6108d1576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006108f882610d96565b9050336001600160a01b03821614610931576109148133610721565b610931576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006109988261177d565b9050836001600160a01b0316816001600160a01b0316146109cb5760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610a18576109fb8633610721565b610a1857604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610a3f57604051633a954ecd60e21b815260040160405180910390fd5b8015610a4a57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003610adc57600184016000818152600460205260408120549003610ada576000548114610ada5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b610b2e6117ec565b604051600090339047908381818185875af1925050503d8060008114610b70576040519150601f19603f3d011682016040523d82523d6000602084013e610b75565b606091505b5050905080610bc65760405162461bcd60e51b81526020600482015260186024820152771b595b5a59dbdcce88151c985b9cd9995c8819985a5b195960421b60448201526064015b60405180910390fd5b50565b610bd16117ec565b600a55565b610bde6117ec565b600d55565b610beb6117ec565b600c55565b610c0b838383604051806020016040528060008152506114f5565b505050565b610c186117ec565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c65576040519150601f19603f3d011682016040523d82523d6000602084013e610c6a565b606091505b5050905080610c0b5760405162461bcd60e51b81526020600482015260186024820152771b595b5a59dbdcce88151c985b9cd9995c8819985a5b195960421b6044820152606401610bbd565b610cbe6117ec565b6012610c0b828483612206565b6060816000816001600160401b03811115610ce857610ce8611f88565b604051908082528060200260200182016040528015610d3a57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610d065790505b50905060005b828114610d8d57610d68868683818110610d5c57610d5c6122c6565b9050602002013561153f565b828281518110610d7a57610d7a6122c6565b6020908102919091010152600101610d40565b50949350505050565b60006108118261177d565b60006001600160a01b038216610dca576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b610df76117ec565b610e016000611846565b565b60606000806000610e1385610da1565b90506000816001600160401b03811115610e2f57610e2f611f88565b604051908082528060200260200182016040528015610e58578160200160208202803683370190505b509050610e8560408051608081018252600080825260208201819052918101829052606081019190915290565b60015b838614610eff57610e9881611898565b91508160400151610ef75781516001600160a01b031615610eb857815194505b876001600160a01b0316856001600160a01b031603610ef75780838780600101985081518110610eea57610eea6122c6565b6020026020010181815250505b600101610e88565b50909695505050505050565b610f136117ec565b600f805460ff19811660ff90911615179055565b610f2f6117ec565b600e610f3b82826122dc565b5050565b60606003805461082690612186565b6060818310610f7057604051631960ccad60e11b815260040160405180910390fd5b600080610f7c60005490565b90506001851015610f8c57600194505b80841115610f98578093505b6000610fa387610da1565b905084861015610fc25785850381811015610fbc578091505b50610fc6565b5060005b6000816001600160401b03811115610fe057610fe0611f88565b604051908082528060200260200182016040528015611009578160200160208202803683370190505b5090508160000361101f5793506110ce92505050565b600061102a8861153f565b90506000816040015161103b575080515b885b88811415801561104d5750848714155b156110c25761105b81611898565b925082604001516110ba5782516001600160a01b03161561107b57825191505b8a6001600160a01b0316826001600160a01b0316036110ba57808488806001019950815181106110ad576110ad6122c6565b6020026020010181815250505b60010161103d565b50505092835250909150505b9392505050565b6110dd6117ec565b80600954816110ef6000546000190190565b6110f991906123b1565b11156111175760405162461bcd60e51b8152600401610bbd906123c4565b610c0b83836118d4565b6111296117ec565b600955565b32331461118d5760405162461bcd60e51b815260206004820152602760248201527f6d656d69676f733a205468652063616c6c657220697320616e6f7468657220636044820152661bdb9d1c9858dd60ca1b6064820152608401610bbd565b806009548161119f6000546000190190565b6111a991906123b1565b11156111c75760405162461bcd60e51b8152600401610bbd906123c4565b600c546111d333610da1565b106112205760405162461bcd60e51b815260206004820152601760248201527f6d656d69676f733a20746f6f206d75636820616d69676f0000000000000000006044820152606401610bbd565b600f5460ff166112815760405162461bcd60e51b815260206004820152602660248201527f6d656d69676f733a20616d69676f2c20796f75206172652070726f6261626c79604482015265206561726c7960d01b6064820152608401610bbd565b600954600054600019011015610f3b57600a546010541061130257600d546112a990836123fb565b3410156112f85760405162461bcd60e51b815260206004820152601760248201527f6d656d69676f733a206d6f72652065746820616d69676f0000000000000000006044820152606401610bbd565b610f3b33836118d4565b600b5433600090815260116020526040902054101561142d5733600090815260116020526040812054600b546113389190612412565b905080831161138257826010600082825461135391906123b1565b909155505033600090815260116020526040812080548592906113779084906123b1565b909155506114239050565b806010600082825461139491906123b1565b909155505033600090815260116020526040812080548392906113b89084906123b1565b9091555050600d546113ca8285612412565b6113d491906123fb565b3410156114235760405162461bcd60e51b815260206004820152601d60248201527f6d656d69676f733a206e6f7420656e6f7567682065746820616d69676f0000006044820152606401610bbd565b610c0b33846118d4565b600d5461143a90836123fb565b3410156112f85760405162461bcd60e51b815260206004820152601d60248201527f6d656d69676f733a206e6f7420656e6f7567682065746820616d69676f0000006044820152606401610bbd565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61150084848461098d565b6001600160a01b0383163b156115395761151c848484846119d2565b611539576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b604080516080810182526000808252602082018190529181018290526060810191909152604080516080810182526000808252602082018190529181018290526060810191909152600183108061159857506000548310155b156115a35792915050565b6115ac83611898565b90508060400151156115be5792915050565b6110ce83611abe565b60606115d282611748565b6115ef57604051630a14c4b560e41b815260040160405180910390fd5b60006115f9611af3565b9050805160000361161957604051806020016040528060008152506110ce565b8061162384611b02565b604051602001611634929190612425565b6040516020818303038152906040529392505050565b6001600160a01b038116600090815260056020526040808220546001600160401b03911c16610811565b6060600e805461082690612186565b61168b6117ec565b806009548161169d6000546000190190565b6116a791906123b1565b11156112f85760405162461bcd60e51b8152600401610bbd906123c4565b6116cd6117ec565b6001600160a01b0381166117325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbd565b610bc681611846565b6117436117ec565b600b55565b60008160011115801561175c575060005482105b8015610811575050600090815260046020526040902054600160e01b161590565b600081806001116117d3576000548110156117d35760008181526004602052604081205490600160e01b821690036117d1575b806000036110ce5750600019016000818152600460205260409020546117b0565b505b604051636f96cda160e11b815260040160405180910390fd5b6008546001600160a01b03163314610e015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bbd565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60408051608081018252600080825260208201819052918101829052606081019190915260008281526004602052604090205461081190611b94565b60008054908290036118f95760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146119a857808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611970565b50816000036119c957604051622e076360e81b815260040160405180910390fd5b60005550505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a07903390899088908890600401612454565b6020604051808303816000875af1925050508015611a42575060408051601f3d908101601f19168201909252611a3f91810190612491565b60015b611aa0573d808015611a70576040519150601f19603f3d011682016040523d82523d6000602084013e611a75565b606091505b508051600003611a98576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b604080516080810182526000808252602082018190529181018290526060810191909152610811611aee8361177d565b611b94565b60606012805461082690612186565b60606000611b0f83611bdb565b60010190506000816001600160401b03811115611b2e57611b2e611f88565b6040519080825280601f01601f191660200182016040528015611b58576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611b6257509392505050565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611c1a5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611c46576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611c6457662386f26fc10000830492506010015b6305f5e1008310611c7c576305f5e100830492506008015b6127108310611c9057612710830492506004015b60648310611ca2576064830492506002015b600a83106108115760010192915050565b6001600160e01b031981168114610bc657600080fd5b600060208284031215611cdb57600080fd5b81356110ce81611cb3565b60005b83811015611d01578181015183820152602001611ce9565b50506000910152565b60008151808452611d22816020860160208601611ce6565b601f01601f19169290920160200192915050565b6020815260006110ce6020830184611d0a565b600060208284031215611d5b57600080fd5b5035919050565b80356001600160a01b0381168114611d7957600080fd5b919050565b60008060408385031215611d9157600080fd5b611d9a83611d62565b946020939093013593505050565b600080600060608486031215611dbd57600080fd5b611dc684611d62565b9250611dd460208501611d62565b9150604084013590509250925092565b60008060208385031215611df757600080fd5b82356001600160401b0380821115611e0e57600080fd5b818501915085601f830112611e2257600080fd5b813581811115611e3157600080fd5b866020828501011115611e4357600080fd5b60209290920196919550909350505050565b60008060208385031215611e6857600080fd5b82356001600160401b0380821115611e7f57600080fd5b818501915085601f830112611e9357600080fd5b813581811115611ea257600080fd5b8660208260051b8501011115611e4357600080fd5b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b6020808252825182820181905260009190848201906040850190845b81811015610eff57611f22838551611eb7565b9284019260809290920191600101611f0f565b600060208284031215611f4757600080fd5b6110ce82611d62565b6020808252825182820181905260009190848201906040850190845b81811015610eff57835183529284019291840191600101611f6c565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115611fb857611fb8611f88565b604051601f8501601f19908116603f01168101908282118183101715611fe057611fe0611f88565b81604052809350858152868686011115611ff957600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561202557600080fd5b81356001600160401b0381111561203b57600080fd5b8201601f8101841361204c57600080fd5b611ab684823560208401611f9e565b60008060006060848603121561207057600080fd5b61207984611d62565b95602085013595506040909401359392505050565b600080604083850312156120a157600080fd5b6120aa83611d62565b9150602083013580151581146120bf57600080fd5b809150509250929050565b600080600080608085870312156120e057600080fd5b6120e985611d62565b93506120f760208601611d62565b92506040850135915060608501356001600160401b0381111561211957600080fd5b8501601f8101871361212a57600080fd5b61213987823560208401611f9e565b91505092959194509250565b608081016108118284611eb7565b6000806040838503121561216657600080fd5b61216f83611d62565b915061217d60208401611d62565b90509250929050565b600181811c9082168061219a57607f821691505b6020821081036121ba57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610c0b57600081815260208120601f850160051c810160208610156121e75750805b601f850160051c820191505b81811015610b1e578281556001016121f3565b6001600160401b0383111561221d5761221d611f88565b6122318361222b8354612186565b836121c0565b6000601f841160018114612265576000851561224d5750838201355b600019600387901b1c1916600186901b1783556122bf565b600083815260209020601f19861690835b828110156122965786850135825560209485019460019092019101612276565b50868210156122b35760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b634e487b7160e01b600052603260045260246000fd5b81516001600160401b038111156122f5576122f5611f88565b612309816123038454612186565b846121c0565b602080601f83116001811461233e57600084156123265750858301515b600019600386901b1c1916600185901b178555610b1e565b600085815260208120601f198616915b8281101561236d5788860151825594840194600190910190840161234e565b508582101561238b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808201808211156108115761081161239b565b60208082526018908201527f6d656d69676f733a204f766572206d617820737570706c790000000000000000604082015260600190565b80820281158282048414176108115761081161239b565b818103818111156108115761081161239b565b60008351612437818460208801611ce6565b83519083019061244b818360208801611ce6565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061248790830184611d0a565b9695505050505050565b6000602082840312156124a357600080fd5b81516110ce81611cb356fea2646970667358221220b7086a2263629ccedc287a39b3ca6b2ca48a344bcbc0630a7dce9f501914e99464736f6c63430008120033