6080604052600d805461ffff19169055660eebe0b40e8000600e556002600f55600a6010556019601155611af46012553480156200003c57600080fd5b506040518060400160405280601481526020017f53696c69636f6e56616c6c657942616e6b6572730000000000000000000000008152506040518060400160405280600381526020016229ab2160e91b8152508160029081620000a09190620001c4565b506003620000af8282620001c4565b50600160005550506001600855620000c733620000cd565b62000290565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200014a57607f821691505b6020821081036200016b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001bf57600081815260208120601f850160051c810160208610156200019a5750805b601f850160051c820191505b81811015620001bb57828155600101620001a6565b5050505b505050565b81516001600160401b03811115620001e057620001e06200011f565b620001f881620001f1845462000135565b8462000171565b602080601f831160018114620002305760008415620002175750858301515b600019600386901b1c1916600185901b178555620001bb565b600085815260208120601f198616915b82811015620002615788860151825594840194600190910190840162000240565b5085821015620002805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6126fa80620002a06000396000f3fe60806040526004361061027d5760003560e01c8063715018a61161014f578063beb9716d116100c1578063dc33e6811161007a578063dc33e6811461076f578063e268e4d31461078f578063e7572230146107af578063e985e9c5146107cf578063f2fde38b14610818578063f72effad1461083857600080fd5b8063beb9716d146106b3578063c1eb1840146106cd578063c23dc68f146106ec578063c6f6f21614610719578063c87b56dd14610739578063d85d7f5b1461075957600080fd5b806399a2557a1161011357806399a2557a1461060b5780639e598ed81461062b578063a0712d681461064b578063a22cb4651461065e578063aa1b103f1461067e578063b88d4fde1461069357600080fd5b8063715018a6146105815780638462151c14610596578063868ed356146105c35780638da5cb5b146105d857806395d89b41146105f657600080fd5b80633ccfd60b116101f35780635b74efcf116101ac5780635b74efcf146104be5780635bbb2177146104d45780636352211e146105015780636a721400146105215780636f8b44b01461054157806370a082311461056157600080fd5b80633ccfd60b1461042857806342842e0e1461043d578063453c23101461045d57806346b253e4146104735780634b980d671461048857806355f804b31461049e57600080fd5b806313faede61161024557806313faede61461035357806318160ddd146103775780631d3d7d641461039457806323b872dd146103a95780632a55205a146103c957806337beafe01461040857600080fd5b806301ffc9a71461028257806304634d8d146102b757806306fdde03146102d9578063081812fc146102fb578063095ea7b314610333575b600080fd5b34801561028e57600080fd5b506102a261029d366004611f5a565b610858565b60405190151581526020015b60405180910390f35b3480156102c357600080fd5b506102d76102d2366004611f8e565b610878565b005b3480156102e557600080fd5b506102ee61088e565b6040516102ae9190612021565b34801561030757600080fd5b5061031b610316366004612034565b610920565b6040516001600160a01b0390911681526020016102ae565b34801561033f57600080fd5b506102d761034e36600461204d565b610964565b34801561035f57600080fd5b50610369600e5481565b6040519081526020016102ae565b34801561038357600080fd5b506001546000540360001901610369565b3480156103a057600080fd5b506102d7610a04565b3480156103b557600080fd5b506102d76103c4366004612077565b610a51565b3480156103d557600080fd5b506103e96103e43660046120b3565b610be2565b604080516001600160a01b0390931683526020830191909152016102ae565b34801561041457600080fd5b506102d76104233660046120d5565b610c8e565b34801561043457600080fd5b506102d7610cb8565b34801561044957600080fd5b506102d7610458366004612077565b610d2c565b34801561046957600080fd5b5061036960115481565b34801561047f57600080fd5b506102d7610d4c565b34801561049457600080fd5b5061036960105481565b3480156104aa57600080fd5b506102d76104b93660046120f0565b610d68565b3480156104ca57600080fd5b50610369600f5481565b3480156104e057600080fd5b506104f46104ef366004612162565b610d7d565b6040516102ae9190612202565b34801561050d57600080fd5b5061031b61051c366004612034565b610e49565b34801561052d57600080fd5b5061036961053c366004612034565b610e54565b34801561054d57600080fd5b506102d761055c366004612034565b610f81565b34801561056d57600080fd5b5061036961057c3660046120d5565b610f8e565b34801561058d57600080fd5b506102d7610fdd565b3480156105a257600080fd5b506105b66105b13660046120d5565b610ff1565b6040516102ae9190612244565b3480156105cf57600080fd5b506103696110fa565b3480156105e457600080fd5b50600b546001600160a01b031661031b565b34801561060257600080fd5b506102ee61110a565b34801561061757600080fd5b506105b661062636600461227c565b611119565b34801561063757600080fd5b506103696106463660046120d5565b6112a1565b6102d7610659366004612034565b6112cf565b34801561066a57600080fd5b506102d76106793660046122af565b611424565b34801561068a57600080fd5b506102d76114b9565b34801561069f57600080fd5b506102d76106ae3660046122f6565b6114cb565b3480156106bf57600080fd5b50600d546102a29060ff1681565b3480156106d957600080fd5b50600d546102a290610100900460ff1681565b3480156106f857600080fd5b5061070c610707366004612034565b611515565b6040516102ae91906123d2565b34801561072557600080fd5b506102d7610734366004612034565b61159d565b34801561074557600080fd5b506102ee610754366004612034565b6115aa565b34801561076557600080fd5b5061036960125481565b34801561077b57600080fd5b5061036961078a3660046120d5565b61162d565b34801561079b57600080fd5b506102d76107aa366004612034565b611638565b3480156107bb57600080fd5b506103696107ca366004612034565b611645565b3480156107db57600080fd5b506102a26107ea3660046123e0565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561082457600080fd5b506102d76108333660046120d5565b6116a5565b34801561084457600080fd5b506102d7610853366004612413565b61171b565b600061086382611796565b806108725750610872826117e4565b92915050565b610880611819565b61088a8282611873565b5050565b60606002805461089d90612436565b80601f01602080910402602001604051908101604052809291908181526020018280546108c990612436565b80156109165780601f106108eb57610100808354040283529160200191610916565b820191906000526020600020905b8154815290600101906020018083116108f957829003601f168201915b5050505050905090565b600061092b82611970565b610948576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061096f82610e49565b9050336001600160a01b038216146109a85761098b81336107ea565b6109a8576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610a0c611819565b6013546001600160a01b0316610a3457604051622306d760e81b815260040160405180910390fd5b600d805461ff001981166101009182900460ff1615909102179055565b6000610a5c826119a5565b9050836001600160a01b0316816001600160a01b031614610a8f5760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054610abb8187335b6001600160a01b039081169116811491141790565b610ae657610ac986336107ea565b610ae657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610b0d57604051633a954ecd60e21b815260040160405180910390fd5b8015610b1857600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003610baa57600184016000818152600460205260408120549003610ba8576000548114610ba85760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03166000805160206126a583398151915260405160405180910390a45b505050505050565b6000828152600a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610c575750604080518082019091526009546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610c76906001600160601b031687612486565b610c80919061249d565b915196919550909350505050565b610c96611819565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b610cc0611819565b604051600090339047908381818185875af1925050503d8060008114610d02576040519150601f19603f3d011682016040523d82523d6000602084013e610d07565b606091505b5050905080610d29576040516327fcd9d160e01b815260040160405180910390fd5b50565b610d47838383604051806020016040528060008152506114cb565b505050565b610d54611819565b600d805460ff19811660ff90911615179055565b610d70611819565b600c610d47828483612505565b60608160008167ffffffffffffffff811115610d9b57610d9b6122e0565b604051908082528060200260200182016040528015610ded57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610db95790505b50905060005b828114610e4057610e1b868683818110610e0f57610e0f6125c6565b90506020020135611515565b828281518110610e2d57610e2d6125c6565b6020908102919091010152600101610df3565b50949350505050565b6000610872826119a5565b6000610e5e611a14565b600d54610100900460ff16610e9757600b546001600160a01b03163314610e9757604051622306d760e81b815260040160405180910390fd5b6000610ea283610e49565b90506001600160a01b0381163314610edf57600b546001600160a01b03163314610edf57604051634f962acb60e01b815260040160405180910390fd5b6013546001600160a01b0316610ef6846001611a6d565b604051631538158f60e11b81526001600160a01b0383811660048301526024820186905260009190831690632a702b1e906044016020604051808303816000875af1158015610f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6d91906125dc565b9350505050610f7c6001600855565b919050565b610f89611819565b601255565b60006001600160a01b038216610fb7576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b610fe5611819565b610fef6000611ba5565b565b6060600080600061100185610f8e565b905060008167ffffffffffffffff81111561101e5761101e6122e0565b604051908082528060200260200182016040528015611047578160200160208202803683370190505b50905061107460408051608081018252600080825260208201819052918101829052606081019190915290565b60015b8386146110ee5761108781611bf7565b915081604001516110e65781516001600160a01b0316156110a757815194505b876001600160a01b0316856001600160a01b0316036110e657808387806001019850815181106110d9576110d96125c6565b6020026020010181815250505b600101611077565b50909695505050505050565b600061110560015490565b905090565b60606003805461089d90612436565b606081831061113b57604051631960ccad60e11b815260040160405180910390fd5b60008061114760005490565b9050600185101561115757600194505b80841115611163578093505b600061116e87610f8e565b90508486101561118d5785850381811015611187578091505b50611191565b5060005b60008167ffffffffffffffff8111156111ac576111ac6122e0565b6040519080825280602002602001820160405280156111d5578160200160208202803683370190505b509050816000036111eb57935061129a92505050565b60006111f688611515565b905060008160400151611207575080515b885b8881141580156112195750848714155b1561128e5761122781611bf7565b925082604001516112865782516001600160a01b03161561124757825191505b8a6001600160a01b0316826001600160a01b0316036112865780848880600101995081518110611279576112796125c6565b6020026020010181815250505b600101611209565b50505092835250909150505b9392505050565b6000610872826001600160a01b031660009081526005602052604090205460801c67ffffffffffffffff1690565b3233146113195760405162461bcd60e51b81526020600482015260136024820152723737ba1037b934b3b4b730b61039b2b73232b960691b60448201526064015b60405180910390fd5b611321611a14565b600061132c82611645565b600d5490915060ff166113525760405163af79b43760e01b815260040160405180910390fd5b6012546113609060016125f5565b8261136e6000546000190190565b61137891906125f5565b11156113975760405163d05cb60960e01b815260040160405180910390fd5b6011546113a59060016125f5565b826113af33611c33565b6113b991906125f5565b11156113d857604051637ab0312d60e11b815260040160405180910390fd5b6010546113e69060016125f5565b8211156114065760405163162d230560e11b815260040160405180910390fd5b6114103383611c5c565b61141981611d36565b50610d296001600855565b336001600160a01b0383160361144d5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114c1611819565b610fef6000600955565b6114d6848484610a51565b6001600160a01b0383163b1561150f576114f284848484611d95565b61150f576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b604080516080810182526000808252602082018190529181018290526060810191909152604080516080810182526000808252602082018190529181018290526060810191909152600183108061156e57506000548310155b156115795792915050565b61158283611bf7565b90508060400151156115945792915050565b61129a83611e80565b6115a5611819565b601055565b60606115b582611970565b6115d257604051630a14c4b560e41b815260040160405180910390fd5b60006115dc611eb5565b905080516000036115fc576040518060200160405280600081525061129a565b8061160684611ec4565b604051602001611617929190612608565b6040516020818303038152906040529392505050565b600061087282611c33565b611640611819565b601155565b60008061165133611c33565b90506000600f548210611665576000611673565b81600f546116739190612637565b905080841061169b576116868185612637565b600e546116939190612486565b949350505050565b5060009392505050565b6116ad611819565b6001600160a01b0381166117125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611310565b610d2981611ba5565b611723611819565b601254600154600054849190036000190161173e91906125f5565b111561178c5760405162461bcd60e51b815260206004820152601a60248201527f64657620796f752073686f756c64206b6e6f77206265747465720000000000006044820152606401611310565b61088a8183611c5c565b60006301ffc9a760e01b6001600160e01b0319831614806117c757506380ac58cd60e01b6001600160e01b03198316145b806108725750506001600160e01b031916635b5e139f60e01b1490565b60006001600160e01b0319821663152a902d60e11b148061087257506301ffc9a760e01b6001600160e01b0319831614610872565b600b546001600160a01b03163314610fef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611310565b6127106001600160601b03821611156118e15760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401611310565b6001600160a01b0382166119375760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401611310565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b600081600111158015611984575060005482105b8015610872575050600090815260046020526040902054600160e01b161590565b600081806001116119fb576000548110156119fb5760008181526004602052604081205490600160e01b821690036119f9575b8060000361129a5750600019016000818152600460205260409020546119d8565b505b604051636f96cda160e11b815260040160405180910390fd5b600260085403611a665760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611310565b6002600855565b6000611a78836119a5565b905080600080611a9686600090815260066020526040902080549091565b915091508415611ad657611aab818433610aa6565b611ad657611ab983336107ea565b611ad657604051632ce44b5f60e11b815260040160405180910390fd5b8015611ae157600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260046020526040812091909155600160e11b85169003611b6f57600186016000818152600460205260408120549003611b6d576000548114611b6d5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616906000805160206126a5833981519152908390a45050600180548101905550505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60408051608081018252600080825260208201819052918101829052606081019190915260008281526004602052604090205461087290611efc565b6001600160a01b03166000908152600560205260409081902054901c67ffffffffffffffff1690565b6000805490829003611c815760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083906000805160206126a58339815191528180a4600183015b818114611d0c57808360006000805160206126a5833981519152600080a4600101611ce6565b5081600003611d2d57604051622e076360e81b815260040160405180910390fd5b60005550505050565b80341015611d575760405163cd1c886760e01b815260040160405180910390fd5b80341115610d2957336108fc611d6d8334612637565b6040518115909202916000818181858888f1935050505015801561088a573d6000803e3d6000fd5b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611dca90339089908890889060040161264a565b6020604051808303816000875af1925050508015611e05575060408051601f3d908101601f19168201909252611e0291810190612687565b60015b611e63573d808015611e33576040519150601f19603f3d011682016040523d82523d6000602084013e611e38565b606091505b508051600003611e5b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b604080516080810182526000808252602082018190529181018290526060810191909152610872611eb0836119a5565b611efc565b6060600c805461089d90612436565b604080516080019081905280825b600183039250600a81066030018353600a900480611ed25750819003601f19909101908152919050565b604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff166020820152600160e01b831615159181019190915260e89190911c606082015290565b6001600160e01b031981168114610d2957600080fd5b600060208284031215611f6c57600080fd5b813561129a81611f44565b80356001600160a01b0381168114610f7c57600080fd5b60008060408385031215611fa157600080fd5b611faa83611f77565b915060208301356001600160601b0381168114611fc657600080fd5b809150509250929050565b60005b83811015611fec578181015183820152602001611fd4565b50506000910152565b6000815180845261200d816020860160208601611fd1565b601f01601f19169290920160200192915050565b60208152600061129a6020830184611ff5565b60006020828403121561204657600080fd5b5035919050565b6000806040838503121561206057600080fd5b61206983611f77565b946020939093013593505050565b60008060006060848603121561208c57600080fd5b61209584611f77565b92506120a360208501611f77565b9150604084013590509250925092565b600080604083850312156120c657600080fd5b50508035926020909101359150565b6000602082840312156120e757600080fd5b61129a82611f77565b6000806020838503121561210357600080fd5b823567ffffffffffffffff8082111561211b57600080fd5b818501915085601f83011261212f57600080fd5b81358181111561213e57600080fd5b86602082850101111561215057600080fd5b60209290920196919550909350505050565b6000806020838503121561217557600080fd5b823567ffffffffffffffff8082111561218d57600080fd5b818501915085601f8301126121a157600080fd5b8135818111156121b057600080fd5b8660208260051b850101111561215057600080fd5b80516001600160a01b0316825260208082015167ffffffffffffffff169083015260408082015115159083015260609081015162ffffff16910152565b6020808252825182820181905260009190848201906040850190845b818110156110ee576122318385516121c5565b928401926080929092019160010161221e565b6020808252825182820181905260009190848201906040850190845b818110156110ee57835183529284019291840191600101612260565b60008060006060848603121561229157600080fd5b61229a84611f77565b95602085013595506040909401359392505050565b600080604083850312156122c257600080fd5b6122cb83611f77565b915060208301358015158114611fc657600080fd5b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561230c57600080fd5b61231585611f77565b935061232360208601611f77565b925060408501359150606085013567ffffffffffffffff8082111561234757600080fd5b818701915087601f83011261235b57600080fd5b81358181111561236d5761236d6122e0565b604051601f8201601f19908116603f01168101908382118183101715612395576123956122e0565b816040528281528a60208487010111156123ae57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6080810161087282846121c5565b600080604083850312156123f357600080fd5b6123fc83611f77565b915061240a60208401611f77565b90509250929050565b6000806040838503121561242657600080fd5b8235915061240a60208401611f77565b600181811c9082168061244a57607f821691505b60208210810361246a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761087257610872612470565b6000826124ba57634e487b7160e01b600052601260045260246000fd5b500490565b601f821115610d4757600081815260208120601f850160051c810160208610156124e65750805b601f850160051c820191505b81811015610bda578281556001016124f2565b67ffffffffffffffff83111561251d5761251d6122e0565b6125318361252b8354612436565b836124bf565b6000601f841160018114612565576000851561254d5750838201355b600019600387901b1c1916600186901b1783556125bf565b600083815260209020601f19861690835b828110156125965786850135825560209485019460019092019101612576565b50868210156125b35760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156125ee57600080fd5b5051919050565b8082018082111561087257610872612470565b6000835161261a818460208801611fd1565b83519083019061262e818360208801611fd1565b01949350505050565b8181038181111561087257610872612470565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061267d90830184611ff5565b9695505050505050565b60006020828403121561269957600080fd5b815161129a81611f4456feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ca40b7bc1511edb703f4b448714faa03d5a48dacfa3337c57d8a3e332b619e7164736f6c63430008120033