0x6080604052600436106103b15760003560e01c8063684c8199116101e7578063b3d514fb1161010d578063dd62ed3e116100a0578063eec2744e1161006f578063eec2744e14610bd4578063f94aa1b414610bf4578063fdb78c0e14610c3b578063fe575a8714610c5a57600080fd5b8063dd62ed3e14610b43578063e4fcfd1814610b89578063eafb5a3c14610b9f578063ee5d9c2d14610bbf57600080fd5b8063c6831cd8116100dc578063c6831cd814610a4b578063cab5ebea14610a98578063cf84770614610ab8578063d3f6a15714610b2357600080fd5b8063b3d514fb146105a2578063bc77169d146109be578063becdf13f146109de578063c2fa418f146109fe57600080fd5b80638a63bd9b11610185578063aa22b17211610154578063aa22b1721461095e578063aa5454731461097e578063adc59ae01461099e578063b1b08f71146105a257600080fd5b80638a63bd9b146108ff5780638a8c523c1461091457806395d89b4114610929578063a9059cbb1461093e57600080fd5b80637b45d431116101c15780637b45d4311461080657806380c581d11461088857806388f82020146108a8578063893d20e8146108e157600080fd5b8063684c8199146107b157806370a08231146107d1578063715018a6146107f157600080fd5b80632b28fc7a116102d75780634a5a4a221161026a57806350a8e0161161023957806350a8e01614610719578063533ecf5414610738578063590ffdce146107585780635cce86cd1461077857600080fd5b80634a5a4a22146106905780634ada218b146106a65780634fb2e45d146106c05780634fbee193146106e057600080fd5b806333251a0b116102a657806333251a0b1461061057806334cd82601461063057806336fddb0414610650578063452ed4f11461067057600080fd5b80632b28fc7a146105a25780632d838119146105b85780632e8fa821146105d8578063313ce567146105ee57600080fd5b80630fa604e41161034f57806323b872dd1161031e57806323b872dd1461052857806326003957146105485780632610eaca14610568578063275a03a21461058857600080fd5b80630fa604e4146104c857806313e46192146104dd57806318160ddd146104fd57806318a610d71461051257600080fd5b806305bbedb61161038b57806305bbedb61461043657806306fdde03146104565780630758d92414610478578063095ea7b31461049857600080fd5b806303fd2a45146103bd5780630445b667146103f0578063044df7261461041457600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d361dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103fc57600080fd5b50610406601c5481565b6040519081526020016103e7565b34801561042057600080fd5b5061043461042f366004614993565b610c7a565b005b34801561044257600080fd5b50610434610451366004614ad9565b610d57565b34801561046257600080fd5b5061046b610df5565b6040516103e79190614b4c565b34801561048457600080fd5b506015546103d3906001600160a01b031681565b3480156104a457600080fd5b506104b86104b3366004614b7f565b610e87565b60405190151581526020016103e7565b3480156104d457600080fd5b50610406610e9e565b3480156104e957600080fd5b506104346104f8366004614bab565b610ec4565b34801561050957600080fd5b50610406611387565b34801561051e57600080fd5b5061040660225481565b34801561053457600080fd5b506104b8610543366004614bc9565b6113a0565b34801561055457600080fd5b50610434610563366004614c0a565b611418565b34801561057457600080fd5b50610434610583366004614c2c565b611523565b34801561059457600080fd5b506023546104b89060ff1681565b3480156105ae57600080fd5b506104066109c481565b3480156105c457600080fd5b506104066105d3366004614ce7565b61162f565b3480156105e457600080fd5b50610406601d5481565b3480156105fa57600080fd5b50600e5460405160ff90911681526020016103e7565b34801561061c57600080fd5b5061043461062b366004614d00565b6116c6565b34801561063c57600080fd5b5061043461064b366004614d1d565b611796565b34801561065c57600080fd5b5061043461066b366004614bab565b611826565b34801561067c57600080fd5b506016546103d3906001600160a01b031681565b34801561069c57600080fd5b5061040660215481565b3480156106b257600080fd5b506020546104b89060ff1681565b3480156106cc57600080fd5b506104346106db366004614d00565b61189f565b3480156106ec57600080fd5b506104b86106fb366004614d00565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561072557600080fd5b506020546104b890610100900460ff1681565b34801561074457600080fd5b50610434610753366004614d00565b611aa3565b34801561076457600080fd5b50610434610773366004614bab565b612041565b34801561078457600080fd5b506104b8610793366004614d00565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107bd57600080fd5b506104346107cc366004614d58565b6120ba565b3480156107dd57600080fd5b506104066107ec366004614d00565b61211b565b3480156107fd57600080fd5b5061043461217a565b34801561081257600080fd5b506011546108539061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103e7565b34801561089457600080fd5b506104346108a3366004614bab565b61222a565b3480156108b457600080fd5b506104b86108c3366004614d00565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108ed57600080fd5b506000546001600160a01b03166103d3565b34801561090b57600080fd5b506104b86123eb565b34801561092057600080fd5b5061043461245a565b34801561093557600080fd5b5061046b6126ac565b34801561094a57600080fd5b506104b8610959366004614b7f565b6126bb565b34801561096a57600080fd5b50610434610979366004614d8c565b6126d2565b34801561098a57600080fd5b50610434610999366004614dcf565b6127a8565b3480156109aa57600080fd5b506104346109b9366004614e23565b6128e8565b3480156109ca57600080fd5b506104346109d9366004614dcf565b612999565b3480156109ea57600080fd5b506104346109f9366004614dcf565b612ad9565b348015610a0a57600080fd5b506013546108539061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610a5757600080fd5b506012546108539061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610aa457600080fd5b50610434610ab3366004614d58565b612c19565b348015610ac457600080fd5b50601454610af59061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103e7565b348015610b2f57600080fd5b50610434610b3e366004614e55565b612cbb565b348015610b4f57600080fd5b50610406610b5e366004614e55565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b9557600080fd5b50610406601a5481565b348015610bab57600080fd5b50610434610bba366004614d00565b612d44565b348015610bcb57600080fd5b506104346130f3565b348015610be057600080fd5b50610434610bef366004614bab565b6131d3565b348015610c0057600080fd5b50601754601854610c1b916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103e7565b348015610c4757600080fd5b506019546104b890610100900460ff1681565b348015610c6657600080fd5b506104b8610c75366004614d00565b61327b565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6020546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d3b57600080fd5b505af1158015610d4f573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610da55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6020546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d219085908590600401614ec7565b6060600c8054610e0490614eeb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3090614eeb565b8015610e7d5780601f10610e5257610100808354040283529160200191610e7d565b820191906000526020600020905b815481529060010190602001808311610e6057829003601f168201915b5050505050905090565b6000610e94338484613309565b5060015b92915050565b600e54600090610eb29060ff16600a615052565b601f54610ebf9190615090565b905090565b6000546001600160a01b03163314610f125760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b8015611067576001600160a01b03821660009081526008602052604090205460ff1615610f815760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cc4565b6001600160a01b03821660009081526001602052604090205415610fdb576001600160a01b038216600090815260016020526040902054610fc19061162f565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff191660011790556016549091161461106357600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b80611063576001600160a01b03821660009081526008602052604090205460ff166110d45760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cc4565b6016546001600160a01b038381169116141561114f576110f2613416565b6001600160a01b03831660009081526002602052604090205461111591906150a4565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b600954600114156111ff57611162613416565b6001600160a01b03831660009081526002602052604090205461118591906150a4565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806111cc576111cc6150c3565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60095481101561138257826001600160a01b031660098281548110611229576112296150f2565b6000918252602090912001546001600160a01b03161415611370576009805461125490600190615121565b81548110611264576112646150f2565b600091825260209091200154600980546001600160a01b039092169183908110611290576112906150f2565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556112dc613416565b6001600160a01b0384166000908152600260205260409020546112ff91906150a4565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff19169055600980548061133c5761133c6150c3565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061137a81615138565b915050611202565b505050565b6000600f546000141561139957600080fd5b50600f5490565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611405576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906113ff908490615121565b90915550505b611410848484613689565b949350505050565b6000546001600160a01b031633146114665760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6103e8600f546114769190615090565b8183600f5461148591906150a4565b61148f9190615090565b10156115035760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610cc4565b8082600f5461151291906150a4565b61151c9190615090565b601f555050565b80518251146115745760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cc4565b60005b82518160ff16101561138257818160ff1681518110611598576115986150f2565b60200260200101516115a93361211b565b10156115b457600080fd5b61161c33848360ff16815181106115cd576115cd6150f2565b6020908102919091010151600e546115e99060ff16600a615052565b858560ff16815181106115fe576115fe6150f2565b602002602001015161161091906150a4565b60008060006001613c43565b508061162781615153565b915050611577565b60006010548211156116a95760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cc4565b60006116b3613416565b90506116bf8184615090565b9392505050565b6000546001600160a01b031633146117145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6020546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561177b57600080fd5b505af115801561178f573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146117e45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b8385600f546117f391906150a4565b6117fd9190615090565b601c55600f5482906118109085906150a4565b61181a9190615090565b601d55601a5550505050565b6000546001600160a01b031633146118745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118ed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6001600160a01b0381166119695760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc4565b6001600160a01b03811661dead14156119ea5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc4565b60008054611a03916001600160a01b0390911690612041565b611a0e816001612041565b60008054611a24906001600160a01b031661211b565b1115611a4b57600054611a49906001600160a01b031682611a448261211b565b613689565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611af15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b602354610100900460ff1615611b495760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610cc4565b80602060026101000a8154816001600160a01b0302191690836001600160a01b03160217905550602060029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611be457506040513d6000823e601f3d908101601f19168201604052611be191908101906151d7565b60015b611c305760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610cc4565b8351611c4390600c9060208701906148ec565b508251611c5790600d9060208601906148ec565b50600b829055600e805460ff191660ff8316908117909155611c7a90600a615052565b600b54611c8791906150a4565b600f819055611c989060001961525d565b611ca490600019615121565b60105550505050601560009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d229190615271565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da79190615271565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2f9190615271565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001908117909155600f54606491611e8791906150a4565b611e919190615090565b601f556023805461ff001916610100179055601054600080546001600160a01b03908116825260016020526040808320939093558154600f5493519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611efd91815260200190565b60405180910390a3601554611f1f9030906001600160a01b0316600019613309565b600054600f54611f4f916001600160a01b03169061dead90600a90611f459060046150a4565b611a449190615090565b50600054611f6a906001600160a01b031630611a448261211b565b506015546001600160a01b031663f305d7194730611f878161211b565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af115801561200e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612033919061528e565b50505061203e61245a565b50565b6000546001600160a01b0316331461208f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146121085760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6023805460ff1916911515919091179055565b6001600160a01b03811660009081526008602052604081205460ff161561215857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e989061162f565b6000546001600160a01b031633146121c85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b600080546121e1916001600160a01b0390911690612041565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b80612305576001600160a01b038281166000818152600360209081526040808320805460ff19169055905490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d3b57600080fd5b6004541561236c576203f4806004544261231f9190615121565b1161236c5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cc4565b6001600160a01b03828116600081815260036020908152604091829020805460ff19166001908117909155426004908155915492517f80c581d1000000000000000000000000000000000000000000000000000000008152918201939093526024810192909252620100009004909116906380c581d190604401610d21565b600080546001600160a01b0316331461243a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6015546124549030906001600160a01b0316600019613309565b50600190565b6000546001600160a01b031633146124a85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b60205460ff16156124fb5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cc4565b602054610100900460ff166125525760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cc4565b6020546201000090046001600160a01b031661259857602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602054601654600e546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561262957600080fd5b505af192505050801561263a575060015b506020805460ff1916600117905560165461271090612661906001600160a01b031661211b565b61266c9060056150a4565b6126769190615090565b601c556016546103e890612692906001600160a01b031661211b565b61269d9060016150a4565b6126a79190615090565b601d55565b6060600d8054610e0490614eeb565b60006126c8338484613689565b5060019392505050565b6000546001600160a01b031633146127205760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6014805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff1990941692881692909217929092171617905561277c82846152bc565b6014805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b031633146127f65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6000818361280486886152bc565b61280e91906152bc565b61281891906152bc565b90506109c48161ffff16111561282d57600080fd5b6013805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff0000000000001916176601000000000000918516919091021790556128a185826152e2565b6013805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146129365760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b61294183600a615305565b61294b90856150a4565b60215561295981600a615305565b61296390836150a4565b6022556021546706f05b59d3b200001180159061298a5750670de0b6b3a764000060225410155b61299357600080fd5b50505050565b6000546001600160a01b031633146129e75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b600081836129f586886152bc565b6129ff91906152bc565b612a0991906152bc565b90506109c48161ffff161115612a1e57600080fd5b6011805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff000000000000191617660100000000000091851691909102179055612a9285826152e2565b6011805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612b275760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b60008183612b3586886152bc565b612b3f91906152bc565b612b4991906152bc565b90506109c48161ffff161115612b5e57600080fd5b6012805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff000000000000191617660100000000000091851691909102179055612bd285826152e2565b6012805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612c675760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b601980548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612cb090831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612d095760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b601780546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560188054929093169116179055565b6000546001600160a01b03163314612d925760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfb9190615271565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6c9190615271565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef39190615271565b90506001600160a01b03811661309157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f659190615271565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd69190615271565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561303b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305f9190615271565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556130ba565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611382903090600019613309565b6000546001600160a01b031633146131415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b602054610100900460ff16156131995760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cc4565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561203e573d6000803e3d6000fd5b6000546001600160a01b031633146132215760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6020546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d21565b6020546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156132e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e989190615311565b6001600160a01b03831661335f5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc4565b6001600160a01b0382166133b55760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc4565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054600f546016546001600160a01b03166000908152600860205260408120549092919060ff16156134f0576016546001600160a01b031660009081526001602052604090205482108061348457506016546001600160a01b031660009081526002602052604090205481105b156134a057600f546010546134999190615090565b9250505090565b6016546001600160a01b03166000908152600160205260409020546134c59083615121565b6016546001600160a01b03166000908152600260205260409020549092506134ed9082615121565b90505b600954156136585760005b60095460ff8216101561365657826001600060098460ff1681548110613523576135236150f2565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806135915750816002600060098460ff168154811061356a5761356a6150f2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156135ae57600f546010546135a69190615090565b935050505090565b6001600060098360ff16815481106135c8576135c86150f2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546135f79084615121565b92506002600060098360ff1681548110613613576136136150f2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546136429083615121565b91508061364e81615153565b9150506134fb565b505b600f546010546136689190615090565b82101561367f57600f546010546134999190615090565b6134998183615090565b60006001600160a01b0384166137075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cc4565b6001600160a01b0383166137835760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cc4565b600082116137f95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cc4565b6001600160a01b0384166000908152600360205260408120548190819060ff16156138275760019250613855565b6001600160a01b03861660009081526003602052604090205460ff16156138515760019150613855565b5060015b61385f8787613ebd565b15613b6d5760205460ff166138b65760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cc4565b82806138bf5750815b15613aa15760408051600280825260608201835260009260208301908036833701905050905030816000815181106138f9576138f96150f2565b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561396b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398f9190615271565b816001815181106139a2576139a26150f2565b6001600160a01b0392831660209182029290920101526015546040517fd06ca61f000000000000000000000000000000000000000000000000000000008152600092919091169063d06ca61f906139ff908a90869060040161532e565b600060405180830381865afa158015613a1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a449190810190615347565b600181518110613a5657613a566150f2565b602090810291909101015160235490915060ff1615613a9e578415613a8957602154811115613a8457600080fd5b613a9e565b8315613a9e57602254811115613a9e57600080fd5b50505b6015546001600160a01b03878116911614801590613abd575081155b15613b6d576001600160a01b03861660009081526007602052604090205460ff16613b6d57601f5485613aef8861211b565b613af991906153d8565b1115613b6d5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cc4565b6001600160a01b03871660009081526006602052604090205460019060ff1680613baf57506001600160a01b03871660009081526006602052604090205460ff165b15613bb8575060005b8215613c285760195460ff16158015613bd85750601954610100900460ff165b15613c285742601a54601b54613bee91906153d8565b1015613c28576000613bff3061211b565b9050601c548110613c2657601d548110613c185750601d545b613c2181613f91565b42601b555b505b613c3788888884888888613c43565b98975050505050505050565b602054600090610100900460ff16613cef57613c5f8888614418565b602054610100900460ff16158015613c7c5750613c7c8888613ebd565b15613cef5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cc4565b6000613d0089898989898989614577565b60808101516001600160a01b038b16600090815260016020526040812080549394509192613d2f908490615121565b909155505060608101516001600160a01b03891660009081526001602052604081208054909190613d619084906153d8565b90915550506001600160a01b03891660009081526008602052604090205460ff1615613dc5576001600160a01b038916600090815260026020526040902054613dab908890615121565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b03881660009081526008602052604090205460ff1615613e255780516001600160a01b038916600090815260026020526040902054613e0b91906153d8565b6001600160a01b0389166000908152600260205260409020555b60008160a001511180613e3c575060008160200151115b15613e5d578060a0015160106000828254613e579190615121565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613ea691815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b03848116911614801590613eea57506000546001600160a01b03838116911614155b8015613f0157506000546001600160a01b03163214155b8015613f2657506001600160a01b0382166000908152600a602052604090205460ff16155b8015613f4b57506001600160a01b0383166000908152600a602052604090205460ff16155b8015613f6257506001600160a01b03821661dead14155b8015613f7657506001600160a01b03821615155b80156116bf57506001600160a01b0383163014159392505050565b6019805460ff191660011790556040805160808101825260145461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052613fef575061440b565b3060009081526005602090815260408083206015546001600160a01b0316845290915290205460001914614048573060009081526005602090815260408083206015546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff168561406991906150a4565b6140739190615090565b61407d9190615090565b9050600061408b8285615121565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106140c5576140c56150f2565b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415b9190615271565b8160018151811061416e5761416e6150f2565b6001600160a01b0392831660209182029290920101526015546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906141cd9085906000908690309042906004016153f0565b600060405180830381600087803b1580156141e757600080fd5b505af11580156141fb573d6000803e3d6000fd5b504792506000915084905061421086846150a4565b61421a9190615090565b9050841561430b576015546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156142a9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142ce919061528e565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6143158183615121565b915085600001518660600181815161432d91906152e2565b61ffff9081169091526060880151604089015160009350908216916143539116856150a4565b61435d9190615090565b9050600061436b8285615121565b604089015190915061ffff16156143b8576018546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156143b6573d6000803e3d6000fd5b505b602088015161ffff1615614402576017546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614400573d6000803e3d6000fd5b505b50505050505050505b506019805460ff19169055565b602054610100900460ff16156144965760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cc4565b6144a08282613ebd565b1580156144ba57506016546001600160a01b038281169116145b15611063576001600160a01b038083166000908152600a60209081526040909120805460ff19166001179055805461ff00191661010017908190556201000090041661453057602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6145b76040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6145f76040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6145ff613416565b60c0820181905261461090886150a4565b608082015261461f8989613ebd565b156146d2576020546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301528a81166024830152604482018a9052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156146bb575060408051601f3d908101601f191682019092526146b891810190615311565b60015b6146c457600080fd5b9050806146d057600080fd5b505b85156147b95760008061271086156147045760125461ffff808216945068010000000000000000909104169150614746565b871561472a5760115461ffff808216945068010000000000000000909104169150614746565b60135461ffff8082169450680100000000000000009091041691505b80614751848c6150a4565b61475b9190615090565b60208501528061476b838c6150a4565b6147759190615090565b60408501819052602085015161478b91906153d8565b614795908b615121565b845260c084015160208501516147ab91906150a4565b60a0850152506147d2915050565b6000602082018190526040820181905287825260a08201525b6040810151156148a9578060c0015181604001516147f091906150a4565b306000908152600160205260408120805490919061480f9084906153d8565b90915550503060009081526008602052604090205460ff16156148575760408082015130600090815260026020529182208054919290916148519084906153d8565b90915550505b306001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604001516040516148a091815260200190565b60405180910390a35b8060c0015181604001516148bd91906150a4565b8160a001516148cc91906153d8565b81608001516148db9190615121565b606082015298975050505050505050565b8280546148f890614eeb565b90600052602060002090601f01602090048101928261491a5760008555614960565b82601f1061493357805160ff1916838001178555614960565b82800160010185558215614960579182015b82811115614960578251825591602001919060010190614945565b5061496c929150614970565b5090565b5b8082111561496c5760008155600101614971565b801515811461203e57600080fd5b600080604083850312156149a657600080fd5b82356149b181614985565b915060208301356149c181614985565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614a2457614a246149cc565b604052919050565b600067ffffffffffffffff821115614a4657614a466149cc565b5060051b60200190565b6001600160a01b038116811461203e57600080fd5b600082601f830112614a7657600080fd5b81356020614a8b614a8683614a2c565b6149fb565b82815260059290921b84018101918181019086841115614aaa57600080fd5b8286015b84811015614ace578035614ac181614a50565b8352918301918301614aae565b509695505050505050565b60008060408385031215614aec57600080fd5b823567ffffffffffffffff811115614b0357600080fd5b614b0f85828601614a65565b92505060208301356149c181614985565b60005b83811015614b3b578181015183820152602001614b23565b838111156129935750506000910152565b6020815260008251806020840152614b6b816040850160208701614b20565b601f01601f19169190910160400192915050565b60008060408385031215614b9257600080fd5b8235614b9d81614a50565b946020939093013593505050565b60008060408385031215614bbe57600080fd5b82356149b181614a50565b600080600060608486031215614bde57600080fd5b8335614be981614a50565b92506020840135614bf981614a50565b929592945050506040919091013590565b60008060408385031215614c1d57600080fd5b50508035926020909101359150565b60008060408385031215614c3f57600080fd5b823567ffffffffffffffff80821115614c5757600080fd5b614c6386838701614a65565b9350602091508185013581811115614c7a57600080fd5b85019050601f81018613614c8d57600080fd5b8035614c9b614a8682614a2c565b81815260059190911b82018301908381019088831115614cba57600080fd5b928401925b82841015614cd857833582529284019290840190614cbf565b80955050505050509250929050565b600060208284031215614cf957600080fd5b5035919050565b600060208284031215614d1257600080fd5b81356116bf81614a50565b600080600080600060a08688031215614d3557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208284031215614d6a57600080fd5b81356116bf81614985565b803561ffff81168114614d8757600080fd5b919050565b600080600060608486031215614da157600080fd5b614daa84614d75565b9250614db860208501614d75565b9150614dc660408501614d75565b90509250925092565b60008060008060808587031215614de557600080fd5b614dee85614d75565b9350614dfc60208601614d75565b9250614e0a60408601614d75565b9150614e1860608601614d75565b905092959194509250565b60008060008060808587031215614e3957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215614e6857600080fd5b8235614e7381614a50565b915060208301356149c181614a50565b600081518084526020808501945080840160005b83811015614ebc5781516001600160a01b031687529582019590820190600101614e97565b509495945050505050565b604081526000614eda6040830185614e83565b905082151560208301529392505050565b600181811c90821680614eff57607f821691505b60208210811415614f39577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614fa9578160001904821115614f8f57614f8f614f3f565b80851615614f9c57918102915b93841c9390800290614f73565b509250929050565b600082614fc057506001610e98565b81614fcd57506000610e98565b8160018114614fe35760028114614fed57615009565b6001915050610e98565b60ff841115614ffe57614ffe614f3f565b50506001821b610e98565b5060208310610133831016604e8410600b841016171561502c575081810a610e98565b6150368383614f6e565b806000190482111561504a5761504a614f3f565b029392505050565b60006116bf60ff841683614fb1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261509f5761509f615061565b500490565b60008160001904831182151516156150be576150be614f3f565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561513357615133614f3f565b500390565b600060001982141561514c5761514c614f3f565b5060010190565b600060ff821660ff81141561516a5761516a614f3f565b60010192915050565b600082601f83011261518457600080fd5b815167ffffffffffffffff81111561519e5761519e6149cc565b6151b16020601f19601f840116016149fb565b8181528460208386010111156151c657600080fd5b611410826020830160208701614b20565b600080600080608085870312156151ed57600080fd5b845167ffffffffffffffff8082111561520557600080fd5b61521188838901615173565b9550602087015191508082111561522757600080fd5b5061523487828801615173565b93505060408501519150606085015160ff8116811461525257600080fd5b939692955090935050565b60008261526c5761526c615061565b500690565b60006020828403121561528357600080fd5b81516116bf81614a50565b6000806000606084860312156152a357600080fd5b8351925060208401519150604084015190509250925092565b600061ffff8083168185168083038211156152d9576152d9614f3f565b01949350505050565b600061ffff838116908316818110156152fd576152fd614f3f565b039392505050565b60006116bf8383614fb1565b60006020828403121561532357600080fd5b81516116bf81614985565b8281526040602082015260006114106040830184614e83565b6000602080838503121561535a57600080fd5b825167ffffffffffffffff81111561537157600080fd5b8301601f8101851361538257600080fd5b8051615390614a8682614a2c565b81815260059190911b820183019083810190878311156153af57600080fd5b928401925b828410156153cd578351825292840192908401906153b4565b979650505050505050565b600082198211156153eb576153eb614f3f565b500190565b85815284602082015260a06040820152600061540f60a0830186614e83565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212202f63aa6bbf873d663e7b952c6eb202406bcf9143b5e8e0ee2704f5bdfaf87d1e64736f6c634300080c0033
0x6000600481905560c8608081905260a08290526101f460c081905261025860e081905261044c610100819052601180546001600160501b031990811669044c025801f4000000c890811790925561012086905261014085905261016085905261070861018052610af06101a052601280548216690af0070801f401f400c81790556101c0959095526101e086905261020093909352610220919091526102405260138054909216179055600561026052600a6102805260186102a081905260276102c052601480546001600160401b03191666270018000a000517905561032060405273b97873d332cc3dcfdcf3db7522eeb8bd1649c0eb6102e081905273e92425900c1a24e0b25adadb983693c2f3e5e026610300819052601780546001600160a01b0319908116909317905582548216179091556019805461ff0019169055601a8290556020805461ffff199081169091556706f05b59d3b20000602155670de0b6b3a764000060225560238054909116600117905581543391161790554660381415620001b557601580546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620002ab565b4660611415620001eb57601580546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620002ab565b4660011480620001fb5750466004145b80620002075750466003145b156200023957601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620002ab565b4661a86a14156200027057601580546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d4179055620002ab565b4660fa1415620002a657601580546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c29179055620002ab565b600080fd5b600054601554620002cc916001600160a01b0390811691166000196200036a565b601554620002e89030906001600160a01b03166000196200036a565b600080546001600160a01b0390811682526006602090815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905585549094168552600a909252909220805490911690911790556200046b565b6001600160a01b038316620003bc5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200040a5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620003b3565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b615462806200047b6000396000f3fe6080604052600436106103b15760003560e01c8063684c8199116101e7578063b3d514fb1161010d578063dd62ed3e116100a0578063eec2744e1161006f578063eec2744e14610bd4578063f94aa1b414610bf4578063fdb78c0e14610c3b578063fe575a8714610c5a57600080fd5b8063dd62ed3e14610b43578063e4fcfd1814610b89578063eafb5a3c14610b9f578063ee5d9c2d14610bbf57600080fd5b8063c6831cd8116100dc578063c6831cd814610a4b578063cab5ebea14610a98578063cf84770614610ab8578063d3f6a15714610b2357600080fd5b8063b3d514fb146105a2578063bc77169d146109be578063becdf13f146109de578063c2fa418f146109fe57600080fd5b80638a63bd9b11610185578063aa22b17211610154578063aa22b1721461095e578063aa5454731461097e578063adc59ae01461099e578063b1b08f71146105a257600080fd5b80638a63bd9b146108ff5780638a8c523c1461091457806395d89b4114610929578063a9059cbb1461093e57600080fd5b80637b45d431116101c15780637b45d4311461080657806380c581d11461088857806388f82020146108a8578063893d20e8146108e157600080fd5b8063684c8199146107b157806370a08231146107d1578063715018a6146107f157600080fd5b80632b28fc7a116102d75780634a5a4a221161026a57806350a8e0161161023957806350a8e01614610719578063533ecf5414610738578063590ffdce146107585780635cce86cd1461077857600080fd5b80634a5a4a22146106905780634ada218b146106a65780634fb2e45d146106c05780634fbee193146106e057600080fd5b806333251a0b116102a657806333251a0b1461061057806334cd82601461063057806336fddb0414610650578063452ed4f11461067057600080fd5b80632b28fc7a146105a25780632d838119146105b85780632e8fa821146105d8578063313ce567146105ee57600080fd5b80630fa604e41161034f57806323b872dd1161031e57806323b872dd1461052857806326003957146105485780632610eaca14610568578063275a03a21461058857600080fd5b80630fa604e4146104c857806313e46192146104dd57806318160ddd146104fd57806318a610d71461051257600080fd5b806305bbedb61161038b57806305bbedb61461043657806306fdde03146104565780630758d92414610478578063095ea7b31461049857600080fd5b806303fd2a45146103bd5780630445b667146103f0578063044df7261461041457600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d361dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103fc57600080fd5b50610406601c5481565b6040519081526020016103e7565b34801561042057600080fd5b5061043461042f366004614993565b610c7a565b005b34801561044257600080fd5b50610434610451366004614ad9565b610d57565b34801561046257600080fd5b5061046b610df5565b6040516103e79190614b4c565b34801561048457600080fd5b506015546103d3906001600160a01b031681565b3480156104a457600080fd5b506104b86104b3366004614b7f565b610e87565b60405190151581526020016103e7565b3480156104d457600080fd5b50610406610e9e565b3480156104e957600080fd5b506104346104f8366004614bab565b610ec4565b34801561050957600080fd5b50610406611387565b34801561051e57600080fd5b5061040660225481565b34801561053457600080fd5b506104b8610543366004614bc9565b6113a0565b34801561055457600080fd5b50610434610563366004614c0a565b611418565b34801561057457600080fd5b50610434610583366004614c2c565b611523565b34801561059457600080fd5b506023546104b89060ff1681565b3480156105ae57600080fd5b506104066109c481565b3480156105c457600080fd5b506104066105d3366004614ce7565b61162f565b3480156105e457600080fd5b50610406601d5481565b3480156105fa57600080fd5b50600e5460405160ff90911681526020016103e7565b34801561061c57600080fd5b5061043461062b366004614d00565b6116c6565b34801561063c57600080fd5b5061043461064b366004614d1d565b611796565b34801561065c57600080fd5b5061043461066b366004614bab565b611826565b34801561067c57600080fd5b506016546103d3906001600160a01b031681565b34801561069c57600080fd5b5061040660215481565b3480156106b257600080fd5b506020546104b89060ff1681565b3480156106cc57600080fd5b506104346106db366004614d00565b61189f565b3480156106ec57600080fd5b506104b86106fb366004614d00565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561072557600080fd5b506020546104b890610100900460ff1681565b34801561074457600080fd5b50610434610753366004614d00565b611aa3565b34801561076457600080fd5b50610434610773366004614bab565b612041565b34801561078457600080fd5b506104b8610793366004614d00565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107bd57600080fd5b506104346107cc366004614d58565b6120ba565b3480156107dd57600080fd5b506104066107ec366004614d00565b61211b565b3480156107fd57600080fd5b5061043461217a565b34801561081257600080fd5b506011546108539061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103e7565b34801561089457600080fd5b506104346108a3366004614bab565b61222a565b3480156108b457600080fd5b506104b86108c3366004614d00565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108ed57600080fd5b506000546001600160a01b03166103d3565b34801561090b57600080fd5b506104b86123eb565b34801561092057600080fd5b5061043461245a565b34801561093557600080fd5b5061046b6126ac565b34801561094a57600080fd5b506104b8610959366004614b7f565b6126bb565b34801561096a57600080fd5b50610434610979366004614d8c565b6126d2565b34801561098a57600080fd5b50610434610999366004614dcf565b6127a8565b3480156109aa57600080fd5b506104346109b9366004614e23565b6128e8565b3480156109ca57600080fd5b506104346109d9366004614dcf565b612999565b3480156109ea57600080fd5b506104346109f9366004614dcf565b612ad9565b348015610a0a57600080fd5b506013546108539061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610a5757600080fd5b506012546108539061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610aa457600080fd5b50610434610ab3366004614d58565b612c19565b348015610ac457600080fd5b50601454610af59061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103e7565b348015610b2f57600080fd5b50610434610b3e366004614e55565b612cbb565b348015610b4f57600080fd5b50610406610b5e366004614e55565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b9557600080fd5b50610406601a5481565b348015610bab57600080fd5b50610434610bba366004614d00565b612d44565b348015610bcb57600080fd5b506104346130f3565b348015610be057600080fd5b50610434610bef366004614bab565b6131d3565b348015610c0057600080fd5b50601754601854610c1b916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103e7565b348015610c4757600080fd5b506019546104b890610100900460ff1681565b348015610c6657600080fd5b506104b8610c75366004614d00565b61327b565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6020546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d3b57600080fd5b505af1158015610d4f573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610da55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6020546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d219085908590600401614ec7565b6060600c8054610e0490614eeb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3090614eeb565b8015610e7d5780601f10610e5257610100808354040283529160200191610e7d565b820191906000526020600020905b815481529060010190602001808311610e6057829003601f168201915b5050505050905090565b6000610e94338484613309565b5060015b92915050565b600e54600090610eb29060ff16600a615052565b601f54610ebf9190615090565b905090565b6000546001600160a01b03163314610f125760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b8015611067576001600160a01b03821660009081526008602052604090205460ff1615610f815760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cc4565b6001600160a01b03821660009081526001602052604090205415610fdb576001600160a01b038216600090815260016020526040902054610fc19061162f565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff191660011790556016549091161461106357600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b80611063576001600160a01b03821660009081526008602052604090205460ff166110d45760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cc4565b6016546001600160a01b038381169116141561114f576110f2613416565b6001600160a01b03831660009081526002602052604090205461111591906150a4565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b600954600114156111ff57611162613416565b6001600160a01b03831660009081526002602052604090205461118591906150a4565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806111cc576111cc6150c3565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60095481101561138257826001600160a01b031660098281548110611229576112296150f2565b6000918252602090912001546001600160a01b03161415611370576009805461125490600190615121565b81548110611264576112646150f2565b600091825260209091200154600980546001600160a01b039092169183908110611290576112906150f2565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556112dc613416565b6001600160a01b0384166000908152600260205260409020546112ff91906150a4565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff19169055600980548061133c5761133c6150c3565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061137a81615138565b915050611202565b505050565b6000600f546000141561139957600080fd5b50600f5490565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611405576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906113ff908490615121565b90915550505b611410848484613689565b949350505050565b6000546001600160a01b031633146114665760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6103e8600f546114769190615090565b8183600f5461148591906150a4565b61148f9190615090565b10156115035760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610cc4565b8082600f5461151291906150a4565b61151c9190615090565b601f555050565b80518251146115745760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cc4565b60005b82518160ff16101561138257818160ff1681518110611598576115986150f2565b60200260200101516115a93361211b565b10156115b457600080fd5b61161c33848360ff16815181106115cd576115cd6150f2565b6020908102919091010151600e546115e99060ff16600a615052565b858560ff16815181106115fe576115fe6150f2565b602002602001015161161091906150a4565b60008060006001613c43565b508061162781615153565b915050611577565b60006010548211156116a95760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cc4565b60006116b3613416565b90506116bf8184615090565b9392505050565b6000546001600160a01b031633146117145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6020546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561177b57600080fd5b505af115801561178f573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146117e45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b8385600f546117f391906150a4565b6117fd9190615090565b601c55600f5482906118109085906150a4565b61181a9190615090565b601d55601a5550505050565b6000546001600160a01b031633146118745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118ed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6001600160a01b0381166119695760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc4565b6001600160a01b03811661dead14156119ea5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc4565b60008054611a03916001600160a01b0390911690612041565b611a0e816001612041565b60008054611a24906001600160a01b031661211b565b1115611a4b57600054611a49906001600160a01b031682611a448261211b565b613689565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611af15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b602354610100900460ff1615611b495760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610cc4565b80602060026101000a8154816001600160a01b0302191690836001600160a01b03160217905550602060029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611be457506040513d6000823e601f3d908101601f19168201604052611be191908101906151d7565b60015b611c305760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610cc4565b8351611c4390600c9060208701906148ec565b508251611c5790600d9060208601906148ec565b50600b829055600e805460ff191660ff8316908117909155611c7a90600a615052565b600b54611c8791906150a4565b600f819055611c989060001961525d565b611ca490600019615121565b60105550505050601560009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d229190615271565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da79190615271565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2f9190615271565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001908117909155600f54606491611e8791906150a4565b611e919190615090565b601f556023805461ff001916610100179055601054600080546001600160a01b03908116825260016020526040808320939093558154600f5493519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611efd91815260200190565b60405180910390a3601554611f1f9030906001600160a01b0316600019613309565b600054600f54611f4f916001600160a01b03169061dead90600a90611f459060046150a4565b611a449190615090565b50600054611f6a906001600160a01b031630611a448261211b565b506015546001600160a01b031663f305d7194730611f878161211b565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af115801561200e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612033919061528e565b50505061203e61245a565b50565b6000546001600160a01b0316331461208f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146121085760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6023805460ff1916911515919091179055565b6001600160a01b03811660009081526008602052604081205460ff161561215857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e989061162f565b6000546001600160a01b031633146121c85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b600080546121e1916001600160a01b0390911690612041565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b80612305576001600160a01b038281166000818152600360209081526040808320805460ff19169055905490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d3b57600080fd5b6004541561236c576203f4806004544261231f9190615121565b1161236c5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cc4565b6001600160a01b03828116600081815260036020908152604091829020805460ff19166001908117909155426004908155915492517f80c581d1000000000000000000000000000000000000000000000000000000008152918201939093526024810192909252620100009004909116906380c581d190604401610d21565b600080546001600160a01b0316331461243a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6015546124549030906001600160a01b0316600019613309565b50600190565b6000546001600160a01b031633146124a85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b60205460ff16156124fb5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cc4565b602054610100900460ff166125525760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cc4565b6020546201000090046001600160a01b031661259857602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602054601654600e546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561262957600080fd5b505af192505050801561263a575060015b506020805460ff1916600117905560165461271090612661906001600160a01b031661211b565b61266c9060056150a4565b6126769190615090565b601c556016546103e890612692906001600160a01b031661211b565b61269d9060016150a4565b6126a79190615090565b601d55565b6060600d8054610e0490614eeb565b60006126c8338484613689565b5060019392505050565b6000546001600160a01b031633146127205760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6014805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff1990941692881692909217929092171617905561277c82846152bc565b6014805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b031633146127f65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6000818361280486886152bc565b61280e91906152bc565b61281891906152bc565b90506109c48161ffff16111561282d57600080fd5b6013805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff0000000000001916176601000000000000918516919091021790556128a185826152e2565b6013805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b031633146129365760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b61294183600a615305565b61294b90856150a4565b60215561295981600a615305565b61296390836150a4565b6022556021546706f05b59d3b200001180159061298a5750670de0b6b3a764000060225410155b61299357600080fd5b50505050565b6000546001600160a01b031633146129e75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b600081836129f586886152bc565b6129ff91906152bc565b612a0991906152bc565b90506109c48161ffff161115612a1e57600080fd5b6011805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff000000000000191617660100000000000091851691909102179055612a9285826152e2565b6011805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612b275760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b60008183612b3586886152bc565b612b3f91906152bc565b612b4991906152bc565b90506109c48161ffff161115612b5e57600080fd5b6012805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff000000000000191617660100000000000091851691909102179055612bd285826152e2565b6012805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612c675760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b601980548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612cb090831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612d095760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b601780546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560188054929093169116179055565b6000546001600160a01b03163314612d925760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfb9190615271565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6c9190615271565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef39190615271565b90506001600160a01b03811661309157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f659190615271565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd69190615271565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561303b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305f9190615271565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556130ba565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611382903090600019613309565b6000546001600160a01b031633146131415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b602054610100900460ff16156131995760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cc4565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561203e573d6000803e3d6000fd5b6000546001600160a01b031633146132215760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc4565b6020546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d21565b6020546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156132e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e989190615311565b6001600160a01b03831661335f5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc4565b6001600160a01b0382166133b55760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc4565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054600f546016546001600160a01b03166000908152600860205260408120549092919060ff16156134f0576016546001600160a01b031660009081526001602052604090205482108061348457506016546001600160a01b031660009081526002602052604090205481105b156134a057600f546010546134999190615090565b9250505090565b6016546001600160a01b03166000908152600160205260409020546134c59083615121565b6016546001600160a01b03166000908152600260205260409020549092506134ed9082615121565b90505b600954156136585760005b60095460ff8216101561365657826001600060098460ff1681548110613523576135236150f2565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806135915750816002600060098460ff168154811061356a5761356a6150f2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156135ae57600f546010546135a69190615090565b935050505090565b6001600060098360ff16815481106135c8576135c86150f2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546135f79084615121565b92506002600060098360ff1681548110613613576136136150f2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546136429083615121565b91508061364e81615153565b9150506134fb565b505b600f546010546136689190615090565b82101561367f57600f546010546134999190615090565b6134998183615090565b60006001600160a01b0384166137075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cc4565b6001600160a01b0383166137835760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cc4565b600082116137f95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cc4565b6001600160a01b0384166000908152600360205260408120548190819060ff16156138275760019250613855565b6001600160a01b03861660009081526003602052604090205460ff16156138515760019150613855565b5060015b61385f8787613ebd565b15613b6d5760205460ff166138b65760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cc4565b82806138bf5750815b15613aa15760408051600280825260608201835260009260208301908036833701905050905030816000815181106138f9576138f96150f2565b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561396b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398f9190615271565b816001815181106139a2576139a26150f2565b6001600160a01b0392831660209182029290920101526015546040517fd06ca61f000000000000000000000000000000000000000000000000000000008152600092919091169063d06ca61f906139ff908a90869060040161532e565b600060405180830381865afa158015613a1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a449190810190615347565b600181518110613a5657613a566150f2565b602090810291909101015160235490915060ff1615613a9e578415613a8957602154811115613a8457600080fd5b613a9e565b8315613a9e57602254811115613a9e57600080fd5b50505b6015546001600160a01b03878116911614801590613abd575081155b15613b6d576001600160a01b03861660009081526007602052604090205460ff16613b6d57601f5485613aef8861211b565b613af991906153d8565b1115613b6d5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cc4565b6001600160a01b03871660009081526006602052604090205460019060ff1680613baf57506001600160a01b03871660009081526006602052604090205460ff165b15613bb8575060005b8215613c285760195460ff16158015613bd85750601954610100900460ff165b15613c285742601a54601b54613bee91906153d8565b1015613c28576000613bff3061211b565b9050601c548110613c2657601d548110613c185750601d545b613c2181613f91565b42601b555b505b613c3788888884888888613c43565b98975050505050505050565b602054600090610100900460ff16613cef57613c5f8888614418565b602054610100900460ff16158015613c7c5750613c7c8888613ebd565b15613cef5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cc4565b6000613d0089898989898989614577565b60808101516001600160a01b038b16600090815260016020526040812080549394509192613d2f908490615121565b909155505060608101516001600160a01b03891660009081526001602052604081208054909190613d619084906153d8565b90915550506001600160a01b03891660009081526008602052604090205460ff1615613dc5576001600160a01b038916600090815260026020526040902054613dab908890615121565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b03881660009081526008602052604090205460ff1615613e255780516001600160a01b038916600090815260026020526040902054613e0b91906153d8565b6001600160a01b0389166000908152600260205260409020555b60008160a001511180613e3c575060008160200151115b15613e5d578060a0015160106000828254613e579190615121565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613ea691815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b03848116911614801590613eea57506000546001600160a01b03838116911614155b8015613f0157506000546001600160a01b03163214155b8015613f2657506001600160a01b0382166000908152600a602052604090205460ff16155b8015613f4b57506001600160a01b0383166000908152600a602052604090205460ff16155b8015613f6257506001600160a01b03821661dead14155b8015613f7657506001600160a01b03821615155b80156116bf57506001600160a01b0383163014159392505050565b6019805460ff191660011790556040805160808101825260145461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052613fef575061440b565b3060009081526005602090815260408083206015546001600160a01b0316845290915290205460001914614048573060009081526005602090815260408083206015546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff168561406991906150a4565b6140739190615090565b61407d9190615090565b9050600061408b8285615121565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106140c5576140c56150f2565b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415b9190615271565b8160018151811061416e5761416e6150f2565b6001600160a01b0392831660209182029290920101526015546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906141cd9085906000908690309042906004016153f0565b600060405180830381600087803b1580156141e757600080fd5b505af11580156141fb573d6000803e3d6000fd5b504792506000915084905061421086846150a4565b61421a9190615090565b9050841561430b576015546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156142a9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142ce919061528e565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6143158183615121565b915085600001518660600181815161432d91906152e2565b61ffff9081169091526060880151604089015160009350908216916143539116856150a4565b61435d9190615090565b9050600061436b8285615121565b604089015190915061ffff16156143b8576018546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156143b6573d6000803e3d6000fd5b505b602088015161ffff1615614402576017546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614400573d6000803e3d6000fd5b505b50505050505050505b506019805460ff19169055565b602054610100900460ff16156144965760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cc4565b6144a08282613ebd565b1580156144ba57506016546001600160a01b038281169116145b15611063576001600160a01b038083166000908152600a60209081526040909120805460ff19166001179055805461ff00191661010017908190556201000090041661453057602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6145b76040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6145f76040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6145ff613416565b60c0820181905261461090886150a4565b608082015261461f8989613ebd565b156146d2576020546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301528a81166024830152604482018a9052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156146bb575060408051601f3d908101601f191682019092526146b891810190615311565b60015b6146c457600080fd5b9050806146d057600080fd5b505b85156147b95760008061271086156147045760125461ffff808216945068010000000000000000909104169150614746565b871561472a5760115461ffff808216945068010000000000000000909104169150614746565b60135461ffff8082169450680100000000000000009091041691505b80614751848c6150a4565b61475b9190615090565b60208501528061476b838c6150a4565b6147759190615090565b60408501819052602085015161478b91906153d8565b614795908b615121565b845260c084015160208501516147ab91906150a4565b60a0850152506147d2915050565b6000602082018190526040820181905287825260a08201525b6040810151156148a9578060c0015181604001516147f091906150a4565b306000908152600160205260408120805490919061480f9084906153d8565b90915550503060009081526008602052604090205460ff16156148575760408082015130600090815260026020529182208054919290916148519084906153d8565b90915550505b306001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604001516040516148a091815260200190565b60405180910390a35b8060c0015181604001516148bd91906150a4565b8160a001516148cc91906153d8565b81608001516148db9190615121565b606082015298975050505050505050565b8280546148f890614eeb565b90600052602060002090601f01602090048101928261491a5760008555614960565b82601f1061493357805160ff1916838001178555614960565b82800160010185558215614960579182015b82811115614960578251825591602001919060010190614945565b5061496c929150614970565b5090565b5b8082111561496c5760008155600101614971565b801515811461203e57600080fd5b600080604083850312156149a657600080fd5b82356149b181614985565b915060208301356149c181614985565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614a2457614a246149cc565b604052919050565b600067ffffffffffffffff821115614a4657614a466149cc565b5060051b60200190565b6001600160a01b038116811461203e57600080fd5b600082601f830112614a7657600080fd5b81356020614a8b614a8683614a2c565b6149fb565b82815260059290921b84018101918181019086841115614aaa57600080fd5b8286015b84811015614ace578035614ac181614a50565b8352918301918301614aae565b509695505050505050565b60008060408385031215614aec57600080fd5b823567ffffffffffffffff811115614b0357600080fd5b614b0f85828601614a65565b92505060208301356149c181614985565b60005b83811015614b3b578181015183820152602001614b23565b838111156129935750506000910152565b6020815260008251806020840152614b6b816040850160208701614b20565b601f01601f19169190910160400192915050565b60008060408385031215614b9257600080fd5b8235614b9d81614a50565b946020939093013593505050565b60008060408385031215614bbe57600080fd5b82356149b181614a50565b600080600060608486031215614bde57600080fd5b8335614be981614a50565b92506020840135614bf981614a50565b929592945050506040919091013590565b60008060408385031215614c1d57600080fd5b50508035926020909101359150565b60008060408385031215614c3f57600080fd5b823567ffffffffffffffff80821115614c5757600080fd5b614c6386838701614a65565b9350602091508185013581811115614c7a57600080fd5b85019050601f81018613614c8d57600080fd5b8035614c9b614a8682614a2c565b81815260059190911b82018301908381019088831115614cba57600080fd5b928401925b82841015614cd857833582529284019290840190614cbf565b80955050505050509250929050565b600060208284031215614cf957600080fd5b5035919050565b600060208284031215614d1257600080fd5b81356116bf81614a50565b600080600080600060a08688031215614d3557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208284031215614d6a57600080fd5b81356116bf81614985565b803561ffff81168114614d8757600080fd5b919050565b600080600060608486031215614da157600080fd5b614daa84614d75565b9250614db860208501614d75565b9150614dc660408501614d75565b90509250925092565b60008060008060808587031215614de557600080fd5b614dee85614d75565b9350614dfc60208601614d75565b9250614e0a60408601614d75565b9150614e1860608601614d75565b905092959194509250565b60008060008060808587031215614e3957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215614e6857600080fd5b8235614e7381614a50565b915060208301356149c181614a50565b600081518084526020808501945080840160005b83811015614ebc5781516001600160a01b031687529582019590820190600101614e97565b509495945050505050565b604081526000614eda6040830185614e83565b905082151560208301529392505050565b600181811c90821680614eff57607f821691505b60208210811415614f39577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614fa9578160001904821115614f8f57614f8f614f3f565b80851615614f9c57918102915b93841c9390800290614f73565b509250929050565b600082614fc057506001610e98565b81614fcd57506000610e98565b8160018114614fe35760028114614fed57615009565b6001915050610e98565b60ff841115614ffe57614ffe614f3f565b50506001821b610e98565b5060208310610133831016604e8410600b841016171561502c575081810a610e98565b6150368383614f6e565b806000190482111561504a5761504a614f3f565b029392505050565b60006116bf60ff841683614fb1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261509f5761509f615061565b500490565b60008160001904831182151516156150be576150be614f3f565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561513357615133614f3f565b500390565b600060001982141561514c5761514c614f3f565b5060010190565b600060ff821660ff81141561516a5761516a614f3f565b60010192915050565b600082601f83011261518457600080fd5b815167ffffffffffffffff81111561519e5761519e6149cc565b6151b16020601f19601f840116016149fb565b8181528460208386010111156151c657600080fd5b611410826020830160208701614b20565b600080600080608085870312156151ed57600080fd5b845167ffffffffffffffff8082111561520557600080fd5b61521188838901615173565b9550602087015191508082111561522757600080fd5b5061523487828801615173565b93505060408501519150606085015160ff8116811461525257600080fd5b939692955090935050565b60008261526c5761526c615061565b500690565b60006020828403121561528357600080fd5b81516116bf81614a50565b6000806000606084860312156152a357600080fd5b8351925060208401519150604084015190509250925092565b600061ffff8083168185168083038211156152d9576152d9614f3f565b01949350505050565b600061ffff838116908316818110156152fd576152fd614f3f565b039392505050565b60006116bf8383614fb1565b60006020828403121561532357600080fd5b81516116bf81614985565b8281526040602082015260006114106040830184614e83565b6000602080838503121561535a57600080fd5b825167ffffffffffffffff81111561537157600080fd5b8301601f8101851361538257600080fd5b8051615390614a8682614a2c565b81815260059190911b820183019083810190878311156153af57600080fd5b928401925b828410156153cd578351825292840192908401906153b4565b979650505050505050565b600082198211156153eb576153eb614f3f565b500190565b85815284602082015260a06040820152600061540f60a0830186614e83565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212202f63aa6bbf873d663e7b952c6eb202406bcf9143b5e8e0ee2704f5bdfaf87d1e64736f6c634300080c0033