0x60806040523480156200001157600080fd5b50604051620025ff380380620025ff8339810160408190526200003491620000a5565b600080546001600160a01b03909216620100000262010000600160b01b031960ff9485166101000261ffff1990941694909516939093179190911792909216179055600180546001600160a01b03191633179055620000fd565b805160ff81168114620000a057600080fd5b919050565b600080600060608486031215620000ba578283fd5b620000c5846200008e565b9250620000d5602085016200008e565b60408501519092506001600160a01b0381168114620000f2578182fd5b809150509250925092565b6124f2806200010d6000396000f3fe6080604052600436106100c05760003560e01c80639c66809d11610074578063a96b446d1161004e578063a96b446d146101e8578063e002b78814610208578063f2fde38b1461022857600080fd5b80639c66809d1461019d578063a101001d146101b5578063a3667c7b146101c857600080fd5b806360085da6116100a557806360085da6146101145780636e667db31461013f5780638da5cb5b1461017d57600080fd5b80631b341934146100cc57806321be603e146100f457600080fd5b366100c757005b600080fd5b6100df6100da36600461216b565b610248565b60405190151581526020015b60405180910390f35b34801561010057600080fd5b506100df61010f36600461216b565b610422565b34801561012057600080fd5b50600054610100900460ff165b60405160ff90911681526020016100eb565b34801561014b57600080fd5b50600054610165906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016100eb565b34801561018957600080fd5b50600154610165906001600160a01b031681565b3480156101a957600080fd5b5060005460ff1661012d565b6100df6101c33660046121b8565b61058b565b3480156101d457600080fd5b506100df6101e336600461222f565b610811565b3480156101f457600080fd5b506100df61020336600461222f565b6108c8565b34801561021457600080fd5b506100df6102233660046121b8565b610967565b34801561023457600080fd5b506100df610243366004612133565b610be1565b606081015160009081526002602052604081205460ff16156102a85760405162461bcd60e51b81526020600482015260146024820152734e6f6e63653a20496e76616c6964204e6f6e636560601b60448201526064015b60405180910390fd5b6001836080015160038111156102ce57634e487b7160e01b600052602160045260246000fd5b14806102fd57506003836080015160038111156102fb57634e487b7160e01b600052602160045260246000fd5b145b156103215760608201516000908152600260205260409020805460ff191660011790555b600061032c84610d2f565b90508361016001518460a001516103439190612412565b816060015110156103965760405162461bcd60e51b815260206004820152601360248201527f5061696420696e76616c696420616d6f756e7400000000000000000000000000604482015260640161029f565b6103b884600001518560e001518660a00151876040015188606001518861114c565b3360208501526103c8848261121d565b60e084015184516101608601516040519081523392916001600160a01b0316907fb10197cef009fd301a90b892d25451c22c3701eb18ee2df1250d31e514fff394906020015b60405180910390a460019150505b92915050565b606081015160009081526002602052604081205460ff161561047d5760405162461bcd60e51b81526020600482015260146024820152734e6f6e63653a20496e76616c6964204e6f6e636560601b604482015260640161029f565b6001836080015160038111156104a357634e487b7160e01b600052602160045260246000fd5b14806104d257506003836080015160038111156104d057634e487b7160e01b600052602160045260246000fd5b145b156104f65760608201516000908152600260205260409020805460ff191660011790555b600061050184610d2f565b905061052b84602001518560e001518660c001518760400151886060015189610160015189611604565b33845261053884826116dd565b83602001516001600160a01b03168460e00151336001600160a01b03167fec34853c156da04e4792f1c735112ae54e5ed52bac58db5014b26746f306a36287610160015160405161040e91815260200190565b606081015160009081526002602052604081205460ff161580156105c35750606083015160009081526002602052604090205460ff16155b6106065760405162461bcd60e51b81526020600482015260146024820152734e6f6e63653a20496e76616c6964204e6f6e636560601b604482015260640161029f565b60018460800151600381111561062c57634e487b7160e01b600052602160045260246000fd5b148061065b575060038460800151600381111561065957634e487b7160e01b600052602160045260246000fd5b145b1561067f5760608201516000908152600260205260409020805460ff191660011790555b6001846080015160038111156106a557634e487b7160e01b600052602160045260246000fd5b14806106d457506003846080015160038111156106d257634e487b7160e01b600052602160045260246000fd5b145b156106f85760608301516000908152600260205260409020805460ff191660011790555b600061070385610d2f565b90508461016001518560a0015161071a9190612412565b8160600151101561076d5760405162461bcd60e51b815260206004820152601360248201527f5061696420696e76616c696420616d6f756e7400000000000000000000000000604482015260640161029f565b6107868560600151866000015187610120015187611bb3565b6107a885600001518660e001518760a00151886040015189606001518861114c565b3360208601526107b8858261121d565b60e085015185516101608701516040519081523392916001600160a01b0316907fb10197cef009fd301a90b892d25451c22c3701eb18ee2df1250d31e514fff394906020015b60405180910390a4506001949350505050565b6001546000906001600160a01b0316331461086e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b6000805461ff00191661010060ff8581168202929092179283905560405192041681527f04e959c7352d9eda8a6d989e4fee25ff0bf44c87386b7259d8500343c4e9992e906020015b60405180910390a15060015b919050565b6001546000906001600160a01b031633146109255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b6000805460ff191660ff84169081179091556040519081527f1715ed10763088cbfba08a6ecfb6e5894eac73040cb1899d10d3f96ced2bd0ef906020016108b7565b606081015160009081526002602052604081205460ff1615801561099f5750606083015160009081526002602052604090205460ff16155b6109e25760405162461bcd60e51b81526020600482015260146024820152734e6f6e63653a20496e76616c6964204e6f6e636560601b604482015260640161029f565b600184608001516003811115610a0857634e487b7160e01b600052602160045260246000fd5b1480610a375750600384608001516003811115610a3557634e487b7160e01b600052602160045260246000fd5b145b15610a5b5760608201516000908152600260205260409020805460ff191660011790555b600184608001516003811115610a8157634e487b7160e01b600052602160045260246000fd5b1480610ab05750600384608001516003811115610aae57634e487b7160e01b600052602160045260246000fd5b145b15610ad45760608301516000908152600260205260409020805460ff191660011790555b6000610adf85610d2f565b90508461016001518560a00151610af69190612412565b81606001511015610b495760405162461bcd60e51b815260206004820152601360248201527f5061696420696e76616c696420616d6f756e7400000000000000000000000000604482015260640161029f565b610b628560600151866000015187610120015187611bb3565b610b8a85602001518660e001518760c00151886040015189606001518a610160015189611604565b338552610b9785826116dd565b60e085015185516101608701516040519081523392916001600160a01b0316907fec34853c156da04e4792f1c735112ae54e5ed52bac58db5014b26746f306a362906020016107fe565b6001546000906001600160a01b03163314610c3e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b6001600160a01b038216610cba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161029f565b6001546040516001600160a01b038085169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600180546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116178155919050565b610d6a6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b6000805481908190819081908190610dae90610d8b9060ff166103e86123b4565b61ffff16610da86103e88b60c00151611cc790919063ffffffff16565b90611d69565b90506000610dc9828a60c00151611dc490919063ffffffff16565b6000805491925090610dec906103e890610da8908690610100900460ff16611cc7565b9050610df88282611e20565b965060018a608001516003811115610e2057634e487b7160e01b600052602160045260246000fd5b1415610f3a5760608a015160e08b015160405163c57dc23560e01b81526001600160a01b039092169163c57dc23591610e5f9160040190815260200190565b60206040518083038186803b158015610e7757600080fd5b505afa158015610e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaf9190612217565b935089606001516001600160a01b031663d48e638a8b60e001516040518263ffffffff1660e01b8152600401610ee791815260200190565b60206040518083038186803b158015610eff57600080fd5b505afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f37919061214f565b97505b60008a608001516003811115610f6057634e487b7160e01b600052602160045260246000fd5b141561107a5760608a015160e08b015160405163c57dc23560e01b81526001600160a01b039092169163c57dc23591610f9f9160040190815260200190565b60206040518083038186803b158015610fb757600080fd5b505afa158015610fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fef9190612217565b935089606001516001600160a01b031663d48e638a8b60e001516040518263ffffffff1660e01b815260040161102791815260200190565b60206040518083038186803b15801561103f57600080fd5b505afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611077919061214f565b97505b60038a6080015160038111156110a057634e487b7160e01b600052602160045260246000fd5b14156110b3576101408a01518a51985093505b60028a6080015160038111156110d957634e487b7160e01b600052602160045260246000fd5b14156110ec576101408a01518a51985093505b6110fc6103e8610da88587611cc7565b95506111128161110c8589611dc4565b90611dc4565b6040805160a08101825298895260208901919091528701959095525060608501525050506001600160a01b03909116608082015292915050565b6060808201516040516bffffffffffffffffffffffff1985841b81166020830152603482018990529286901b909216605483015260688201869052608882015260009060a8016040516020818303038152906040528051906020012090506111b48183611e7f565b6001600160a01b0316876001600160a01b0316146112145760405162461bcd60e51b815260206004820152601f60248201527f73656c6c6572207369676e20766572696669636174696f6e206661696c656400604482015260640161029f565b50505050505050565b60018260800151600381111561124357634e487b7160e01b600052602160045260246000fd5b14156112d45760005460608301518351602085015160e0860151604051637b84dc8360e11b81526001600160a01b03948516600482015292841660248401529083166044830152606482015262010000909204169063f709b90690608401600060405180830381600087803b1580156112bb57600080fd5b505af11580156112cf573d6000803e3d6000fd5b505050505b6000826080015160038111156112fa57634e487b7160e01b600052602160045260246000fd5b14156113a6576000805460608401518451602086015160e0870151610160880151604051639c1c2ee960e01b81526001600160a01b039586166004820152938516602485015291841660448401526064830152608482015260c060a482015260c4810193909352620100009091041690639c1c2ee99060e401600060405180830381600087803b15801561138d57600080fd5b505af11580156113a1573d6000803e3d6000fd5b505050505b6003826080015160038111156113cc57634e487b7160e01b600052602160045260246000fd5b141561145f5760005460608301518351602085015160e0860151610140870151610120880151604051630744511160e41b8152620100009097046001600160a01b03169663744511109661142c969095909490939092909160040161232f565b600060405180830381600087803b15801561144657600080fd5b505af115801561145a573d6000803e3d6000fd5b505050505b60028260800151600381111561148557634e487b7160e01b600052602160045260246000fd5b141561153157600060029054906101000a90046001600160a01b03166001600160a01b031663e870a3208360600151846000015185602001518660e001518761014001518861010001518961012001518a61016001516040518963ffffffff1660e01b81526004016114fe9897969594939291906122c2565b600060405180830381600087803b15801561151857600080fd5b505af115801561152c573d6000803e3d6000fd5b505050505b8051156115755760015481516040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015611573573d6000803e3d6000fd5b505b6040810151156115c25780608001516001600160a01b03166108fc82604001519081150290604051600060405180830381858888f193505050501580156115c0573d6000803e3d6000fd5b505b815160208201516040516001600160a01b039092169181156108fc0291906000818181858888f193505050501580156115ff573d6000803e3d6000fd5b505050565b6060808201516040516bffffffffffffffffffffffff1986841b81166020830152603482018a90529287901b9092166054830152606882018790526088820184905260a882015260009060c8016040516020818303038152906040528051906020012090506116738183611e7f565b6001600160a01b0316886001600160a01b0316146116d35760405162461bcd60e51b815260206004820152601e60248201527f6275796572207369676e20766572696669636174696f6e206661696c65640000604482015260640161029f565b5050505050505050565b60018260800151600381111561170357634e487b7160e01b600052602160045260246000fd5b14156117945760005460608301518351602085015160e0860151604051637b84dc8360e11b81526001600160a01b03948516600482015292841660248401529083166044830152606482015262010000909204169063f709b90690608401600060405180830381600087803b15801561177b57600080fd5b505af115801561178f573d6000803e3d6000fd5b505050505b6000826080015160038111156117ba57634e487b7160e01b600052602160045260246000fd5b1415611866576000805460608401518451602086015160e0870151610160880151604051639c1c2ee960e01b81526001600160a01b039586166004820152938516602485015291841660448401526064830152608482015260c060a482015260c4810193909352620100009091041690639c1c2ee99060e401600060405180830381600087803b15801561184d57600080fd5b505af1158015611861573d6000803e3d6000fd5b505050505b60038260800151600381111561188c57634e487b7160e01b600052602160045260246000fd5b141561191f5760005460608301518351602085015160e0860151610140870151610120880151604051630744511160e41b8152620100009097046001600160a01b0316966374451110966118ec969095909490939092909160040161232f565b600060405180830381600087803b15801561190657600080fd5b505af115801561191a573d6000803e3d6000fd5b505050505b60028260800151600381111561194557634e487b7160e01b600052602160045260246000fd5b14156119f157600060029054906101000a90046001600160a01b03166001600160a01b031663e870a3208360600151846000015185602001518660e001518761014001518861010001518961012001518a61016001516040518963ffffffff1660e01b81526004016119be9897969594939291906122c2565b600060405180830381600087803b1580156119d857600080fd5b505af11580156119ec573d6000803e3d6000fd5b505050505b805115611a855760005460408381015160208501516001548551935163776062c360e01b81526001600160a01b0393841660048201529183166024830152821660448201526064810192909252620100009092049091169063776062c390608401600060405180830381600087803b158015611a6c57600080fd5b505af1158015611a80573d6000803e3d6000fd5b505050505b604081015115611b20576000546040838101516020850151608085015185840151935163776062c360e01b81526001600160a01b0393841660048201529183166024830152821660448201526064810192909252620100009092049091169063776062c390608401600060405180830381600087803b158015611b0757600080fd5b505af1158015611b1b573d6000803e3d6000fd5b505050505b600054604083810151602080860151865191860151935163776062c360e01b81526001600160a01b039384166004820152908316602482015290821660448201526064810192909252620100009092049091169063776062c390608401600060405180830381600087803b158015611b9757600080fd5b505af1158015611bab573d6000803e3d6000fd5b505050505050565b6000846001600160a01b031663ce606ee06040518163ffffffff1660e01b815260040160206040518083038186803b158015611bee57600080fd5b505afa158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c26919061214f565b905060003085858560600151604051602001611c459493929190612275565b604051602081830303815290604052805190602001209050611c678184611e7f565b6001600160a01b0316826001600160a01b031614611bab5760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c65640000604482015260640161029f565b600082611cd65750600061041c565b6000611ce28385612412565b905082611cef85836123f2565b14611d625760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015260840161029f565b9392505050565b6000808211611dba5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161029f565b611d6282846123f2565b600082821115611e165760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161029f565b611d628284612431565b600080611e2d83856123da565b905083811015611d625760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161029f565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101839052600090600190605c0160408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa158015611f24573d6000803e3d6000fd5b5050604051601f190151949350505050565b80356108c3816124a4565b8035600481106108c357600080fd5b600082601f830112611f60578081fd5b813567ffffffffffffffff80821115611f7b57611f7b61248e565b604051601f8301601f19908116603f01168101908282118183101715611fa357611fa361248e565b81604052838152866020858801011115611fbb578485fd5b8360208701602083013792830160200193909352509392505050565b60006101808284031215611fe9578081fd5b611ff161238a565b9050611ffc82611f36565b815261200a60208301611f36565b602082015261201b60408301611f36565b604082015261202c60608301611f36565b606082015261203d60808301611f41565b608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013567ffffffffffffffff81111561208857600080fd5b61209485828601611f50565b82840152505061014080830135818301525061016080830135818301525092915050565b6000608082840312156120c9578081fd5b6040516080810181811067ffffffffffffffff821117156120ec576120ec61248e565b6040529050806120fb83612122565b81526020830135602082015260408301356040820152606083013560608201525092915050565b803560ff811681146108c357600080fd5b600060208284031215612144578081fd5b8135611d62816124a4565b600060208284031215612160578081fd5b8151611d62816124a4565b60008060a0838503121561217d578081fd5b823567ffffffffffffffff811115612193578182fd5b61219f85828601611fd7565b9250506121af84602085016120b8565b90509250929050565b600080600061012084860312156121cd578081fd5b833567ffffffffffffffff8111156121e3578182fd5b6121ef86828701611fd7565b9350506121ff85602086016120b8565b915061220e8560a086016120b8565b90509250925092565b600060208284031215612228578081fd5b5051919050565b600060208284031215612240578081fd5b611d6282612122565b60008151808452612261816020860160208601612448565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff19808760601b168352808660601b1660148401525083516122ac816028850160208801612448565b6028920191820192909252604801949350505050565b60006101206001600160a01b03808c168452808b166020850152808a166040850152508760608401528660808401528560a08401528060c084015261230981840186612249565b60e084019490945250818303610100909201919091528152602001979650505050505050565b60006001600160a01b038089168352808816602084015280871660408401525084606083015283608083015260e060a083015261236f60e0830184612249565b82810360c09093019290925281526020019695505050505050565b604051610180810167ffffffffffffffff811182821017156123ae576123ae61248e565b60405290565b600061ffff8083168185168083038211156123d1576123d1612478565b01949350505050565b600082198211156123ed576123ed612478565b500190565b60008261240d57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561242c5761242c612478565b500290565b60008282101561244357612443612478565b500390565b60005b8381101561246357818101518382015260200161244b565b83811115612472576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146124b957600080fd5b5056fea26469706673582212207dd4c086e7b4d0362a62c36b8136dbcca9b0bc1b1f47c456e36b2a4ffba83b2c64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019000000000000000000000000596539344cae6342167c298ef83caf51878fa074