60806040523480156200001157600080fd5b50604051620056da380380620056da8339810160408190526200003491620004c9565b8181816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200007057600080fd5b505afa15801562000085573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000af91908101906200051d565b816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620000e957600080fd5b505afa158015620000fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200012891908101906200051d565b6040516020016200013b92919062000628565b60408051601f19818403018152828201909152600382526244434160e81b60208301526001600055908686866001600160a01b03831615806200018557506001600160a01b038216155b806200019857506001600160a01b038116155b15620001b75760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0385169081179091556040805163e63a391f60e01b8152905163e63a391f91600480820192602092909190829003018186803b1580156200020c57600080fd5b505afa15801562000221573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002479190620005d5565b6001805462ffffff92909216600160e01b0262ffffff60e01b19909216919091179055600380546001600160a01b038085166001600160a01b0319928316811790935560048054918516919092161781556040805163313ce56760e01b8152905163313ce56792828101926020929190829003018186803b158015620002cc57600080fd5b505afa158015620002e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000307919062000603565b6200031490600a620006c4565b600160006101000a8154816001600160701b0302191690836001600160701b03160217905550806001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037457600080fd5b505afa15801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000603565b620003bc90600a620006c4565b600180546001600160701b0392909216600160701b02600160701b600160e01b031990921691909117905550508251620003ff9150600d90602085019062000423565b5080516200041590600e90602084019062000423565b50505050505050506200083a565b8280546200043190620007b8565b90600052602060002090601f016020900481019282620004555760008555620004a0565b82601f106200047057805160ff1916838001178555620004a0565b82800160010185558215620004a0579182015b82811115620004a057825182559160200191906001019062000483565b50620004ae929150620004b2565b5090565b5b80821115620004ae5760008155600101620004b3565b600080600060608486031215620004df57600080fd5b8351620004ec8162000821565b6020850151909350620004ff8162000821565b6040850151909250620005128162000821565b809150509250925092565b6000602082840312156200053057600080fd5b81516001600160401b03808211156200054857600080fd5b818401915084601f8301126200055d57600080fd5b8151818111156200057257620005726200080b565b604051601f8201601f19908116603f011681019083821181831017156200059d576200059d6200080b565b81604052828152876020848701011115620005b757600080fd5b620005ca83602083016020880162000785565b979650505050505050565b600060208284031215620005e857600080fd5b815162ffffff81168114620005fc57600080fd5b9392505050565b6000602082840312156200061657600080fd5b815160ff81168114620005fc57600080fd5b6402221a09d160dd1b8152600083516200064a81600585016020880162000785565b6201016960ed1b60059184019182015283516200066f81600884016020880162000785565b01600801949350505050565b600181815b80851115620006bc578160001904821115620006a057620006a0620007f5565b80851615620006ae57918102915b93841c939080029062000680565b509250929050565b6000620005fc60ff841683600082620006e0575060016200077f565b81620006ef575060006200077f565b8160018114620007085760028114620007135762000733565b60019150506200077f565b60ff841115620007275762000727620007f5565b50506001821b6200077f565b5060208310610133831016604e8410600b841016171562000758575081810a6200077f565b6200076483836200067b565b80600019048211156200077b576200077b620007f5565b0290505b92915050565b60005b83811015620007a257818101518382015260200162000788565b83811115620007b2576000848401525b50505050565b600181811c90821680620007cd57607f821691505b60208210811415620007ef57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200083757600080fd5b50565b614e90806200084a6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80635f64b55b11610125578063a57351f9116100ad578063c96ed6391161007c578063c96ed63914610521578063e111e3e714610534578063e985e9c514610547578063eb391aa81461055a578063f8fd31001461056d57600080fd5b8063a57351f9146104c8578063b0d2847c146104d0578063b88d4fde146104fb578063c87b56dd1461050e57600080fd5b80637e29e8a4116100f45780637e29e8a41461046a5780638119c06514610492578063833e46181461049a57806395d89b41146104ad578063a22cb465146104b557600080fd5b80635f64b55b1461041e5780636352211e1461043157806370a08231146104445780637a828b281461045757600080fd5b806323b872dd116101a857806332e8af461161017757806332e8af46146103865780633d783717146103c55780633fcf01e6146103d857806342842e0e146103eb5780635b6fd01d146103fe57600080fd5b806323b872dd1461032557806326742bed146103385780632a52803e1461034b5780632f84cbf51461037157600080fd5b8063095ea7b3116101ef578063095ea7b31461029e5780630ad82b2f146102b15780630b74e852146102c45780630f7d0f2b146102d75780630fc63d101461031257600080fd5b806301ffc9a714610221578063022c0d9f1461024957806306fdde031461025e578063081812fc14610273575b600080fd5b61023461022f366004614294565b61059b565b60405190151581526020015b60405180910390f35b61025c610257366004614588565b6105ed565b005b610266610cff565b604051610240919061495a565b610286610281366004614459565b610d91565b6040516001600160a01b039091168152602001610240565b61025c6102ac3660046141d6565b610e26565b600254610286906001600160a01b031681565b61025c6102d236600461448b565b610f3c565b6102fd6102e5366004614626565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610240565b600354610286906001600160a01b031681565b61025c61033336600461409f565b610fee565b61025c6103463660046144b0565b61101f565b6102fd610359366004614626565b600c6020526000908152604090205463ffffffff1681565b610379611052565b6040516102409190614a47565b6103b7610394366004614661565b600560209081526000938452604080852082529284528284209052825290205481565b604051908152602001610240565b61025c6103d33660046144f2565b6110f4565b61025c6103e6366004614601565b611545565b61025c6103f936600461409f565b6115a1565b61041161040c366004614459565b6115bc565b6040516102409190614a5a565b600454610286906001600160a01b031681565b61028661043f366004614459565b6117da565b6103b7610452366004614049565b611851565b61025c610465366004614459565b6118d8565b61047d610478366004614202565b611a2e565b60408051928352602083019190915201610240565b61025c611c1f565b6102346104a8366004614626565b611c3d565b610266611c53565b61025c6104c336600461414c565b611c62565b6102fd611d27565b6103b76104de366004614643565b600b60209081526000928352604080842090915290825290205481565b61025c6105093660046140e0565b611dd4565b61026661051c366004614459565b611e0c565b61025c61052f3660046145d3565b611f0d565b6103b7610542366004614459565b611fba565b610234610555366004614066565b6120ea565b6103b761056836600461417a565b612118565b6003546001600160a01b0390811660009081526008602052604080822054600454909316825290205461047d565b60006001600160e01b031982166380ac58cd60e01b14806105cc57506001600160e01b03198216635b5e139f60e01b145b806105e757506301ffc9a760e01b6001600160e01b03198316145b92915050565b600260005414156106195760405162461bcd60e51b815260040161061090614a10565b60405180910390fd5b600260008181559054604080516303956f4760e21b815290516001600160a01b0390921691630e55bd1c91600480820192608092909190829003018186803b15801561066457600080fd5b505afa158015610678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069c91906143d4565b90508060200151156106c1576040516313d0ff5960e31b815260040160405180910390fd5b6106c9613f7d565b6000806106de846040015185606001516123d5565b6020830151929550909350915060ff1661070b576040516346f8d7b160e11b815260040160405180910390fd5b4260005b846020015160ff168110156108d95760008560000151828151811061073657610736614de3565b602002602001015160000151905060008660000151838151811061075c5761075c614de3565b602002602001015160200151905060008760000151848151811061078257610782614de3565b60200260200101516040015111806107bb57506000876000015184815181106107ad576107ad614de3565b602002602001015160600151115b156108ae57600354875180516107fc9285926001600160a01b0390911691879081106107e9576107e9614de3565b602002602001015160400151888561282b565b600454875180516108389285926001600160a01b03909116918790811061082557610825614de3565b602002602001015160600151898561282b565b63ffffffff8281166000908152600660205260409020805463ffffffff19169183169190911790558161086b8186614bf0565b610876906001614bb4565b6108809190614c61565b63ffffffff8381166000908152600c60205260409020805463ffffffff1916929091169190911790556108c4565b6108c2600963ffffffff8085169061289e16565b505b505080806108d190614d66565b91505061070f565b5050505080604001518611806108f25750806060015185115b156109105760405163bb55fd2760e01b815260040160405180910390fd5b60008160c0015182604001516109269190614cc3565b905060008260e00151836060015161093e9190614cc3565b600354610160850151919250899189916001600160a01b039182169116141561098b576101208501516109719083614b9c565b9150846101000151836109849190614b9c565b92506109b1565b61012085015161099b9082614b9c565b9050846101000151846109ae9190614b9c565b93505b81156109ce576003546109ce906001600160a01b031689846128b1565b80156109eb576004546109eb906001600160a01b031689836128b1565b5050845115610ac557856001600160a01b0316633d33803c33600360009054906101000a90046001600160a01b0316600460009054906101000a90046001600160a01b03168c8c600360009054906101000a90046001600160a01b03166001600160a01b03168a61016001516001600160a01b0316148a61012001518b61010001518e6040518a63ffffffff1660e01b8152600401610a9299989796959493929190614836565b600060405180830381600087803b158015610aac57600080fd5b505af1158015610ac0573d6000803e3d6000fd5b505050505b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b0957600080fd5b505afa158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b419190614472565b600480546040516370a0823160e01b815230928101929092529192506000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b8b57600080fd5b505afa158015610b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc39190614472565b90508460c0015184610bd59190614b9c565b821080610bef575060e0850151610bec9084614b9c565b81105b15610c0d5760405163d562e29f60e01b815260040160405180910390fd5b6003546001600160a01b039081166000908152600860205260408082208790556004549092168152908120849055610c458584614cc3565b90506000610c538584614cc3565b90508115610c76578751600354610c76916001600160a01b0390911690846128b1565b8015610c97578751600454610c97916001600160a01b0390911690836128b1565b896001600160a01b0316336001600160a01b03167f985cca3348e25076ac7404c08e594a15b8529496ecbf6b08af7fa24c5d4e742b8e8e8c604001518c604051610ce49493929190614ad7565b60405180910390a35050600160005550505050505050505050565b6060600d8054610d0e90614d2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90614d2b565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b6000818152600f60205260408120546001600160a01b0316610e0a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610610565b506000908152601160205260409020546001600160a01b031690565b6000610e31826117da565b9050806001600160a01b0316836001600160a01b03161415610e9f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610610565b336001600160a01b0382161480610ebb5750610ebb81336120ea565b610f2d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610610565b610f378383612914565b505050565b60026000541415610f5f5760405162461bcd60e51b815260040161061090614a10565b6002600055610f6d82612982565b60008281526013602081815260408084205463ffffffff600160401b820481168652600684529185205487865293909252610fb392811691640100000000900416614cda565b905063ffffffff8116610fd95760405163d43195c360e01b815260040160405180910390fd5b610fe48383836129e8565b5050600160005550565b610ff83382612a15565b6110145760405162461bcd60e51b8152600401610610906149bf565b610f37838383612aec565b600260005414156110425760405162461bcd60e51b815260040161061090614a10565b6002600055610fe48383836129e8565b61105a613f7d565b600254604080516303956f4760e21b815290516000926001600160a01b031691630e55bd1c916004808301926080929190829003018186803b15801561109f57600080fd5b505afa1580156110b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d791906143d4565b90506110eb816040015182606001516123d5565b50909392505050565b600260005414156111175760405162461bcd60e51b815260040161061090614a10565b600260005584158015611128575083155b156111465760405163125f2a8360e21b815260040160405180910390fd5b6002546040805163b1d0a33760e01b815290516000926001600160a01b03169163b1d0a337916004808301926060929190829003018186803b15801561118b57600080fd5b505afa15801561119f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c39190614362565b90508060200151156111e8576040516313d0ff5960e31b815260040160405180910390fd5b6003546001600160a01b039081166000908152600860205260408082205460045490931682529020548188118061121e57508087115b1561123c5760405163bb55fd2760e01b815260040160405180910390fd5b600080891161124c57600061125a565b61125a84604001518a612c8c565b9050600080891161126c57600061127a565b61127a85604001518a612c8c565b9050891561129957600354611299906001600160a01b0316898c6128b1565b88156112b6576004546112b6906001600160a01b0316898b6128b1565b876001600160a01b031663f62c404133600360009054906101000a90046001600160a01b0316600460009054906101000a90046001600160a01b03168e8e88888f8f6040518a63ffffffff1660e01b815260040161131c9998979695949392919061489b565b600060405180830381600087803b15801561133657600080fd5b505af115801561134a573d6000803e3d6000fd5b50506003546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a082319060240160206040518083038186803b15801561139457600080fd5b505afa1580156113a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cc9190614472565b600480546040516370a0823160e01b815230928101929092529192506000916001600160a01b0316906370a082319060240160206040518083038186803b15801561141657600080fd5b505afa15801561142a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144e9190614472565b905061145a8487614b9c565b82108061146f575061146c8386614b9c565b81105b1561148d5760405163d562e29f60e01b815260040160405180910390fd5b60006114998784614cc3565b905060006114a78784614cc3565b905081156114ca5788516003546114ca916001600160a01b0390911690846128b1565b80156114eb5788516004546114eb916001600160a01b0390911690836128b1565b505060408088015181518e8152602081018e905263ffffffff909116918101919091526001600160a01b038b169033907f891529dc768bd9c3ee9afa282dfdaf4ddffed309e6dae2af016a804e1d05473390606001610ce4565b600260005414156115685760405162461bcd60e51b815260040161061090614a10565b6002600090815582815260136020526040902054611598908390600160601b90046001600160a01b0316836129e8565b50506001600055565b610f3783838360405180602001604052806000815250611dd4565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152600082815260136020908152604091829020825160c081018452815463ffffffff80821683526401000000008204811694830194909452600160401b810490931693810193909352600160601b9091046001600160a01b031660608301526001015460ff81161515608083018190526101009091046001600160f81b031660a0830152611695576004546001600160a01b03166116a2565b6003546001600160a01b03165b6001600160a01b0316825260808101516116c7576003546001600160a01b03166116d4565b6004546001600160a01b03165b6001600160a01b031660208301526040808201805163ffffffff90811692850192909252511661170557600061172f565b805160408083015163ffffffff90811660009081526006602052919091205461172f929116614cda565b63ffffffff16606083015261174383612cc5565b608083015260408082015163ffffffff908116600090815260066020908152929020549183015191811691161161177b5760006117aa565b60408082015163ffffffff90811660009081526006602090815292902054918301516117aa9290911690614cda565b63ffffffff1660a08301526117be83612efd565b60c0830152606001516001600160a01b031660e0820152919050565b6000818152600f60205260408120546001600160a01b0316806105e75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610610565b60006001600160a01b0382166118bc5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610610565b506001600160a01b031660009081526010602052604090205490565b600260005414156118fb5760405162461bcd60e51b815260040161061090614a10565b600260005561190981612982565b600061191482612cc5565b9050600061192183612efd565b9050600061192e84612f97565b9050600061193b85612fd2565b90506119468561300d565b61194f8561316a565b8315611997576001600160a01b0381166000908152600860205260408120805486929061197d908490614cc3565b9091555061199790506001600160a01b03821633866128b1565b82156119df576001600160a01b038216600090815260086020526040812080548592906119c5908490614cc3565b909155506119df90506001600160a01b03831633856128b1565b604080518681526020810185905290810185905233907f9b863fe095959050c7ed1d85b45c0922e5667da8f82299a3eebf4cbc584f79ec9060600160405180910390a250506001600055505050565b60008060026000541415611a545760405162461bcd60e51b815260040161061090614a10565b600260009081555b83811015611b31576000858583818110611a7857611a78614de3565b905060200201359050611a8a81612982565b6000611a9582612cc5565b60008381526013602052604090206001015490915060ff1615611ac357611abc8185614b9c565b9350611ad0565b611acd8186614b9c565b94505b5060008181526013602081815260408084208054600160401b810463ffffffff9081168752600685529286205496909552929091529290921663ffffffff19909116178155600101805460ff16905580611b2981614d66565b915050611a5c565b508115611b7e576003546001600160a01b031660009081526008602052604081208054849290611b62908490614cc3565b9091555050600354611b7e906001600160a01b031633846128b1565b8015611bca576004546001600160a01b031660009081526008602052604081208054839290611bae908490614cc3565b9091555050600454611bca906001600160a01b031633836128b1565b336001600160a01b03167f4fd01d816751d768469443eeebd391cbef7fae3c437c75730c0e1b9a3c174eee85858585604051611c099493929190614911565b60405180910390a2600160005590939092509050565b611c3b60008033604051806020016040528060008152506105ed565b565b60006105e7600963ffffffff8085169061320516565b6060600e8054610d0e90614d2b565b6001600160a01b038216331415611cbb5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610610565b3360008181526012602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b63ffffffff4260005b611d3a600961321d565b811015611dcf576000611d4e600983613227565b63ffffffff8082166000908152600c6020526040902054919250808516911611611d7c576000935050505090565b63ffffffff8082166000908152600c60205260408120549091611da191869116614cda565b90508463ffffffff168163ffffffff161015611dbb578094505b505080611dc781614d66565b915050611d30565b505090565b611dde3383612a15565b611dfa5760405162461bcd60e51b8152600401610610906149bf565b611e0684848484613233565b50505050565b60025460408051630442675760e41b815290516060926001600160a01b0316916344267570916004808301926020929190829003018186803b158015611e5157600080fd5b505afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8991906142ce565b60405163e9dc637560e01b8152306004820152602481018490526001600160a01b03919091169063e9dc63759060440160006040518083038186803b158015611ed157600080fd5b505afa158015611ee5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105e791908101906142eb565b60026000541415611f305760405162461bcd60e51b815260040161061090614a10565b600260005581611f5357604051631f2a200560e01b815260040160405180910390fd5b63ffffffff8116611f7757604051633c92196b60e11b815260040160405180910390fd5b6000611f8284612efd565b90506000611f908483614b9c565b9050611fae858284611fa863ffffffff881683614bdc565b87613266565b50506001600055505050565b600060026000541415611fdf5760405162461bcd60e51b815260040161061090614a10565b6002600055611fed82612982565b611ff682612cc5565b60008381526013602081815260408084208054600160401b810463ffffffff9081168752600685529286205489875294909352921663ffffffff19909116178155600101805460ff16905590915061204d83612fd2565b6001600160a01b03811660009081526008602052604081208054929350849290919061207a908490614cc3565b9091555061209490506001600160a01b03821633846128b1565b604080518481526001600160a01b038316602082015290810183905233907f7d3fe0088fc0b393d0c7629c8d9df3043bd33e8fc1a953dfa251ab201c6ebc389060600160405180910390a2506001600055919050565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205460ff1690565b60006002600054141561213d5760405162461bcd60e51b815260040161061090614a10565b60026000556003546001600160a01b0386811691161480159061216e57506004546001600160a01b03868116911614155b1561218c5760405163c1ab6dc160e01b815260040160405180910390fd5b63ffffffff83166121b057604051633c92196b60e11b815260040160405180910390fd5b6121c4600963ffffffff8085169061320516565b15801561224f5750600254604051639eceefe160e01b815263ffffffff841660048201526001600160a01b0390911690639eceefe19060240160206040518083038186803b15801561221557600080fd5b505afa158015612229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224d9190614277565b155b1561226d576040516305fabb6160e41b815260040160405180910390fd5b6003546000906001600160a01b03878116911614612296576004546001600160a01b03166122a3565b6003546001600160a01b03165b905060006122b763ffffffff861687614c13565b6001600160a01b0390811691506122d2908316333084613414565b6001600160a01b038716600090815260086020526040812080548392906122fa908490614b9c565b925050819055506001601460008282546123149190614b9c565b925050819055506123273360145461344c565b61233b600963ffffffff8087169061346a16565b506000806123506014548a8a8a60008b613476565b601454604080519182526001600160a01b038d811660208401528c169082015263ffffffff8084166060830152808a166080830152821660a0820152919350915033907f7bd589f2fd6a39318e78fbbbadbcd21ce8c1306fc0ecb4d7a49a7e4be9c67e639060c00160405180910390a250506014546001600055979650505050505050565b6123dd613f7d565b6000806000806000806123ee61367d565b9150915060005b8160ff168110156124685782818151811061241257612412614de3565b602002602001015160400151856124299190614b9c565b945082818151811061243d5761243d614de3565b602002602001015160600151846124549190614b9c565b93508061246081614d66565b9150506123f5565b5090865260ff1660208601526004805460015460035460405163a513355f60e01b81526001600160a01b0393841694810194909452600160701b9091046001600160701b031660248401528116604483015287169063a513355f9060640160206040518083038186803b1580156124de57600080fd5b505afa1580156124f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125169190614472565b6080860181905260015461253d906001600160701b0380821691600160701b900416614c42565b6125479190614bdc565b60a0860152608085015161255c908890612c8c565b856080015161256b9190614cc3565b935061257b878660a00151612c8c565b8560a0015161258a9190614cc3565b6001549093506000906125ae90600160701b90046001600160701b03168387613800565b6001549091506000906125cb906001600160701b03168587613800565b905060006125fc6001600e9054906101000a90046001600160701b03166001600160701b0316858a60800151613800565b9050848110156126d1576004546001600160a01b039081166101408a01526003541661016089015261262e8a82612c8c565b60c089015261263d8a85612c8c565b60e0890181905284906126509084614b9c565b61265a9190614cc3565b61010089015260c088015161266f8487614cc3565b6126799190614cc3565b61012089018190526003546001600160a01b03166000908152600860205260409020546126a69190614cc3565b6040808a01919091526004546001600160a01b0316600090815260086020522054606089015261281f565b848111156127cc576003546001600160a01b039081166101408a0152600454166101608901526127018a86612c8c565b60c0890152608088015160015461273d918c9161272e90600160701b90046001600160701b031689614c42565b6127389190614bdc565b612c8c565b60e089015260c088015185906127539085614b9c565b61275d9190614cc3565b61010089015260e08801516127728386614cc3565b61277c9190614cc3565b61012089019081526003546001600160a01b03908116600090815260086020818152604080842054818f0152945160045490941683525291909120546127c29190614cc3565b606089015261281f565b6127d68a86612c8c565b60c08901526127e58a85612c8c565b60e08901526003546001600160a01b03908116600090815260086020818152604080842054818e0152600454909416835252205460608901525b50505050509250925092565b63ffffffff85166000908152600b602090815260408083206001600160a01b0388168452909152902083905561286385858385613817565b63ffffffff94851660009081526005602090815260408083206001600160a01b03909716835295815285822092909616815294525050812055565b60006128aa83836138ab565b9392505050565b6040516001600160a01b038316602482015260448101829052610f3790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526139a5565b600081815260116020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612949826117da565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081815260136020526040902054600160601b90046001600160a01b03166129be5760405163673f032f60e11b815260040160405180910390fd5b6129c83382612a15565b6129e557604051635c427cd960e01b815260040160405180910390fd5b50565b610f37836129fc63ffffffff841685614c13565b6001600160a01b0316612a0e86612efd565b8585613266565b6000818152600f60205260408120546001600160a01b0316612a8e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610610565b6000612a99836117da565b9050806001600160a01b0316846001600160a01b03161480612ad45750836001600160a01b0316612ac984610d91565b6001600160a01b0316145b80612ae45750612ae481856120ea565b949350505050565b826001600160a01b0316612aff826117da565b6001600160a01b031614612b675760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610610565b6001600160a01b038216612bc95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610610565b612bd4600082612914565b6001600160a01b0383166000908152601060205260408120805460019290612bfd908490614cc3565b90915550506001600160a01b0382166000908152601060205260408120805460019290612c2b908490614b9c565b90915550506000818152600f602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600154600090606490600160e01b900462ffffff16612cb163ffffffff861685614c42565b612cbb9190614bdc565b6128aa9190614bdc565b6000818152601360209081526040808320815160c081018352815463ffffffff80821683526401000000008204811695830195909552600160401b810490941692810192909252600160601b9092046001600160a01b0316606082015260019091015460ff81161515608083018190526101009091046001600160f81b031660a08301528290612d60576004546001600160a01b0316612d6d565b6003546001600160a01b03165b6040808401805163ffffffff9081166000908152600760209081528482206001600160a01b03871683528152848220818901519451841683526006909152938120549495509384928216911610612dc8578460200151612de7565b60408086015163ffffffff908116600090815260066020529190912054165b63ffffffff908116825260208083019390935260409182016000908120548784015183168252600785528382206001600160a01b03881683528552838220885190931682529190935290822054909250612e419083614cc3565b905060008460800151612e6657600154600160701b90046001600160701b0316612e73565b6001546001600160701b03165b6001600160701b03169050600080612e988488606001516001600160a01b0316613a77565b91509150600082612eca5760608801516001600160a01b0316612ebb8587614bdc565b612ec59190614c42565b612ed4565b612ed48483614bdc565b90508760a001516001600160f81b031681612eef9190614b9c565b9a9950505050505050505050565b60008181526013602081815260408084205463ffffffff600160401b8204811686526006845291852054868652939092529182169164010000000090910416818111612f4d575060009392505050565b600084815260136020526040902054600160601b90046001600160a01b0316612f768383614cda565b63ffffffff16612f869190614c13565b6001600160a01b0316949350505050565b60008181526013602052604081206001015460ff16612fc1576004546001600160a01b03166105e7565b50506003546001600160a01b031690565b60008181526013602052604081206001015460ff16612ffc576003546001600160a01b03166105e7565b50506004546001600160a01b031690565b60008181526013602090815260408083205463ffffffff600160401b820481168086526006909452919093205491926401000000009004811691168082111561315057600084815260136020526040812054600160601b90046001600160a01b03169061307986612f97565b63ffffffff861660009081526005602090815260408083206001600160a01b03851684529091528120919250601384900b91906130b7866001614bb4565b63ffffffff1663ffffffff16815260200190815260200160002060008282546130e09190614c84565b909155505063ffffffff851660009081526005602090815260408083206001600160a01b03851684529091528120601384900b9161311f876001614bb4565b63ffffffff1663ffffffff16815260200190815260200160002060008282546131489190614b5b565b909155505050505b505050600090815260136020526040812081815560010155565b6000613175826117da565b9050613182600083612914565b6001600160a01b03811660009081526010602052604081208054600192906131ab908490614cc3565b90915550506000828152600f602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600081815260018301602052604081205415156128aa565b60006105e7825490565b60006128aa8383613abf565b61323e848484612aec565b61324a84848484613ae9565b611e065760405162461bcd60e51b81526004016106109061496d565b61326f85612982565b600061327a86612f97565b9050600061328787612cc5565b90506001600160f81b038111156132b157604051630930608960e11b815260040160405180910390fd5b600087815260136020526040902054600160401b900463ffffffff166132d68861300d565b6000806132e78a8689898888613476565b91509150878911156133515761331433306133028b8d614cc3565b6001600160a01b038916929190613414565b61331e888a614cc3565b6001600160a01b03861660009081526008602052604081208054909190613346908490614b9c565b909155506133b09050565b878910156133b0576133638989614cc3565b6001600160a01b0386166000908152600860205260408120805490919061338b908490614cc3565b909155506133b090503361339f8b8b614cc3565b6001600160a01b03881691906128b1565b604080518b81526001600160a01b038916602082015263ffffffff8481168284015283166060820152905133917ffa7c989fea93eb42545a9e7a74f2b8d966813e216a1dd7b59562af10dba259b4919081900360800190a250505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052611e069085906323b872dd60e01b906084016128dd565b613466828260405180602001604052806000815250613bf6565b5050565b60006128aa8383613c29565b6000806001600160a01b0386166134a0576040516314cee7cd60e11b815260040160405180910390fd5b63ffffffff808416600090815260066020526040902054166134c3816001614bb4565b92506134cf8682614bb4565b63ffffffff80861660009081526005602090815260408083206001600160a01b038e16845282528083209388168352929052908120805492945060138a900b9290919061351d908490614b5b565b909155505063ffffffff841660009081526005602090815260408083206001600160a01b038c1684529091528120601389900b9161355c856001614bb4565b63ffffffff1663ffffffff16815260200190815260200160002060008282546135859190614c84565b90915550506040805160c08101825263ffffffff928316815283831660208083019182529684168284019081526001600160a01b039a8b16606084019081526003549c8c169c8c169c909c14608084019081526001600160f81b03998a1660a0850190815260009e8f52601390995293909c209151825491519c519b51909a16600160601b026bffffffffffffffffffffffff9b8516600160401b029b909b1667ffffffffffffffff9c85166401000000000267ffffffffffffffff199092169a90941699909917989098179990991617969096178555955190519091166101000290151560ff161760019290920191909155509091565b606060008061368c600961321d565b90508067ffffffffffffffff8111156136a7576136a7614df9565b6040519080825280602002602001820160405280156136f957816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816136c55790505b50925060005b818110156137fa576000613714600983613227565b90504263ffffffff8281166000908152600c60205260409020549181169116116137e75763ffffffff808216600090815260066020526040812054909161375d91166001614bb4565b6040805160808101825263ffffffff80861682528316602082015260035492935091908201906137989085906001600160a01b031685613c78565b81526004546020909101906137b89085906001600160a01b031685613c78565b905286866137c581614d81565b975060ff16815181106137da576137da614de3565b6020026020010181905250505b50806137f281614d66565b9150506136ff565b50509091565b60008361380d8385614c42565b612ae49190614bdc565b63ffffffff841660009081526007602090815260408083206001600160a01b038716845290915281208161384c600186614cda565b63ffffffff168152602081019190915260400160002054905061386f8282614b9c565b63ffffffff95861660009081526007602090815260408083206001600160a01b0390981683529681528682209590971681529390955250502055565b600081815260018301602052604081205480156139945760006138cf600183614cc3565b85549091506000906138e390600190614cc3565b905081811461394857600086600001828154811061390357613903614de3565b906000526020600020015490508087600001848154811061392657613926614de3565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061395957613959614dcd565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105e7565b60009150506105e7565b5092915050565b60006139fa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ccb9092919063ffffffff16565b805190915015610f375780806020019051810190613a189190614277565b610f375760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610610565b60008083613a8b5750600190506000613ab8565b83830283858281613a9e57613a9e614db7565b0414613ab1576000809250925050613ab8565b6001925090505b9250929050565b6000826000018281548110613ad657613ad6614de3565b9060005260206000200154905092915050565b60006001600160a01b0384163b15613beb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613b2d9033908990889088906004016147f9565b602060405180830381600087803b158015613b4757600080fd5b505af1925050508015613b77575060408051601f3d908101601f19168201909252613b74918101906142b1565b60015b613bd1573d808015613ba5576040519150601f19603f3d011682016040523d82523d6000602084013e613baa565b606091505b508051613bc95760405162461bcd60e51b81526004016106109061496d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612ae4565b506001949350505050565b613c008383613cda565b613c0d6000848484613ae9565b610f375760405162461bcd60e51b81526004016106109061496d565b6000818152600183016020526040812054613c70575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105e7565b5060006105e7565b63ffffffff92831660008181526005602090815260408083206001600160a01b0390961680845295825280832094909616825292835284812054918152600b835284812093815292909152919020540190565b6060612ae48484600085613e1c565b6001600160a01b038216613d305760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610610565b6000818152600f60205260409020546001600160a01b031615613d955760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610610565b6001600160a01b0382166000908152601060205260408120805460019290613dbe908490614b9c565b90915550506000818152600f602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606082471015613e7d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610610565b843b613ecb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610610565b600080866001600160a01b03168587604051613ee791906147dd565b60006040518083038185875af1925050503d8060008114613f24576040519150601f19603f3d011682016040523d82523d6000602084013e613f29565b606091505b5091509150613f39828286613f44565b979650505050505050565b60608315613f535750816128aa565b825115613f635782518084602001fd5b8160405162461bcd60e51b8152600401610610919061495a565b60405180610180016040528060608152602001600060ff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b600082601f83011261400457600080fd5b813561401761401282614b33565b614b02565b81815284602083860101111561402c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561405b57600080fd5b81356128aa81614e0f565b6000806040838503121561407957600080fd5b823561408481614e0f565b9150602083013561409481614e0f565b809150509250929050565b6000806000606084860312156140b457600080fd5b83356140bf81614e0f565b925060208401356140cf81614e0f565b929592945050506040919091013590565b600080600080608085870312156140f657600080fd5b843561410181614e0f565b9350602085013561411181614e0f565b925060408501359150606085013567ffffffffffffffff81111561413457600080fd5b61414087828801613ff3565b91505092959194509250565b6000806040838503121561415f57600080fd5b823561416a81614e0f565b9150602083013561409481614e24565b6000806000806080858703121561419057600080fd5b843561419b81614e0f565b935060208501356141ab81614e0f565b925060408501356141bb81614e48565b915060608501356141cb81614e48565b939692955090935050565b600080604083850312156141e957600080fd5b82356141f481614e0f565b946020939093013593505050565b6000806020838503121561421557600080fd5b823567ffffffffffffffff8082111561422d57600080fd5b818501915085601f83011261424157600080fd5b81358181111561425057600080fd5b8660208260051b850101111561426557600080fd5b60209290920196919550909350505050565b60006020828403121561428957600080fd5b81516128aa81614e24565b6000602082840312156142a657600080fd5b81356128aa81614e32565b6000602082840312156142c357600080fd5b81516128aa81614e32565b6000602082840312156142e057600080fd5b81516128aa81614e0f565b6000602082840312156142fd57600080fd5b815167ffffffffffffffff81111561431457600080fd5b8201601f8101841361432557600080fd5b805161433361401282614b33565b81815285602083850101111561434857600080fd5b614359826020830160208601614cff565b95945050505050565b60006060828403121561437457600080fd5b6040516060810181811067ffffffffffffffff8211171561439757614397614df9565b60405282516143a581614e0f565b815260208301516143b581614e24565b602082015260408301516143c881614e48565b60408201529392505050565b6000608082840312156143e657600080fd5b6040516080810181811067ffffffffffffffff8211171561440957614409614df9565b604052825161441781614e0f565b8152602083015161442781614e24565b6020820152604083015161443a81614e48565b6040820152606083015161444d81614e0f565b60608201529392505050565b60006020828403121561446b57600080fd5b5035919050565b60006020828403121561448457600080fd5b5051919050565b6000806040838503121561449e57600080fd5b82359150602083013561409481614e0f565b6000806000606084860312156144c557600080fd5b8335925060208401356144d781614e0f565b915060408401356144e781614e48565b809150509250925092565b60008060008060006080868803121561450a57600080fd5b8535945060208601359350604086013561452381614e0f565b9250606086013567ffffffffffffffff8082111561454057600080fd5b818801915088601f83011261455457600080fd5b81358181111561456357600080fd5b89602082850101111561457557600080fd5b9699959850939650602001949392505050565b6000806000806080858703121561459e57600080fd5b843593506020850135925060408501356145b781614e0f565b9150606085013567ffffffffffffffff81111561413457600080fd5b6000806000606084860312156145e857600080fd5b833592506020840135915060408401356144e781614e48565b6000806040838503121561461457600080fd5b82359150602083013561409481614e48565b60006020828403121561463857600080fd5b81356128aa81614e48565b6000806040838503121561465657600080fd5b823561408481614e48565b60008060006060848603121561467657600080fd5b833561468181614e48565b925060208401356144d781614e0f565b600081518084526020808501945080840160005b838110156146ea578151805163ffffffff90811689528482015116848901526040808201519089015260609081015190880152608090960195908201906001016146a5565b509495945050505050565b6000815180845261470d816020860160208601614cff565b601f01601f19169290920160200192915050565b6000610180825181855261473782860182614691565b915050602083015161474e602086018260ff169052565b5060408301516040850152606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401516147be828701826001600160a01b03169052565b5050610160928301516001600160a01b03169390920192909252919050565b600082516147ef818460208701614cff565b9190910192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061482c908301846146f5565b9695505050505050565b600061012060018060a01b03808d168452808c166020850152808b1660408501525088606084015287608084015286151560a08401528560c08401528460e08401528061010084015261488b818401856146f5565b9c9b505050505050505050505050565b6001600160a01b038a81168252898116602083015288166040820152606081018790526080810186905260a0810185905260c0810184905261010060e08201819052810182905260006101208385828501376000838501820152601f909301601f19169091019091019998505050505050505050565b6060808252810184905260006001600160fb1b0385111561493157600080fd5b8460051b8087608085013760009083016080019081526020830194909452506040015292915050565b6020815260006128aa60208301846146f5565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020815260006128aa6020830184614721565b60006101008201905060018060a01b0380845116835280602085015116602084015250604083015163ffffffff8082166040850152806060860151166060850152608085015160808501528060a08601511660a0850152505060c083015160c083015260e083015161399e60e08401826001600160a01b03169052565b84815283602082015263ffffffff8316604082015260806060820152600061482c6080830184614721565b604051601f8201601f1916810167ffffffffffffffff81118282101715614b2b57614b2b614df9565b604052919050565b600067ffffffffffffffff821115614b4d57614b4d614df9565b50601f01601f191660200190565b600080821280156001600160ff1b0384900385131615614b7d57614b7d614da1565b600160ff1b8390038412811615614b9657614b96614da1565b50500190565b60008219821115614baf57614baf614da1565b500190565b600063ffffffff808316818516808303821115614bd357614bd3614da1565b01949350505050565b600082614beb57614beb614db7565b500490565b600063ffffffff80841680614c0757614c07614db7565b92169190910492915050565b60006001600160a01b0382811684821681151582840482111615614c3957614c39614da1565b02949350505050565b6000816000190483118215151615614c5c57614c5c614da1565b500290565b600063ffffffff80831681851681830481118215151615614c3957614c39614da1565b60008083128015600160ff1b850184121615614ca257614ca2614da1565b6001600160ff1b0384018313811615614cbd57614cbd614da1565b50500390565b600082821015614cd557614cd5614da1565b500390565b600063ffffffff83811690831681811015614cf757614cf7614da1565b039392505050565b60005b83811015614d1a578181015183820152602001614d02565b83811115611e065750506000910152565b600181811c90821680614d3f57607f821691505b60208210811415614d6057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614d7a57614d7a614da1565b5060010190565b600060ff821660ff811415614d9857614d98614da1565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146129e557600080fd5b80151581146129e557600080fd5b6001600160e01b0319811681146129e557600080fd5b63ffffffff811681146129e557600080fdfea2646970667358221220da0ad3258994f7770df48129c19337805ef590f1281c528c08c5b258ec87a40964736f6c634300080600330000000000000000000000000dbcca406b622ed1f455abc9560d51aa0c81560f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5990000000000000000000000006b175474e89094c44da98b954eedeac495271d0f