0x60806040523480156200001157600080fd5b506040516200289938038062002899833981016040819052620000349162000145565b6200003f33620000c6565b8051600180546001600160a01b03199081166001600160a01b03938416179091556020830151600280549092169083161790556040820151600380546060850151608090950151929093166001600160a81b031990931692909217600160a01b60ff948516021760ff60a81b1916600160a81b9390911692909202919091179055620001ec565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200012e57600080fd5b919050565b805160ff811681146200012e57600080fd5b600060a082840312156200015857600080fd5b60405160a081016001600160401b03811182821017156200018957634e487b7160e01b600052604160045260246000fd5b604052620001978362000116565b8152620001a76020840162000116565b6020820152620001ba6040840162000116565b6040820152620001cd6060840162000133565b6060820152620001e06080840162000133565b60808201529392505050565b61269d80620001fc6000396000f3fe6080604052600436106100c25760003560e01c80638da5cb5b1161007f578063b379c07511610059578063b379c075146102b3578063c66a4a3d146102d3578063d37e411b1461030b578063f2fde38b1461032b57600080fd5b80638da5cb5b1461024157806394d9cb7e14610273578063af6e524d1461029357600080fd5b8063186216ab146100c7578063235e5199146101145780632c6c8c09146101965780634c060c04146101ce578063715018a6146101fc578063874e968c14610213575b600080fd5b3480156100d357600080fd5b506100e76100e23660046118cc565b61034b565b6040805160ff909416845260208401929092526001600160401b0316908201526060015b60405180910390f35b34801561012057600080fd5b50600154600254600354610158926001600160a01b03908116928116919081169060ff600160a01b8204811691600160a81b90041685565b604080516001600160a01b0396871681529486166020860152929094169183019190915260ff9081166060830152909116608082015260a00161010b565b6101a96101a4366004611964565b610366565b604080519384526001600160401b03928316602085015291169082015260600161010b565b3480156101da57600080fd5b506101ee6101e9366004611a57565b61062e565b60405190815260200161010b565b34801561020857600080fd5b50610211610672565b005b34801561021f57600080fd5b5061023361022e3660046118cc565b610686565b60405161010b929190611ad0565b34801561024d57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161010b565b34801561027f57600080fd5b5061021161028e366004611bd0565b6106b8565b34801561029f57600080fd5b506102116102ae366004611be2565b6106d2565b3480156102bf57600080fd5b5060045461025b906001600160a01b031681565b3480156102df57600080fd5b506101ee6102ee366004611c1f565b600560209081526000928352604080842090915290825290205481565b34801561031757600080fd5b506101ee610326366004611d06565b6106fc565b34801561033757600080fd5b50610211610346366004611be2565b6108c3565b60008060006103598461093c565b9196909550909350915050565b600454600090819081906001600160a01b031633146103a05760405162461bcd60e51b815260040161039790611e48565b60405180910390fd5b508491506000808860018111156103b9576103b9611a98565b14156103d0576103ca8787876109e4565b90935090505b60006103db86610b18565b90506000886000015189602001518a604001518b60600151600460009054906101000a90046001600160a01b03166001600160a01b031660001b8d6080015160405160200161045296959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60408051601f198184030181528282526101008c015160208401528282018890526001600160c01b031960c087901b1660608401526001600160f81b031960f886901b16606884015281518084036049018152606984019092526003546101408d015191936104d292600160a81b90920460ff1691908f90608901611e8d565b60408051601f19818403018152908290526104f1939291602001611f09565b6040516020818303038152906040529050805161010c146105545760405162461bcd60e51b815260206004820181905260248201527f4d61677069654272696467653a20696e76616c6964207061796c6f61644f75746044820152606401610397565b6003546001600160a01b031663b19a437e61057464010000000042611f62565b60035460405160e084901b6001600160e01b03191681526105a692918691600160a01b90910460ff1690600401611fa2565b602060405180830381600087803b1580156105c057600080fd5b505af11580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190611fdf565b935060018a600181111561060e5761060e611a98565b14156106215761062189858a898b610bcc565b5050955095509592505050565b60008061063a85610b18565b90508060ff168460ff16111561065c57610655848285610db6565b915061066a565b610667848285610ddd565b91505b509392505050565b61067a610e04565b6106846000610e5e565b565b61068e61170f565b60008061069a84610eae565b90508060a0015191506106b08160e00151610fbf565b925050915091565b6106c0610e04565b8060016106cd828261201c565b505050565b6106da610e04565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6004546000906001600160a01b031633146107295760405162461bcd60e51b815260040161039790611e48565b6000856101800151600181111561074257610742611a98565b14156108485761075c828661012001518760e0015161062e565b9050600061076d8560000151610eae565b90508060a001516001600160401b0316846001600160401b0316146107e05760405162461bcd60e51b815260206004820152602360248201527f4d61677069654272696467653a20696e76616c696420746f6b656e53657175656044820152626e636560e81b6064820152608401610397565b600254855160405163c687851960e01b81526001600160a01b039092169163c687851991610810916004016120c3565b600060405180830381600087803b15801561082a57600080fd5b505af115801561083e573d6000803e3d6000fd5b50505050506108bb565b60015460808501516040808701516060880151915163201d4fbd60e11b81526001600160a01b039094169363403a9f7a93610888939092916004016120d6565b600060405180830381600087803b1580156108a257600080fd5b505af11580156108b6573d6000803e3d6000fd5b505050505b949350505050565b6108cb610e04565b6001600160a01b0381166109305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610397565b61093981610e5e565b50565b600080808061094b85826111ed565b9350610958600182612119565b90506109648582611259565b9250610971602082612119565b905061097d85826112bf565b915061098a600882612119565b9050808551146109dc5760405162461bcd60e51b815260206004820152601c60248201527f4c696242797465733a207061796c6f616420697320696e76616c6964000000006044820152606401610397565b509193909250565b816000806109f184610b18565b905060088160ff161115610a1c57610a0b81600885610db6565b9250610a1960088285610ddd565b92505b600254610a36906001600160a01b03868116911685611325565b60025461012087015160608801516001600160a01b0390921691630f5287b09187918791906000610a6c64010000000042611f62565b6040516001600160e01b031960e089901b1681526001600160a01b039096166004870152602486019490945261ffff90921660448501526064840152608483015263ffffffff1660a482015260c401602060405180830381600087803b158015610ad557600080fd5b505af1158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d9190611fdf565b915050935093915050565b60126001600160a01b03821615610bc75760408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000916001600160a01b03851691610b6b9190612131565b600060405180830381855afa9150503d8060008114610ba6576040519150601f19603f3d011682016040523d82523d6000602084013e610bab565b606091505b5091505080806020019051810190610bc39190612158565b9150505b919050565b600154610be6906001600160a01b03838116911685611325565b60015460a086015160c087015160e08801516001600160a01b0390931692639fbf10fc92349290918789612710610c1e826006612175565b610c289190612194565b610c32908c6121a8565b604051806060016040528060008152602001600081526020018c604051602001610c74919060609190911b6bffffffffffffffffffffffff1916815260140190565b6040516020818303038152906040528152508e6060015160001c604051602001610cb6919060609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052600354600454600160a81b90910460f81b6001600160f81b03191660208401526001600160a01b03166021830152906041016040516020818303038152906040528f604051602001610d2c919060c09190911b6001600160c01b031916815260080190565b60408051601f1981840301815290829052610d4a92916020016121bf565b6040516020818303038152906040526040518b63ffffffff1660e01b8152600401610d7d999897969594939291906121ee565b6000604051808303818588803b158015610d9657600080fd5b505af1158015610daa573d6000803e3d6000fd5b50505050505050505050565b600080610dc3848661228c565b60ff169050610dd381600a612393565b6106679084612194565b600080610dea858561228c565b60ff169050610dfa81600a612393565b6106679084612175565b6000546001600160a01b031633146106845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610397565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201819052610100820183905261012082015261014081019190915260035460405163607ec5ef60e11b8152600091829182916001600160a01b03169063c0fd8bde90610f3b9088906004016120c3565b60006040518083038186803b158015610f5357600080fd5b505afa158015610f67573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f8f91908101906124dc565b925092509250818190610fb55760405162461bcd60e51b815260040161039791906120c3565b5091949350505050565b610fc761170f565b6000610fd383826113ac565b6001600160a01b03168252610fe9602082612119565b9050610ff583826113ac565b6001600160a01b03166020808401919091526110119082612119565b905061101d83826113ac565b6001600160a01b03166040830152611036602082612119565b905061104283826113ac565b6001600160a01b0316606083015261105b602082612119565b90506110678382611259565b6080830152611077602082612119565b905061108383826113bf565b60a0830152611093602082612119565b905061109f83826113bf565b60c08301526110af602082612119565b90506110bb83826113bf565b60e08301526110cb602082612119565b90506110d783826112bf565b6001600160401b03166101008301526110f1600882612119565b90506110fd83826111ed565b60ff16610120830152611111600182612119565b905061111d83826111ed565b60ff16610140830152611131600182612119565b905061113d83826111ed565b60ff16610160830152611151600182612119565b905061115d838261141c565b826101800190600181111561117457611174611a98565b9081600181111561118757611187611a98565b905250611195600182612119565b9050808351146111e75760405162461bcd60e51b815260206004820152601c60248201527f4c696242797465733a207061796c6f616420697320696e76616c6964000000006044820152606401610397565b50919050565b60006111fa826001612119565b8351101561124a5760405162461bcd60e51b815260206004820152601d60248201527f4c696242797465733a20746f55696e7438206f75744f66426f756e64730000006044820152606401610397565b50818101600101515b92915050565b6000611266826020612119565b835110156112b65760405162461bcd60e51b815260206004820152601f60248201527f4c696242797465733a20746f42797465733332206f75744f66426f756e6473006044820152606401610397565b50016020015190565b60006112cc826008612119565b8351101561131c5760405162461bcd60e51b815260206004820152601e60248201527f4c696242797465733a20746f55696e743634206f75744f66426f756e647300006044820152606401610397565b50016008015190565b6001600160a01b0383166113a15760405162461bcd60e51b815260206004820152603760248201527f4c696241737365743a20416c6c6f77616e63652063616e277420626520696e6360448201527f72656173656420666f72206e61746976652061737365740000000000000000006064820152608401610397565b6106cd838383611440565b60006113b88383611259565b9392505050565b60006113cc826020612119565b835110156112b65760405162461bcd60e51b815260206004820152601f60248201527f4c696242797465733a20746f55696e74323536206f75744f66426f756e6473006044820152606401610397565b600061142883836111ed565b60ff16156114375760016113b8565b60009392505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e9060440160206040518083038186803b15801561148c57600080fd5b505afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c49190612633565b6114ce9190612119565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150611523908590611529565b50505050565b600061157e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115fb9092919063ffffffff16565b8051909150156106cd578080602001905181019061159c919061264c565b6106cd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610397565b60606108bb8484600085856001600160a01b0385163b61165d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610397565b600080866001600160a01b031685876040516116799190612131565b60006040518083038185875af1925050503d80600081146116b6576040519150601f19603f3d011682016040523d82523d6000602084013e6116bb565b606091505b50915091506116cb8282866116d6565b979650505050505050565b606083156116e55750816113b8565b8251156116f55782518084602001fd5b8160405162461bcd60e51b815260040161039791906120c3565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081018290529061018082015290565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156117b2576117b2611779565b60405290565b60405160a081016001600160401b03811182821017156117b2576117b2611779565b6040516101a081016001600160401b03811182821017156117b2576117b2611779565b604051608081016001600160401b03811182821017156117b2576117b2611779565b604051601f8201601f191681016001600160401b038111828210171561184757611847611779565b604052919050565b60006001600160401b0382111561186857611868611779565b50601f01601f191660200190565b600082601f83011261188757600080fd5b813561189a6118958261184f565b61181f565b8181528460208386010111156118af57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156118de57600080fd5b81356001600160401b038111156118f457600080fd5b6108bb84828501611876565b803560028110610bc757600080fd5b61ffff8116811461093957600080fd5b8035610bc78161190f565b60ff8116811461093957600080fd5b8035610bc78161192a565b6001600160a01b038116811461093957600080fd5b8035610bc781611944565b60008060008060008587036101e081121561197e57600080fd5b61198787611900565b955061016080601f198301121561199d57600080fd5b6119a561178f565b91506020880135825260408801356020830152606088013560408301526080880135606083015260a0880135608083015260c088013560a083015260e088013560c08301526101008089013560e0840152610120808a0135828501526101409150611a11828b0161191f565b90840152611a20898301611939565b908301525093506101808601359250611a3c6101a08701611959565b9150611a4b6101c08701611959565b90509295509295909350565b600080600060608486031215611a6c57600080fd5b8335611a7781611944565b92506020840135611a878161192a565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b60028110611acc57634e487b7160e01b600052602160045260246000fd5b9052565b82516001600160a01b031681526101c081016020840151611afc60208401826001600160a01b03169052565b506040840151611b1760408401826001600160a01b03169052565b506060840151611b3260608401826001600160a01b03169052565b506080840151608083015260a084015160a083015260c084015160c083015260e084015160e083015261010080850151611b76828501826001600160401b03169052565b50506101208481015160ff9081169184019190915261014080860151821690840152610160808601519091169083015261018080850151611bb982850182611aae565b50506001600160401b0383166101a08301526113b8565b600060a082840312156111e757600080fd5b600060208284031215611bf457600080fd5b81356113b881611944565b6001600160401b038116811461093957600080fd5b8035610bc781611bff565b60008060408385031215611c3257600080fd5b8235611c3d8161192a565b91506020830135611c4d81611bff565b809150509250929050565b600060a08284031215611c6a57600080fd5b611c726117b8565b905081356001600160401b0380821115611c8b57600080fd5b611c9785838601611876565b83526020840135915080821115611cad57600080fd5b611cb985838601611876565b60208401526040840135915080821115611cd257600080fd5b50611cdf84828501611876565b60408301525060608201356060820152611cfb6080830161191f565b608082015292915050565b600080600080848603610200811215611d1e57600080fd5b6101a080821215611d2e57600080fd5b611d366117da565b9150611d4187611959565b8252611d4f60208801611959565b6020830152611d6060408801611959565b6040830152611d7160608801611959565b60608301526080870135608083015260a087013560a083015260c087013560c083015260e087013560e0830152610100611dac818901611c14565b90830152610120611dbe888201611939565b90830152610140611dd0888201611939565b90830152610160611de2888201611939565b90830152610180611df4888201611900565b908301529094508501356001600160401b03811115611e1257600080fd5b611e1e87828801611c58565b935050611e2e6101c08601611c14565b9150611e3d6101e08601611959565b905092959194509250565b60208082526025908201527f4d61677069654272696467653a206f6e6c79204d6167706965436f726520616c6040820152641b1bddd95960da1b606082015260800190565b6001600160f81b031960f885811b8216835284901b166001820152600060028310611ec857634e487b7160e01b600052602160045260246000fd5b5060f89190911b600282015260030192915050565b60005b83811015611ef8578181015183820152602001611ee0565b838111156115235750506000910152565b60008451611f1b818460208901611edd565b845190830190611f2f818360208901611edd565b8451910190611f42818360208801611edd565b0195945050505050565b634e487b7160e01b600052601260045260246000fd5b600082611f7157611f71611f4c565b500690565b60008151808452611f8e816020860160208601611edd565b601f01601f19169290920160200192915050565b63ffffffff84168152606060208201526000611fc16060830185611f76565b905060ff83166040830152949350505050565b8051610bc781611bff565b600060208284031215611ff157600080fd5b81516113b881611bff565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561202781611944565b6120318183611ffc565b50602082013561204081611944565b61204d8160018401611ffc565b5060028101604083013561206081611944565b61206a8183611ffc565b5060608301356120798161192a565b815460ff60a01b19811660a09290921b60ff60a01b16918217835560808501356120a28161192a565b61ffff60a01b199190911690911760a89190911b60ff60a81b161790555050565b6020815260006113b86020830184611f76565b61ffff841681526060602082015260006120f36060830185611f76565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561212c5761212c612103565b500190565b60008251612143818460208701611edd565b9190910192915050565b8051610bc78161192a565b60006020828403121561216a57600080fd5b81516113b88161192a565b600081600019048311821515161561218f5761218f612103565b500290565b6000826121a3576121a3611f4c565b500490565b6000828210156121ba576121ba612103565b500390565b600083516121d1818460208801611edd565b8351908301906121e5818360208801611edd565b01949350505050565b600061012061ffff8c1683528a602084015289604084015260018060a01b03891660608401528760808401528660a08401528060c084015285518184015250602085015161014083015260408501516060610160840152612253610180840182611f76565b905082810360e08401526122678186611f76565b905082810361010084015261227c8185611f76565b9c9b505050505050505050505050565b600060ff821660ff8416808210156122a6576122a6612103565b90039392505050565b600181815b808511156122ea5781600019048211156122d0576122d0612103565b808516156122dd57918102915b93841c93908002906122b4565b509250929050565b60008261230157506001611253565b8161230e57506000611253565b8160018114612324576002811461232e5761234a565b6001915050611253565b60ff84111561233f5761233f612103565b50506001821b611253565b5060208310610133831016604e8410600b841016171561236d575081810a611253565b61237783836122af565b806000190482111561238b5761238b612103565b029392505050565b60006113b883836122f2565b805163ffffffff81168114610bc757600080fd5b8051610bc78161190f565b600082601f8301126123cf57600080fd5b81516123dd6118958261184f565b8181528460208386010111156123f257600080fd5b6108bb826020830160208701611edd565b600082601f83011261241457600080fd5b815160206001600160401b0382111561242f5761242f611779565b61243d818360051b0161181f565b82815260079290921b8401810191818101908684111561245c57600080fd5b8286015b848110156124c157608081890312156124795760008081fd5b6124816117fd565b81518152848201518582015260408083015161249c8161192a565b908201526060828101516124af8161192a565b90820152835291830191608001612460565b509695505050505050565b80518015158114610bc757600080fd5b6000806000606084860312156124f157600080fd5b83516001600160401b038082111561250857600080fd5b90850190610160828803121561251d57600080fd5b61252561178f565b61252e8361214d565b815261253c6020840161239f565b602082015261254d6040840161239f565b604082015261255e606084016123b3565b60608201526080830151608082015261257960a08401611fd4565b60a082015261258a60c0840161214d565b60c082015260e0830151828111156125a157600080fd5b6125ad898286016123be565b60e0830152506101006125c181850161239f565b9082015261012083810151838111156125d957600080fd5b6125e58a828701612403565b918301919091525061014083810151908201529450612606602087016124cc565b9350604086015191508082111561261c57600080fd5b50612629868287016123be565b9150509250925092565b60006020828403121561264557600080fd5b5051919050565b60006020828403121561265e57600080fd5b6113b8826124cc56fea26469706673582212203c8db85d9e7013ba6d82b3948503e3121e0bb1ecb4ccda473d870e2336c080ab64736f6c634300080900330000000000000000000000008731d54e9d02c286767d56ac03e8037c07e01e980000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa58500000000000000000000000098f3c9e6e3face36baad05fe09d375ef1464288b00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001