60066101609081526543726565707960d01b6101805260c090815260056101a081815264486f726e7960d81b6101c05260e05260096101e09081526857686f6c65736f6d6560b81b61020052610100526004610220818152634375746560e01b61024052610120526102a0604052610260908152634461726b60e01b61028052610140526200009191601191620007c7565b506040518060a001604052806040518060400160405280600681526020016563726565707960d01b815250815260200160405180604001604052806005815260200164686f726e7960d81b81525081526020016040518060400160405280600981526020016877686f6c65736f6d6560b81b8152508152602001604051806040016040528060048152602001636375746560e01b8152508152602001604051806040016040528060048152602001636461726b60e01b81525081525060169060056200015f929190620007c7565b506040805160a0810182526001808252600260208301526007928201929092526006606082015260808101919091526200019e90601b90600562000817565b506040805160a081018252600880825260208201819052600e92820183905260608201929092526080810191909152620001dd90601c90600562000817565b50604080516101008101909152603060a0820181815282916200559960c084013981526020016040518060600160405280602f81526020016200553a602f913981526020016040518060600160405280603081526020016200556960309139815260200160405180606001604052806031815260200162005601603191398152602001604051806060016040528060388152602001620055c96038913990526200028c90601d906005620007c7565b50604080516060810182526007602082019081526659616e6465726560c81b92820192909252908152620002c5906022906001620008aa565b506040805160808101825260088183018181526704269672050756d760c41b60608401528252825180840190935282526744656d204c69707360c01b60208381019190915281019190915262000320906023906002620008e8565b506040518060e001604052806040518060400160405280600a8152602001694d722e204665646f726160b01b81525081526020016040518060400160405280600c81526020016b04261736562616c6c204361760a41b815250815260200160405180604001604052806008815260200167151dda5b9ad89bdd60c21b815250815260200160405180604001604052806007815260200166109bdc99589bdd60ca1b81525081526020016040518060400160405280600881526020016714d8d85c99989bdd60c21b81525081526020016040518060400160405280600d81526020016c547572626f2041757473696d6f60981b81525081526020016040518060400160405280600a8152602001694b61776169692047757960b01b81525081525060259060076200045292919062000926565b506040518060c001604052806040518060400160405280600a8152602001692432b0b93a16b1b430b760b11b81525081526020016040518060400160405280600b81526020016a25b0bbb0b4b496b1b430b760a91b81525081526020016040518060400160405280600981526020016826b4b73496b1b430b760b91b81525081526020016040518060400160405280600a815260200169213ab9b9b496b1b430b760b11b8152508152602001604051806040016040528060098152602001682130b13c96b1b430b760b91b81525081526020016040518060400160405280600b81526020016a4d6f7368692d6d6f73686960a81b815250815250602c9060066200055e92919062000964565b5060408051606081018252600a60208201908152692a34329029b6b7b5b2b960b11b928201929092529081526200059a906032906001620008aa565b50348015620005a7575f80fd5b5060405180604001604052806007815260200166455243584f584f60c81b81525060405180604001604052806007815260200166455243584f584f60c81b8152506012612710604051806080016040528060598152602001620054e16059913933806200062d57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620006388162000766565b50600a62000647868262000ab5565b50600b62000656858262000ab5565b5060ff831660808190526200066d90600a62000c90565b60a08190526200067e908362000ca7565b6009556200068c81620007b5565b60016004819055335f818152600560209081526040808320805460ff19169095179094556009546007825284832081905584519081529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3505050505060646012600a62000709919062000c90565b620007179061271062000ca7565b6200072490600862000ca7565b62000730919062000cc1565b600f554360105560408051608081019091526059808252620054e16020830139600c906200075f908262000ab5565b5062000ce1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6003620007c3828262000ab5565b5050565b826005810192821562000805579160200282015b82811115620008055782518290620007f4908262000ab5565b5091602001919060010190620007db565b5062000813929150620009a2565b5090565b6001830191839082156200089c579160200282015f5b838211156200086c57835183826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026200082d565b80156200089a5782816101000a81549060ff02191690556001016020815f010492830192600103026200086c565b505b5062000813929150620009c2565b826001810192821562000805579160200282015b82811115620008055782518290620008d7908262000ab5565b5091602001919060010190620008be565b826002810192821562000805579160200282015b8281111562000805578251829062000915908262000ab5565b5091602001919060010190620008fc565b826007810192821562000805579160200282015b8281111562000805578251829062000953908262000ab5565b50916020019190600101906200093a565b826006810192821562000805579160200282015b8281111562000805578251829062000991908262000ab5565b509160200191906001019062000978565b8082111562000813575f620009b88282620009d8565b50600101620009a2565b5b8082111562000813575f8155600101620009c3565b508054620009e69062000a2b565b5f825580601f10620009f6575050565b601f0160209004905f5260205f209081019062000a149190620009c2565b50565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168062000a4057607f821691505b60208210810362000a5f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000ab057805f5260205f20601f840160051c8101602085101562000a8c5750805b601f840160051c820191505b8181101562000aad575f815560010162000a98565b50505b505050565b81516001600160401b0381111562000ad15762000ad162000a17565b62000ae98162000ae2845462000a2b565b8462000a65565b602080601f83116001811462000b1f575f841562000b075750858301515b5f19600386901b1c1916600185901b17855562000b79565b5f85815260208120601f198616915b8281101562000b4f5788860151825594840194600190910190840162000b2e565b508582101562000b6d57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111562000bd557815f190482111562000bb95762000bb962000b81565b8085161562000bc757918102915b93841c939080029062000b9a565b509250929050565b5f8262000bed5750600162000c8a565b8162000bfb57505f62000c8a565b816001811462000c14576002811462000c1f5762000c3f565b600191505062000c8a565b60ff84111562000c335762000c3362000b81565b50506001821b62000c8a565b5060208310610133831016604e8410600b841016171562000c64575081810a62000c8a565b62000c70838362000b95565b805f190482111562000c865762000c8662000b81565b0290505b92915050565b5f62000ca060ff84168362000bdd565b9392505050565b808202811582820484141762000c8a5762000c8a62000b81565b5f8262000cdc57634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05161479862000d495f395f81816104e801528181610d4001528181611e2a01528181611eb801528181612358015281816126b8015281816127440152818161277001528181612797015281816127e0015261280701525f6103e501526147985ff3fe608060405234801561000f575f80fd5b5060043610610282575f3560e01c80638462151c11610157578063c87b56dd116100d2578063e985e9c511610088578063f28ca1dd1161006e578063f28ca1dd1461064a578063f2fde38b14610652578063f8b45b0514610665575f80fd5b8063e985e9c5146105ef578063f242432a14610637575f80fd5b8063d9adc191116100b8578063d9adc19114610584578063dd62ed3e14610597578063e0df5b6f146105dc575f80fd5b8063c87b56dd14610569578063d547cfb71461057c575f80fd5b806399a2557a11610127578063a9059cbb1161010d578063a9059cbb14610530578063adcfa01114610543578063c5b8f77214610556575f80fd5b806399a2557a1461050a578063a22cb4651461051d575f80fd5b80638462151c146104ab5780638da5cb5b146104be57806395d89b41146104db578063976a8435146104e3575f80fd5b806318d217c311610201578063377880ea116101b75780635d0044ca1161019d5780635d0044ca1461045b57806370a082311461046e578063715018a6146104a3575f80fd5b8063377880ea146104195780634e1273f41461043b575f80fd5b80632d760d57116101e75780632d760d57146103ba5780632eb2c2d6146103cd578063313ce567146103e0575f80fd5b806318d217c31461039457806323b872dd146103a7575f80fd5b8063081812fc116102565780630e89341c1161023c5780630e89341c14610366578063153b0d1e1461037957806318160ddd1461038c575f80fd5b8063081812fc146102f9578063095ea7b314610353575f80fd5b8062fdd58e1461028657806301ffc9a7146102ac57806302fe5305146102cf57806306fdde03146102e4575b5f80fd5b61029961029436600461369d565b61066e565b6040519081526020015b60405180910390f35b6102bf6102ba3660046136f2565b61070d565b60405190151581526020016102a3565b6102e26102dd3660046137fe565b61083b565b005b6102ec61084f565b6040516102a391906138ae565b61032e6103073660046138c0565b60066020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a3565b6102bf61036136600461369d565b6108df565b6102ec6103743660046138c0565b6108f6565b6102e26103873660046138d7565b610901565b600954610299565b6102e26103a23660046137fe565b61095e565b6102bf6103b5366004613910565b610976565b6102996103c8366004613949565b61099b565b6102e26103db366004613a2d565b6109dd565b6104077f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102a3565b6102bf610427366004613ad0565b60056020525f908152604090205460ff1681565b61044e610449366004613ae9565b610a50565b6040516102a39190613be8565b6102e26104693660046138c0565b610b48565b61029961047c366004613ad0565b73ffffffffffffffffffffffffffffffffffffffff165f9081526007602052604090205490565b6102e2610b76565b61044e6104b9366004613ad0565b610b89565b5f5473ffffffffffffffffffffffffffffffffffffffff1661032e565b6102ec610bba565b6102997f000000000000000000000000000000000000000000000000000000000000000081565b61044e610518366004613949565b610bc9565b6102e261052b3660046138d7565b610d1c565b6102bf61053e36600461369d565b610d27565b6102e26105513660046138d7565b610d36565b6102bf61056436600461369d565b610e22565b6102ec6105773660046138c0565b610e64565b6102ec6114f7565b610299610592366004613ad0565b611583565b6102996105a5366004613bfa565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260086020908152604080832093909416825291909152205490565b6102e26105ea3660046137fe565b611592565b6102bf6105fd366004613bfa565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260026020908152604080832093909416825291909152205460ff1690565b6102e2610645366004613c2b565b6115a6565b6102ec611696565b6102e2610660366004613ad0565b6116a3565b610299600f5481565b5f73ffffffffffffffffffffffffffffffffffffffff83166106bc576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83165f908152600160208181526040808420600887901c85529091529091205460ff84161c161561070457506001610707565b505f5b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061079f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806107eb57507fffffffff0000000000000000000000000000000000000000000000000000000082167fe4d82d0f00000000000000000000000000000000000000000000000000000000145b8061070757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610707565b610843611703565b61084c81611755565b50565b6060600a805461085e90613c8b565b80601f016020809104026020016040519081016040528092919081815260200182805461088a90613c8b565b80156108d55780601f106108ac576101008083540402835291602001916108d5565b820191905f5260205f20905b8154815290600101906020018083116108b857829003601f168201915b5050505050905090565b5f336108ec818585611761565b5060019392505050565b606061070782610e64565b610909611703565b73ffffffffffffffffffffffffffffffffffffffff919091165f908152600e6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b610966611703565b600c6109728282613d20565b5050565b5f33610983858285611773565b6109908585856001611840565b506001949350505050565b5f6109d5836109aa8185613e65565b73ffffffffffffffffffffffffffffffffffffffff87165f908152600160205260409020919061196f565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8516331480610a065750610a0685336105fd565b610a3c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a498585858585611c58565b5050505050565b60608151835114610a8d576040517f7801f4e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f835167ffffffffffffffff811115610aa857610aa861370d565b604051908082528060200260200182016040528015610ad1578160200160208202803683370190505b5090505f5b8451811015610b4057610b1b858281518110610af457610af4613e78565b6020026020010151858381518110610b0e57610b0e613e78565b602002602001015161066e565b828281518110610b2d57610b2d613e78565b6020908102919091010152600101610ad6565b509392505050565b610b50611703565b606481610b5c60095490565b610b669190613ea5565b610b709190613ee9565b600f5550565b610b7e611703565b610b875f611f9e565b565b6060610b93612012565b5f03610bac575050604080515f81526020810190915290565b610707826001600454610bc9565b6060600b805461085e90613c8b565b6060818310610c04576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001831015610c1257600192505b5f610c1c60045490565b905080831115610c2a578092505b5f83851015610c4557610c3e86868661099b565b9050610c48565b505f5b5f8167ffffffffffffffff811115610c6257610c6261370d565b604051908082528060200260200182016040528015610c8b578160200160208202803683370190505b5073ffffffffffffffffffffffffffffffffffffffff88165f90815260016020526040812091925087905b848114610d0e57600882901c5f9081526020849052604090205460ff83161c60011615610d035781848280600101935081518110610cf657610cf6613e78565b6020026020010181815250505b816001019150610cb6565b509198975050505050505050565b610972338383612027565b5f336108ec8185856001611840565b610d3e611703565b7f0000000000000000000000000000000000000000000000000000000000000000610d8a8373ffffffffffffffffffffffffffffffffffffffff165f9081526007602052604090205490565b10158015610d96575080155b15610dcd576040517ff543eef600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208181526040808420600886901c855290915282205460ff84161c165b9392505050565b6060610e6f60045490565b8210610ea7576040517f5f6f1f0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600d8054610eb590613c8b565b90501115610eef57600d610ec883612179565b604051602001610ed9929190613fa4565b6040516020818303038152906040529050919050565b60408051602080820183525f808352835180830185528181528451808401865282815285518085018752838152865180860188528481528751808701895285815288519687018b9052969793969295919490939091600591016040516020818303038152906040528051906020012060f81c60ff16610f6e9190613fc8565b905060118160ff1660058110610f8657610f86613e78565b018054610f9290613c8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbe90613c8b565b80156110095780601f10610fe057610100808354040283529160200191611009565b820191905f5260205f20905b815481529060010190602001808311610fec57829003601f168201915b5050505050965060168160ff166005811061102657611026613e78565b01805461103290613c8b565b80601f016020809104026020016040519081016040528092919081815260200182805461105e90613c8b565b80156110a95780601f10611080576101008083540402835291602001916110a9565b820191905f5260205f20905b81548152906001019060200180831161108c57829003601f168201915b505050505095505f601b8260ff16600581106110c7576110c7613e78565b602091828204019190069054906101000a900460ff1660088b6040516020016110f291815260200190565b60405160208183030381529060405280519060200120901b60f81c6111179190613fdb565b90508160ff165f036111c85760228160ff166001811061113957611139613e78565b01805461114590613c8b565b80601f016020809104026020016040519081016040528092919081815260200182805461117190613c8b565b80156111bc5780601f10611193576101008083540402835291602001916111bc565b820191905f5260205f20905b81548152906001019060200180831161119f57829003601f168201915b505050505095506112d7565b8160ff166001036111e95760238160ff166002811061113957611139613e78565b8160ff1660020361120a5760258160ff166007811061113957611139613e78565b8160ff1660030361122b57602c8160ff166006811061113957611139613e78565b8160ff166004036112d75760328160ff166001811061124c5761124c613e78565b01805461125890613c8b565b80601f016020809104026020016040519081016040528092919081815260200182805461128490613c8b565b80156112cf5780601f106112a6576101008083540402835291602001916112cf565b820191905f5260205f20905b8154815290600101906020018083116112b257829003601f168201915b505050505095505b5f601c8360ff16600581106112ee576112ee613e78565b602091828204019190069054906101000a900460ff1660108c60405160200161131991815260200190565b60405160208183030381529060405280519060200120901b60f81c61133e9190613fdb565b90505f600961134e836001613ffc565b60ff16116113905761136c611364836001613ffc565b60ff16612179565b60405160200161137c9190614015565b60405160208183030381529060405261139e565b61139e611364836001613ffc565b90505f60096113ae856001613ffc565b60ff16116113e8576113c4611364856001613ffc565b6040516020016113d49190614015565b6040516020818303038152906040526113f6565b6113f6611364856001613ffc565b90508a8260405160200161140b929190614059565b6040516020818303038152906040529750601d8560ff166005811061143257611432613e78565b01898c8460405160200161144994939291906140b0565b604051602081830303815290604052965089818b8460405160200161147194939291906141a5565b60405160208183030381529060405295505f61148c8e612179565b88600c89600c8b6040516020016114a89695949392919061427a565b6040516020818303038152906040529050808c8b8b6040516020016114d09493929190614406565b6040516020818303038152906040529c50505050505050505050505050919050565b919050565b600d805461150490613c8b565b80601f016020809104026020016040519081016040528092919081815260200182805461153090613c8b565b801561157b5780601f106115525761010080835404028352916020019161157b565b820191905f5260205f20905b81548152906001019060200180831161155e57829003601f168201915b505050505081565b5f61070782600160045461099b565b61159a611703565b600d6109728282613d20565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526005602052604090205460ff1615611622576040517fbe0c433b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff851633148061164b575061164b85336105fd565b156116645761165f85858585856001612235565b610a49565b6040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c805461150490613c8b565b6116ab611703565b73ffffffffffffffffffffffffffffffffffffffff81166116fa576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401611619565b61084c81611f9e565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b87576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401611619565b60036109728282613d20565b61176e838383600161242e565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600860209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461183a578181101561182c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401611619565b61183a84848484035f61242e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff841661188f576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401611619565b73ffffffffffffffffffffffffffffffffffffffff83166118de576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401611619565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611963576040517f2fd6adab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808616600483015284166024820152604401611619565b61183a84848484612573565b5f600883901c60ff841661010184820110611b67575f828152602087905260409020547f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f555555555555555555555555555555555555555555555555555555555555555591831c600181901c929092168203600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911460081b17930160ff811693925060018201915f9160081c015b808314611b65575f838152602088905260409020547f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c168203600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911460081b1784019350826001019250611a77565b505b5f828152602087905260409020547f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f555555555555555555555555555555555555555555555555555555555555555591831c6101008790031b600181901c929092168203600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911460081b1790920195945050505050565b8151835114611c93576040517f7801f4e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416611ce0576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33611ced8187878761285b565b5f5b8451811015611e20575f858281518110611d0b57611d0b613e78565b602002602001015190505f858381518110611d2857611d28613e78565b60200260200101519050806001148015611d79575073ffffffffffffffffffffffffffffffffffffffff89165f908152600160208181526040808420600887901c85529091529091205460ff84161c165b15611de45773ffffffffffffffffffffffffffffffffffffffff8981165f908152600160208181526040808420600888901c808652908352818520805460ff8a1686901b8019909116909155958e168552928252808420928452919052902080549091179055611e16565b6040517f37dbad3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600101611cef565b50611e65868686517f00000000000000000000000000000000000000000000000000000000000000006001611e559190613ea5565b611e5f9190613ea5565b5f611840565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86517f00000000000000000000000000000000000000000000000000000000000000006001611ee39190613ea5565b611eed9190613ea5565b60405190815260200160405180910390a38473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611f74929190614599565b60405180910390a4611f8881878787612a1a565b611f96818787878787612b22565b505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60016004546120229190613e65565b905090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608401611619565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526002602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60605f61218583612d08565b60010190505f8167ffffffffffffffff8111156121a4576121a461370d565b6040519080825280601f01601f1916602001820160405280156121ce576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846121d857509392505050565b73ffffffffffffffffffffffffffffffffffffffff8516612282576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f61228d86612de9565b905061229b8289898461285b565b8460011480156122e2575073ffffffffffffffffffffffffffffffffffffffff88165f90815260016020818152604080842060088b901c85529091529091205460ff88161c165b15611de45773ffffffffffffffffffffffffffffffffffffffff8881165f90815260016020818152604080842060088c901c808652908352818520805460ff8e1686901b8019909116909155958d168552838352818520908552909152909120805490921790915561237d9089908990611e5f907f000000000000000000000000000000000000000000000000000000000000000090613ea5565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516123fc929190918252602082015260400190565b60405180910390a461241082898984612a1a565b821561242457612424828989898989612e2f565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841661247d576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401611619565b73ffffffffffffffffffffffffffffffffffffffff83166124cc576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401611619565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600860209081526040808320938716835292905220829055801561183a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161256591815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8085165f9081526007602052604080822054928616825290205483821015612602576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526024810183905260448101859052606401611619565b73ffffffffffffffffffffffffffffffffffffffff8087165f8181526007602052604080822088870390559288168082529083902080548801905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061266e9088815260200190565b60405180910390a38215611f965773ffffffffffffffffffffffffffffffffffffffff8087165f9081526005602052604080822054928816825281205460ff9283169216906126dd7f000000000000000000000000000000000000000000000000000000000000000088613ee9565b90508280156126e95750815b61285057821561270b578015612706576127038882612f85565b50505b612850565b811561272157801561270657612706898261320c565b801561273e57612731898261320c565b61273b8882612f85565b50505b5f6127697f000000000000000000000000000000000000000000000000000000000000000089613fc8565b90506127957f000000000000000000000000000000000000000000000000000000000000000087613ee9565b7f00000000000000000000000000000000000000000000000000000000000000006127c08389613e65565b6127ca9190613ee9565b10156127db576127db8a600161320c565b6128057f000000000000000000000000000000000000000000000000000000000000000086613ee9565b7f000000000000000000000000000000000000000000000000000000000000000061283083886145c6565b61283a9190613ee9565b111561284e5761284b896001612f85565b50505b505b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600e602052604090205460ff16156128ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53656e64657220697320424c41434b4c49535445442e000000000000000000006044820152606401611619565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600e602052604090205460ff1615612979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f526563697069656e7420697320424c41434b4c49535445442e000000000000006044820152606401611619565b6010546129879060586145c6565b4311612a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f5472616e73666572732061726520424c4f434b454420666f722066697273742060448201527f383820626c6f636b73204146544552204445504c4f594d454e542e00000000006064820152608401611619565b61183a565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090205460ff16612a1557600f5473ffffffffffffffffffffffffffffffffffffffff83165f908152600760205260409020541115612a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f5472616e73666572204558434545445320616c6c6f77656420686f6c64696e6760448201527f205045522077616c6c65742e205072657061726520464f52206465737472756360648201527f74696f6e2e000000000000000000000000000000000000000000000000000000608482015260a401611619565b73ffffffffffffffffffffffffffffffffffffffff84163b15611f96576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c8190612b9990899089908890889088906004016145d9565b6020604051808303815f875af1925050508015612bf1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612bee91810190614643565b60015b612c8457612bfd61465e565b806308c379a003612c505750612c11614677565b80612c1c5750612c52565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161991906138ae565b505b6040517f9c05499b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014612cff576040517f9c05499b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612d50577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612d7c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612d9a57662386f26fc10000830492506010015b6305f5e1008310612db2576305f5e100830492506008015b6127108310612dc657612710830492506004015b60648310612dd8576064830492506002015b600a83106107075760010192915050565b6040805160018082528183019092526060916020808301908036833701905050905081815f81518110612e1e57612e1e613e78565b602002602001018181525050919050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611f96576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190612ea6908990899088908890889060040161471e565b6020604051808303815f875af1925050508015612efe575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612efb91810190614643565b60015b612f0a57612bfd61465e565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014612cff576040517f9c05499b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608073ffffffffffffffffffffffffffffffffffffffff8416612fd5576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f0361300e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b338367ffffffffffffffff8111156130285761302861370d565b604051908082528060200260200182016040528015613051578160200160208202803683370190505b5092508367ffffffffffffffff81111561306d5761306d61370d565b604051908082528060200260200182016040528015613096578160200160208202803683370190505b5091505f6130a360045490565b905080857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0310156130d3575f80fd5b5f5b85811015613125578082018582815181106130f2576130f2613e78565b602002602001018181525050600184828151811061311257613112613e78565b60209081029190910101526001016130d5565b50613132825f888761285b565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526001602052604090206131619082876134f7565b8460045f82825461317291906145c6565b925050819055508573ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516131ef929190614599565b60405180910390a4613203825f8887612a1a565b50509250929050565b73ffffffffffffffffffffffffffffffffffffffff8216613259576040517fb817eee700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045433905f8367ffffffffffffffff8111156132785761327861370d565b6040519080825280602002602001820160405280156132a1578160200160208202803683370190505b5090505f8467ffffffffffffffff8111156132be576132be61370d565b6040519080825280602002602001820160405280156132e7578160200160208202803683370190505b5090505f5b858110156133b157600183828151811061330857613308613e78565b60209081029190910181019190915273ffffffffffffffffffffffffffffffffffffffff88165f908152600190915260408120613345908661356d565b90508083838151811061335a5761335a613e78565b60209081029190910181019190915273ffffffffffffffffffffffffffffffffffffffff89165f90815260018083526040808320600886901c8452909352919020805460ff841683901b19169055909450016132ec565b506133be84875f8461285b565b8460010361346c575f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62845f8151811061343e5761343e613e78565b6020026020010151600160405161345f929190918252602082015260400190565b60405180910390a46134eb565b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb84866040516134e2929190614599565b60405180910390a45b611f9684875f84612a1a565b5f1960ff8316846020528360081c5f5261010183820110613553575f805160408220805485851b1790559390910160ff811693600181019160081c015b80821461354f57815f528360405f2055600182019150613534565b505f525b60405f208284610100031c821b8154178155505050505050565b600881901c5f818152602084905260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff919060ff84191690811b901c811581176135cc575b5081015f818152604090205481158117156135b6575b801561367257613663817f0706060506020504060203020504030106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be831560081b6fffffffffffffffffffffffffffffffff851160071b1784811c67ffffffffffffffff1060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b600883901b178481115f031792505b505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146114f2575f80fd5b5f80604083850312156136ae575f80fd5b6136b78361367a565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461084c575f80fd5b5f60208284031215613702575f80fd5b8135610e5d816136c5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561377e5761377e61370d565b6040525050565b5f67ffffffffffffffff83111561379e5761379e61370d565b6040516137d360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116018261373a565b8091508381528484840111156137e7575f80fd5b838360208301375f60208583010152509392505050565b5f6020828403121561380e575f80fd5b813567ffffffffffffffff811115613824575f80fd5b8201601f81018413613834575f80fd5b6109d584823560208401613785565b5f5b8381101561385d578181015183820152602001613845565b50505f910152565b5f815180845261387c816020860160208601613843565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610e5d6020830184613865565b5f602082840312156138d0575f80fd5b5035919050565b5f80604083850312156138e8575f80fd5b6138f18361367a565b915060208301358015158114613905575f80fd5b809150509250929050565b5f805f60608486031215613922575f80fd5b61392b8461367a565b92506139396020850161367a565b9150604084013590509250925092565b5f805f6060848603121561395b575f80fd5b6139648461367a565b95602085013595506040909401359392505050565b5f67ffffffffffffffff8211156139925761399261370d565b5060051b60200190565b5f82601f8301126139ab575f80fd5b813560206139b882613979565b6040516139c5828261373a565b80915083815260208101915060208460051b8701019350868411156139e8575f80fd5b602086015b84811015613a0457803583529183019183016139ed565b509695505050505050565b5f82601f830112613a1e575f80fd5b610e5d83833560208501613785565b5f805f805f60a08688031215613a41575f80fd5b613a4a8661367a565b9450613a586020870161367a565b9350604086013567ffffffffffffffff80821115613a74575f80fd5b613a8089838a0161399c565b94506060880135915080821115613a95575f80fd5b613aa189838a0161399c565b93506080880135915080821115613ab6575f80fd5b50613ac388828901613a0f565b9150509295509295909350565b5f60208284031215613ae0575f80fd5b610e5d8261367a565b5f8060408385031215613afa575f80fd5b823567ffffffffffffffff80821115613b11575f80fd5b818501915085601f830112613b24575f80fd5b81356020613b3182613979565b604051613b3e828261373a565b83815260059390931b8501820192828101915089841115613b5d575f80fd5b948201945b83861015613b8257613b738661367a565b82529482019490820190613b62565b96505086013592505080821115613b97575f80fd5b50613ba48582860161399c565b9150509250929050565b5f815180845260208085019450602084015f5b83811015613bdd57815187529582019590820190600101613bc1565b509495945050505050565b602081525f610e5d6020830184613bae565b5f8060408385031215613c0b575f80fd5b613c148361367a565b9150613c226020840161367a565b90509250929050565b5f805f805f60a08688031215613c3f575f80fd5b613c488661367a565b9450613c566020870161367a565b93506040860135925060608601359150608086013567ffffffffffffffff811115613c7f575f80fd5b613ac388828901613a0f565b600181811c90821680613c9f57607f821691505b602082108103613cd6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b601f82111561176e57805f5260205f20601f840160051c81016020851015613d015750805b601f840160051c820191505b81811015610a49575f8155600101613d0d565b815167ffffffffffffffff811115613d3a57613d3a61370d565b613d4e81613d488454613c8b565b84613cdc565b602080601f831160018114613da0575f8415613d6a5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611f96565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613dec57888601518255948401946001909101908401613dcd565b5085821015613e2857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561070757610707613e38565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b808202811582820484141761070757610707613e38565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82613ef757613ef7613ebc565b500490565b5f8154613f0881613c8b565b60018281168015613f205760018114613f5357613f7f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450613f7f565b855f526020805f205f5b85811015613f765781548a820152908401908201613f5d565b50505082870194505b5050505092915050565b5f8151613f9a818560208601613843565b9290920192915050565b5f613faf8285613efc565b8351613fbf818360208801613843565b01949350505050565b5f82613fd657613fd6613ebc565b500690565b5f60ff831680613fed57613fed613ebc565b8060ff84160691505092915050565b60ff818116838216019081111561070757610707613e38565b7f300000000000000000000000000000000000000000000000000000000000000081525f825161404c816001850160208701613843565b9190910160010192915050565b5f835161406a818460208801613843565b7f2d43617074696f6e2d000000000000000000000000000000000000000000000090830190815283516140a4816009840160208801613843565b01600901949350505050565b5f6140bb8287613efc565b7f2028000000000000000000000000000000000000000000000000000000000000815285516140f1816002840160208a01613843565b7f207820000000000000000000000000000000000000000000000000000000000060029290910191820152845161412f816005840160208901613843565b7f2d0000000000000000000000000000000000000000000000000000000000000060059290910191820152835161416d816006840160208801613843565b7f2900000000000000000000000000000000000000000000000000000000000000600692909101918201526007019695505050505050565b5f85516141b6818460208a01613843565b7f2d0000000000000000000000000000000000000000000000000000000000000090830190815285516141f0816001840160208a01613843565b7f5f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161422e816002840160208901613843565b7f2d63617074696f6e2d000000000000000000000000000000000000000000000060029290910191820152835161426c81600b840160208801613843565b01600b019695505050505050565b7f7b226e616d65223a22455243584f584f2023000000000000000000000000000081525f87516142b1816012850160208c01613843565b7f222c226465736372697074696f6e223a2200000000000000000000000000000060129184019182015287516142ee816023840160208c01613843565b7f222c2265787465726e616c5f75726c223a2268747470733a2f2f657263786f78602392909101918201527f6f2e6c6f7665222c22696d616765223a22000000000000000000000000000000604382015261434c6054820188613efc565b9050855161435e818360208a01613843565b7f2e706e670000000000000000000000000000000000000000000000000000000091019081527f222c22616e696d6174696f6e5f75726c223a220000000000000000000000000060048201526143b76017820186613efc565b905083516143c9818360208801613843565b6143f88183017f2e6d703400000000000000000000000000000000000000000000000000000000815260040190565b9a9950505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c000000000081525f855161443d81601b850160208a01613843565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a2254601b918401918201527f68656d65222c2276616c7565223a220000000000000000000000000000000000603b82015285516144a081604a840160208a01613843565b7f227d2c7b2274726169745f74797065223a22436861726163746572222c227661604a92909101918201527f6c7565223a220000000000000000000000000000000000000000000000000000606a8201528451614504816070840160208901613843565b7f227d2c7b2274726169745f74797065223a224d657373616765222c2276616c75607092909101918201527f65223a2200000000000000000000000000000000000000000000000000000000609082015261458e6145656094830186613f89565b7f227d5d7d00000000000000000000000000000000000000000000000000000000815260040190565b979650505050505050565b604081525f6145ab6040830185613bae565b82810360208401526145bd8185613bae565b95945050505050565b8082018082111561070757610707613e38565b5f73ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015261461160a0830186613bae565b82810360608401526146238186613bae565b905082810360808401526146378185613865565b98975050505050505050565b5f60208284031215614653575f80fd5b8151610e5d816136c5565b5f60033d11156146745760045f803e505f5160e01c5b90565b5f60443d10156146845790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff81602484011181841117156146d257505050505090565b82850191508151818111156146ea5750505050505090565b843d87010160208285010111156147045750505050505090565b6147136020828601018761373a565b509095945050505050565b5f73ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a0608083015261458e60a083018461386556fea264697066735822122081da9a659f329345d15027138d302e57d810a5481e7bd45a45fa8d8796ef8fed64736f6c6343000818003368747470733a2f2f62616679626569653572333768776a6633616874723673746a66727632686272746a6b6a6471327976346c69636c346767786735707364653532342e697066732e6e667473746f726167652e6c696e6b2f4120686f726e792076616c656e74696e652066726f6d20796f75722070756d706564207570206c6f76657220422d29412077686f6c65736f6d652076616c656e74696e652066726f6d2061207265737065637466756c20726f626f74203a5d41206372656570792076616c656e74696e652066726f6d20612079616e64657265277320626173656d656e74203e3a2941206461726b2076616c656e74696e652066726f6d2054686520536d6f6b65722e20486568206865682068656820686568206865682e2e2e4120637574652076616c656e74696e652066726f6d2061206b6177616969206769726c20666f7220796f75212131203a33