0x608060405234801561001057600080fd5b5060405161001d9061005f565b604051809103906000f080158015610039573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b039290921691909117905561006c565b612654806104ad83390190565b6104328061007b6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80630f259c931461003b5780635c60da1b1461006a575b600080fd5b61004e61004936600461022c565b61007d565b6040516001600160a01b03909116815260200160405180910390f35b60005461004e906001600160a01b031681565b60008054610093906001600160a01b031661018e565b604051627cd0ad60e71b81529091506001600160a01b03821690633e685680906100c19087906004016103b9565b600060405180830381600087803b1580156100db57600080fd5b505af11580156100ef573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b15801561013457600080fd5b505af1158015610148573d6000803e3d6000fd5b505050507f2b9b4291e48c9aecbc39b1c0b56f0aa2bcca772b5376996b26428210ab5bc6a433828660405161017f939291906103ce565b60405180910390a19392505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166102275760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640160405180910390fd5b919050565b60008060008385036101a081121561024357600080fd5b6101808082121561025357600080fd5b859450840135905067ffffffffffffffff8082111561027157600080fd5b818601915086601f83011261028557600080fd5b81358181111561029457600080fd5b8760208285010111156102a657600080fd5b6020830194508093505050509250925092565b80356001600160a01b038116811461022757600080fd5b803563ffffffff8116811461022757600080fd5b6102fe826102f1836102b9565b6001600160a01b03169052565b6020810135602083015260408101356040830152606081013560608301526080810135608083015260a081013560a083015260c081013560c083015261034660e082016102d0565b63ffffffff1660e083015261010061035f8282016102d0565b63ffffffff16908301526101206103778282016102d0565b63ffffffff169083015261014061038f8282016102d0565b63ffffffff16908301526101606103a78282016102b9565b6001600160a01b031692019190915250565b61018081016103c882846102e4565b92915050565b6001600160a01b038481168252831660208201526101c081016103f460408301846102e4565b94935050505056fea2646970667358221220e1cef24f3774b2ac85fa22824e815da917558b0c225248548eb06fe5eef4559164736f6c634300080e0033608060405234801561001057600080fd5b50612634806100206000396000f3fe6080604052600436106102255760003560e01c80639223de0511610123578063c89039c5116100ab578063e02cec511161006f578063e02cec511461069d578063e1b14904146106bd578063f2fde38b146106d2578063f5184f9e146106f2578063f89be5931461071657600080fd5b8063c89039c51461060d578063ca75960b1461062d578063cf23574314610644578063d67fd58214610664578063da284dcc1461067957600080fd5b8063bfc102a0116100f2578063bfc102a01461056d578063c033a4901461059a578063c1cbbca7146105ca578063c78f19f9146105dd578063c80ec522146105f357600080fd5b80639223de0514610500578063a72599b11461052d578063b071cbe614610542578063bf89662d1461055857600080fd5b80633e685680116101b15780636ed93dd0116101755780636ed93dd014610483578063715018a61461049a57806378e97925146104af5780637b1b1de6146104cc5780638da5cb5b146104e257600080fd5b80633e685680146103f5578063426fc24c14610417578063449a054a1461043757806345d5149f1461044d578063502c9bd51461046357600080fd5b806322758a4a116101f857806322758a4a1461031f57806324285762146103575780632de63cbb146103775780633163e3a8146103975780633197cbb6146103d057600080fd5b80631573c0fa1461022a57806316853d821461026f57806319cc1ec4146102e557806320d8836414610309575b600080fd5b34801561023657600080fd5b5061025a61024536600461214a565b60a76020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561027b57600080fd5b5061028f61028a366004612167565b61072c565b6040516102669190600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b3480156102f157600080fd5b506102fb609e5481565b604051908152602001610266565b34801561031557600080fd5b506102fb60a45481565b34801561032b57600080fd5b5060a25461033f906001600160a01b031681565b6040516001600160a01b039091168152602001610266565b34801561036357600080fd5b506102fb61037236600461214a565b610881565b34801561038357600080fd5b506102fb61039236600461214a565b610922565b3480156103a357600080fd5b5060a1546103bb90600160401b900463ffffffff1681565b60405163ffffffff9091168152602001610266565b3480156103dc57600080fd5b5060a1546103bb90640100000000900463ffffffff1681565b34801561040157600080fd5b50610415610410366004612189565b6109b8565b005b34801561042357600080fd5b506104156104323660046121ee565b610fa9565b34801561044357600080fd5b506102fb60a55481565b34801561045957600080fd5b506102fb609d5481565b34801561046f57600080fd5b5061033f61047e366004612230565b6110c8565b34801561048f57600080fd5b506103bb620f424081565b3480156104a657600080fd5b506104156110f2565b3480156104bb57600080fd5b5060a1546103bb9063ffffffff1681565b3480156104d857600080fd5b506102fb609f5481565b3480156104ee57600080fd5b506033546001600160a01b031661033f565b34801561050c57600080fd5b506102fb61051b36600461214a565b60976020526000908152604090205481565b34801561053957600080fd5b506102fb611106565b34801561054e57600080fd5b506102fb609b5481565b34801561056457600080fd5b5061025a611127565b34801561057957600080fd5b506102fb61058836600461214a565b60a36020526000908152604090205481565b3480156105a657600080fd5b5061025a6105b536600461214a565b60986020526000908152604090205460ff1681565b6104156105d8366004612230565b61117e565b3480156105e957600080fd5b506102fb60a05481565b3480156105ff57600080fd5b5060a65461025a9060ff1681565b34801561061957600080fd5b50609a5461033f906001600160a01b031681565b34801561063957600080fd5b506103bb62093a8081565b34801561065057600080fd5b5061041561065f366004612249565b61127a565b34801561067057600080fd5b506099546102fb565b34801561068557600080fd5b5060a1546103bb90600160601b900463ffffffff1681565b3480156106a957600080fd5b506104156106b83660046121ee565b611519565b3480156106c957600080fd5b506104156116d2565b3480156106de57600080fd5b506104156106ed36600461214a565b6117b8565b3480156106fe57600080fd5b5060a1546103bb90600160801b900463ffffffff1681565b34801561072257600080fd5b506102fb609c5481565b61076c6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b609c5460a554101561077d57600080fd5b6000609b5460a554116107925760a554610796565b609b545b905060006107a4828661182e565b905060006107b2838661182e565b905060006107c082846122cb565b6107ca90856122e3565b90506000609f5485670de0b6b3a76400006107e591906122fa565b6107ef9190612319565b60a154909150600090610810908390600160801b900463ffffffff1661182e565b9050600060a05485670de0b6b3a764000061082b91906122fa565b6108359190612319565b9050600061084382856122cb565b6040805160e0810182529889526020890197909752958701949094526060860192909252608085015260a08401525060c08201529150505b92915050565b6000609b5460a554116108975761087b82611848565b6000609f546108a461187b565b609b546108b191906122fa565b6108bb9190612319565b60a5546001600160a01b03851660009081526097602052604090205491925061091b916108e99084906122fa565b6108f39190612319565b60a15461091090600160801b900463ffffffff16620f424061233b565b63ffffffff1661182e565b9392505050565b60a65460009060ff16158061093b5750609b5460a55411155b8061095e57506001600160a01b038216600090815260a7602052604090205460ff165b1561096b57506000919050565b6001600160a01b03821660009081526097602052604081205460a554609b5491929161099790846122fa565b6109a19190612319565b905060006109af82846122e3565b95945050505050565b600054610100900460ff16158080156109d85750600054600160ff909116105b806109f25750303b1580156109f2575060005460ff166001145b610a5a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610a7d576000805461ff0019166101001790555b610a8561190d565b610a8d61193c565b816040013582602001351015610ad95760405162461bcd60e51b8152602060048201526011602482015270068617264636170203c20736f667463617607c1b6044820152606401610a51565b6000826040013511610b195760405162461bcd60e51b815260206004820152600960248201526803020736f66746361760bc1b6044820152606401610a51565b816080013582606001351015610b715760405162461bcd60e51b815260206004820152601d60248201527f6d617820636f6e747269627574696f6e20616d6f756e74203c206d696e0000006044820152606401610a51565b60008260a0013511610baf5760405162461bcd60e51b81526020600482015260076024820152663020707269636560c81b6044820152606401610a51565b8160a001358260c001351015610c075760405162461bcd60e51b815260206004820152601f60248201527f6c697374696e67207072696365203c2070726963652070657220746f6b656e006044820152606401610a51565b42610c19610100840160e08501612360565b63ffffffff161015610c625760405162461bcd60e51b81526020600482015260126024820152711cdd185c9d081d1a5b59481a5b881c185cdd60721b6044820152606401610a51565b610c73610100830160e08401612360565b63ffffffff16610c8b61012084016101008501612360565b63ffffffff1611610cd65760405162461bcd60e51b8152602060048201526015602482015274656e642074696d65203c2073746172742074696d6560581b6044820152606401610a51565b610ce861012083016101008401612360565b63ffffffff16610d0061014084016101208501612360565b63ffffffff161015610d4a5760405162461bcd60e51b81526020600482015260136024820152727467652074696d65203c20656e642074696d6560681b6044820152606401610a51565b62030d40610d6061016084016101408501612360565b63ffffffff161115610db45760405162461bcd60e51b815260206004820152601960248201527f666565206f6e207075726368617365206d6178206c696d6974000000000000006044820152606401610a51565b610dc1602083018361214a565b609a80546001600160a01b0319166001600160a01b03929092169190911790556020820135609b556040820135609c556080820135609d556060820135609e5560a080830135609f5560c08301359055610e22610100830160e08401612360565b60a1805463ffffffff191663ffffffff92909216919091179055610e4e61012083016101008401612360565b60a1805463ffffffff929092166401000000000267ffffffff0000000019909216919091179055610e8761014083016101208401612360565b60a1805463ffffffff92909216600160401b026bffffffff00000000000000001990921691909117905562093a80610ec761014084016101208501612360565b610ed19190612386565b60a1805463ffffffff92909216600160601b0263ffffffff60601b19909216919091179055610f0861016083016101408401612360565b60a1805463ffffffff92909216600160801b0263ffffffff60801b19909216919091179055610f3f6101808301610160840161214a565b60a280546001600160a01b0319166001600160a01b03929092169190911790558015610fa5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610fb161196b565b60005b818110156110bd576000838383818110610fd057610fd06123ae565b9050602002016020810190610fe5919061214a565b90506000610ff282610922565b9050600081116110395760405162461bcd60e51b81526020600482015260126024820152710c08195e18d95cdcda5d9948185b5bdd5b9d60721b6044820152606401610a51565b6001600160a01b038216600090815260a760205260409020805460ff1916600117905561106682826119c4565b604080516001600160a01b0384168152602081018390527f38f05b7a363ae2f7946bd5ef00d31ace46e617e7820003905e28d31e09cf33bc910160405180910390a1505080806110b5906123c4565b915050610fb4565b50610fa56001606555565b609981815481106110d857600080fd5b6000918252602090912001546001600160a01b0316905081565b6110fa611a7a565b6111046000611ad4565b565b600080611111611b26565b9050609b548111156111225750609b545b919050565b60a1546000908190640100000000900463ffffffff164211801561114e5750609c5460a554105b90508080611178575060a154600160601b900463ffffffff1642118015611178575060a65460ff16155b91505090565b61118661196b565b336000908152609760205260409020546111a08282611b88565b806000036111eb57609980546001810182556000919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000180546001600160a01b031916331790555b336000908152609760205260408120805484929061120a9084906122cb565b925050819055508160a5600082825461122391906122cb565b9091555061123390503383611d5a565b60408051338152602081018490527f4d154d4aae216bed6d0926db77c00df2b57c6b5ba4eee05775de20facede3a7b910160405180910390a1506112776001606555565b50565b60a2546001600160a01b03166112c15760405162461bcd60e51b815260206004820152600c60248201526b1b9bc81dda1a5d195b1a5cdd60a21b6044820152606401610a51565b60a2546001600160a01b03163314806112e457506033546001600160a01b031633145b61131f5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b6044820152606401610a51565b60008390036113615760405162461bcd60e51b815260206004820152600e60248201526d30206c656e67746820617272617960901b6044820152606401610a51565b8281146113b05760405162461bcd60e51b815260206004820152601760248201527f646966666572656e74206172726179206c656e677468730000000000000000006044820152606401610a51565b6000805b848110156114fa5760008686838181106113d0576113d06123ae565b90506020020160208101906113e5919061214a565b6001600160a01b038116600090815260a36020526040902054909150156114595760405162461bcd60e51b815260206004820152602260248201527f736f6d652075736572732061726520616c72656164792077686974656c697374604482015261195960f21b6064820152608401610a51565b600085858481811061146d5761146d6123ae565b6001600160a01b038516600090815260a36020908152604090912091029290920135918290555090506114a081856122cb565b604080516001600160a01b0385168152602081018490529195507f447615df38266f7c2e25889e02cfbee3ed7713cc91ac1629e2bbcc955fdc8190910160405180910390a1505080806114f2906123c4565b9150506113b4565b508060a4600082825461150d91906122cb565b90915550505050505050565b61152161196b565b611529611127565b6115665760405162461bcd60e51b815260206004820152600e60248201526d6e6f7420726566756e6461626c6560901b6044820152606401610a51565b60005b818110156110bd576000838383818110611585576115856123ae565b905060200201602081019061159a919061214a565b6001600160a01b038116600090815260976020526040902054909150806115f55760405162461bcd60e51b815260206004820152600f60248201526e0c081c99599d5b9908185b5bdd5b9d608a1b6044820152606401610a51565b6001600160a01b03821660009081526098602052604090205460ff161561164e5760405162461bcd60e51b815260206004820152600d60248201526c1d5cd95c881c99599d5b991959609a1b6044820152606401610a51565b6001600160a01b0382166000908152609860205260409020805460ff1916600117905561167b82826119c4565b604080516001600160a01b0384168152602081018390527fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d910160405180910390a1505080806116ca906123c4565b915050611569565b6116da611a7a565b6116e261196b565b60006116ec611106565b9050600081116117315760405162461bcd60e51b815260206004820152601060248201526f6e6f7420776974686472617761626c6560801b6044820152606401610a51565b60a6805460ff191660011790556117596117536033546001600160a01b031690565b826119c4565b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436461178c6033546001600160a01b031690565b604080516001600160a01b039092168252602082018490520160405180910390a1506111046001606555565b6117c0611a7a565b6001600160a01b0381166118255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a51565b61127781611ad4565b6000620f424061183e83856122fa565b61091b9190612319565b600061087b609f5461185861187b565b6001600160a01b0385166000908152609760205260409020546108e991906122fa565b600080609a60009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f591906123dd565b9050611902816024612400565b61117890600a612507565b600054610100900460ff166119345760405162461bcd60e51b8152600401610a5190612516565b611104611ddb565b600054610100900460ff166119635760405162461bcd60e51b8152600401610a5190612516565b611104611e0b565b6002606554036119bd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a51565b6002606555565b609a546001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed1901611a5c576040516000906001600160a01b0384169083156108fc0290849084818181858888f19350505050905080611a575760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610a51565b505050565b609a54610fa5906001600160a01b03168383611e32565b6001606555565b6033546001600160a01b031633146111045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a51565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60a65460009060ff16158015611b4b575060a154600160401b900463ffffffff164210155b8015611b66575060a154600160601b900463ffffffff164211155b8015611b765750609c5460a55410155b15611b82575060a55490565b50600090565b60008211611bc35760405162461bcd60e51b81526020600482015260086024820152670c08185b5bdd5b9d60c21b6044820152606401610a51565b609d54611bd082846122cb565b1015611c0f5760405162461bcd60e51b815260206004820152600e60248201526d616d6f756e7420746f6f206c6f7760901b6044820152606401610a51565b609e54611c1c82846122cb565b1115611c5c5760405162461bcd60e51b815260206004820152600f60248201526e0c2dadeeadce840e8dede40d0d2ced608b1b6044820152606401610a51565b60a15463ffffffff164211611ca65760405162461bcd60e51b815260206004820152601060248201526f6265666f726520737461727454696d6560801b6044820152606401610a51565b60a154640100000000900463ffffffff164210611cf55760405162461bcd60e51b815260206004820152600d60248201526c616674657220656e6454696d6560981b6044820152606401610a51565b60a2546001600160a01b031615610fa55733600090815260a36020526040902054611d2082846122cb565b1115610fa55760405162461bcd60e51b81526020600482015260096024820152681dda1a5d195b1a5cdd60ba1b6044820152606401610a51565b609a546001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed1901611dc357803414610fa55760405162461bcd60e51b815260206004820152601060248201526f696e76616c69642074782076616c756560801b6044820152606401610a51565b609a54610fa5906001600160a01b0316833084611e95565b600054610100900460ff16611e025760405162461bcd60e51b8152600401610a5190612516565b61110433611ad4565b600054610100900460ff16611a735760405162461bcd60e51b8152600401610a5190612516565b6040516001600160a01b038316602482015260448101829052611a5790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ed3565b6040516001600160a01b0380851660248301528316604482015260648101829052611ecd9085906323b872dd60e01b90608401611e5e565b50505050565b6000611f28826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fa59092919063ffffffff16565b805190915015611a575780806020019051810190611f469190612561565b611a575760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a51565b6060611fb48484600085611fbc565b949350505050565b60608247101561201d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a51565b600080866001600160a01b0316858760405161203991906125af565b60006040518083038185875af1925050503d8060008114612076576040519150601f19603f3d011682016040523d82523d6000602084013e61207b565b606091505b509150915061208c87838387612097565b979650505050505050565b606083156121065782516000036120ff576001600160a01b0385163b6120ff5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a51565b5081611fb4565b611fb4838381511561211b5781518083602001fd5b8060405162461bcd60e51b8152600401610a5191906125cb565b6001600160a01b038116811461127757600080fd5b60006020828403121561215c57600080fd5b813561091b81612135565b6000806040838503121561217a57600080fd5b50508035926020909101359150565b6000610180828403121561219c57600080fd5b50919050565b60008083601f8401126121b457600080fd5b50813567ffffffffffffffff8111156121cc57600080fd5b6020830191508360208260051b85010111156121e757600080fd5b9250929050565b6000806020838503121561220157600080fd5b823567ffffffffffffffff81111561221857600080fd5b612224858286016121a2565b90969095509350505050565b60006020828403121561224257600080fd5b5035919050565b6000806000806040858703121561225f57600080fd5b843567ffffffffffffffff8082111561227757600080fd5b612283888389016121a2565b9096509450602087013591508082111561229c57600080fd5b506122a9878288016121a2565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b600082198211156122de576122de6122b5565b500190565b6000828210156122f5576122f56122b5565b500390565b6000816000190483118215151615612314576123146122b5565b500290565b60008261233657634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff83811690831681811015612358576123586122b5565b039392505050565b60006020828403121561237257600080fd5b813563ffffffff8116811461091b57600080fd5b600063ffffffff8083168185168083038211156123a5576123a56122b5565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016123d6576123d66122b5565b5060010190565b6000602082840312156123ef57600080fd5b815160ff8116811461091b57600080fd5b600060ff821660ff84168082101561241a5761241a6122b5565b90039392505050565b600181815b8085111561245e578160001904821115612444576124446122b5565b8085161561245157918102915b93841c9390800290612428565b509250929050565b6000826124755750600161087b565b816124825750600061087b565b816001811461249857600281146124a2576124be565b600191505061087b565b60ff8411156124b3576124b36122b5565b50506001821b61087b565b5060208310610133831016604e8410600b84101617156124e1575081810a61087b565b6124eb8383612423565b80600019048211156124ff576124ff6122b5565b029392505050565b600061091b60ff841683612466565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60006020828403121561257357600080fd5b8151801515811461091b57600080fd5b60005b8381101561259e578181015183820152602001612586565b83811115611ecd5750506000910152565b600082516125c1818460208701612583565b9190910192915050565b60208152600082518060208401526125ea816040850160208701612583565b601f01601f1916919091016040019291505056fea2646970667358221220c183146f9ecbc16df9811c04d8f370fd0bc79b6b6bfb8a81aebd69de2261d43064736f6c634300080e0033