solc-0.8.35 0xd86756dbb01e75a11aadacb75c8495759ed92033 optimized-low-runs

9293 bytes

608060405234801561000f575f5ffd5b5060043610610194575f3560e01c806306a2da3d1461019857806306fdde03146101ad578063077f22b7146101e7578063095ea7b3146101fd5780630c340a241461022057806318160ddd1461023557806323b872dd1461023e578063313ce5671461025157806339a7919f1461026057806340c10f1914610273578063430bf08a14610286578063456ee286146102995780635d36b190146102c85780635f5a8577146102d0578063609350cd146102f85780636691cb3d146103205780636b96be391461032857806370a08231146103505780637a46a9c5146103635780637d0d66ff1461036b57806395d89b41146103735780639d01fc72146103935780639dc29fac146103a6578063a9059cbb146103b9578063baa9c9db146103cc578063c2376dff146103df578063c7af3352146103e7578063cd6dc687146103ef578063d38bfff414610402578063dd62ed3e14610415578063e5c4fffe1461044d578063e696393a1461047d578063f51b0fd414610486578063f9854bfc1461048e575b5f5ffd5b6101ab6101a6366004612008565b6104b6565b005b60408051808201909152600c81526b27b934b3b4b71022ba3432b960a11b60208201525b6040516101de9190612023565b60405180910390f35b6101ef6106f1565b6040519081526020016101de565b61021061020b366004612058565b610709565b60405190151581526020016101de565b610228610775565b6040516101de9190612082565b6101ef609a5481565b61021061024c366004612096565b61077e565b604051601281526020016101de565b6101ab61026e3660046120d4565b610884565b6101ab610281366004612058565b610a1e565b609c54610228906001600160a01b031681565b6102bb6102a7366004612008565b60a26020525f908152604090205460ff1681565b6040516101de91906120ff565b6101ab610b44565b6102286102de366004612008565b60a46020525f90815260409020546001600160a01b031681565b6101ef610306366004612008565b6001600160a01b03165f90815260a1602052604090205490565b6101ef610bd7565b610228610336366004612008565b60a56020525f90815260409020546001600160a01b031681565b6101ef61035e366004612008565b610bea565b609f546101ef565b609e546101ef565b60408051808201909152600481526309e8aa8960e31b60208201526101d1565b6101ab6103a1366004612125565b610cd3565b6101ab6103b4366004612058565b611256565b6102106103c7366004612058565b61133e565b6101ab6103da366004612008565b61139a565b6101ab6113ed565b6102106113f6565b6101ab6103fd366004612058565b611418565b6101ab610410366004612008565b6114fb565b6101ef610423366004612125565b6001600160a01b039182165f908152609b6020908152604080832093909416825291909152205490565b61046061045b366004612008565b61157e565b6040805193845260208401929092521515908201526060016101de565b6101ef60a05481565b6101ab6115b1565b6104a161049c366004612008565b6115ba565b604080519283526020830191909152016101de565b6104be6113f6565b8061054d5750609c5f9054906101000a90046001600160a01b03166001600160a01b031663570d8e1d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610514573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610538919061215c565b6001600160a01b0316336001600160a01b0316145b6105725760405162461bcd60e51b815260040161056990612177565b60405180910390fd5b6001600160a01b038181165f90815260a46020526040902054166105a85760405162461bcd60e51b8152600401610569906121bf565b6001600160a01b038082165f90815260a46020526040812054909116906105ce83610bea565b90505f6105da83610bea565b6001600160a01b0384165f908152609d60205260408120549192506105fe83611638565b6001600160a01b038681165f81815260a56020908152604080832080546001600160a01b0319908116909155948c16835260a48252808320805490951690945560a2808252848320805460ff19908116600117909155609d8084528685208c9055948452908252848320805490911660021790559190915290812082905590915061068883611678565b61069183611678565b61069b9190612205565b90506106af816106aa87611678565b6116e5565b7fa4fa89dd14422a509261a2d4d459f93abdc84c6e92c5e7ae5448243713967bd387876040516106e092919061222b565b60405180910390a150505050505050565b5f633b9aca00609e546107049190612245565b905090565b335f818152609b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107639086815260200190565b60405180910390a35060015b92915050565b5f610704611729565b5f6001600160a01b0383166107a55760405162461bcd60e51b815260040161056990612264565b6001600160a01b0384165f908152609b602090815260408083203384529091529020548083111561080d5760405162461bcd60e51b8152602060048201526012602482015271105b1b1bddd85b98d948195e18d95959195960721b6044820152606401610569565b6001600160a01b0385165f908152609b602090815260408083203384529091529020838203905561083f85858561173b565b836001600160a01b0316856001600160a01b03165f5160206123cd5f395f51905f528560405161087191815260200190565b60405180910390a3506001949350505050565b609c546001600160a01b031633146108ae5760405162461bcd60e51b815260040161056990612296565b5f609a54116108fa5760405162461bcd60e51b815260206004820152601860248201527743616e6e6f7420696e637265617365203020737570706c7960401b6044820152606401610569565b80609a5403610934575f51602061240d5f395f51905f52609a54609e54609f54604051610929939291906122c7565b60405180910390a150565b6001600160801b0381116109485780610951565b6001600160801b035b609a81905560a0545f9161096591906122dd565b905080600182609e54670de0b6b3a764000061098191906122f0565b61098b9190612307565b61099591906122dd565b61099f9190612245565b609f8190556109eb5760405162461bcd60e51b8152602060048201526018602482015277496e76616c6964206368616e676520696e20737570706c7960401b6044820152606401610569565b5f51602061240d5f395f51905f52609a54609e54609f54604051610a11939291906122c7565b60405180910390a1505b50565b609c546001600160a01b03163314610a485760405162461bcd60e51b815260040161056990612296565b6001600160a01b038216610a995760405162461bcd60e51b81526020600482015260186024820152774d696e7420746f20746865207a65726f206164647265737360401b6044820152606401610569565b5f5f610aad84610aa885611678565b611782565b91509150610abb82826116e5565b82609a54610ac99190612307565b609a8190556001600160801b0311610b105760405162461bcd60e51b815260206004820152600a6024820152694d617820737570706c7960b01b6044820152606401610569565b6040518381526001600160a01b038516905f905f5160206123cd5f395f51905f52906020015b60405180910390a350505050565b5f51602061242d5f395f51905f52546001600160a01b0316336001600160a01b031614610bcc5760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b6064820152608401610569565b610bd533611a60565b565b5f633b9aca00609f546107049190612245565b6001600160a01b0381165f90815260a2602052604081205460ff166003816004811115610c1957610c196120eb565b03610c3a5750506001600160a01b03165f908152609d602052604090205490565b5f610c4484611abc565b6001600160a01b0385165f908152609d6020526040902054610c6e90670de0b6b3a76400006122f0565b610c789190612245565b90506004826004811115610c8e57610c8e6120eb565b03610ccc576001600160a01b038085165f90815260a560209081526040808320549093168252609d90522054610cc490826122dd565b949350505050565b9392505050565b610cdb6113f6565b80610d6a5750609c5f9054906101000a90046001600160a01b03166001600160a01b031663570d8e1d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d55919061215c565b6001600160a01b0316336001600160a01b0316145b610d865760405162461bcd60e51b815260040161056990612177565b6001600160a01b038216610ddc5760405162461bcd60e51b815260206004820152601d60248201527f5a65726f2066726f6d2061646472657373206e6f7420616c6c6f7765640000006044820152606401610569565b6001600160a01b038116610e305760405162461bcd60e51b815260206004820152601b60248201527a16995c9bc81d1bc81859191c995cdcc81b9bdd08185b1b1bddd959602a1b6044820152606401610569565b806001600160a01b0316826001600160a01b031603610e8b5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103232b632b3b0ba32903a379039b2b63360491b6044820152606401610569565b6001600160a01b038181165f90815260a5602052604090205416158015610ec957506001600160a01b038181165f90815260a4602052604090205416155b8015610eec57506001600160a01b038281165f90815260a5602052604090205416155b8015610f0f57506001600160a01b038281165f90815260a4602052604090205416155b610f675760405162461bcd60e51b8152602060048201526024808201527f426c6f636b6564206279206578697374696e67207969656c642064656c6567616044820152633a34b7b760e11b6064820152608401610569565b6001600160a01b038083165f90815260a2602052604080822054928416825281205460ff928316921690826004811115610fa357610fa36120eb565b1480610fc057506001826004811115610fbe57610fbe6120eb565b145b80610fdc57506002826004811115610fda57610fda6120eb565b145b6110235760405162461bcd60e51b8152602060048201526018602482015277496e76616c69642072656261736553746174652066726f6d60401b6044820152606401610569565b5f816004811115611036576110366120eb565b148061105357506001816004811115611051576110516120eb565b145b8061106f5750600281600481111561106d5761106d6120eb565b145b6110b45760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420726562617365537461746520746f60501b6044820152606401610569565b6001600160a01b0384165f90815260a1602052604081205490036110db576110db84611aea565b6001600160a01b0383165f90815260a16020526040902054156111015761110183611cb5565b5f61110b85610bea565b90505f61111785610bea565b6001600160a01b0386165f908152609d602052604081205491925061114461113f8486612307565b611638565b6001600160a01b038981165f81815260a46020908152604080832080546001600160a01b0319908116968f1696871790915585845260a5835281842080549091168517905592825260a2808252838320805460ff1990811660031790915560a18352848420670de0b6b3a76400009055609d8084528585208c9055958452908252838320805490911660041790559290925281208290559091506111e783611678565b6111f083611678565b6111fa9190612205565b90506112128161120987611678565b6106aa9061231a565b7f31e39e4bb9df9d4143551c8a3a4798fc19b0854768570ce84d966f6adffd01a3898960405161124392919061222b565b60405180910390a1505050505050505050565b609c546001600160a01b031633146112805760405162461bcd60e51b815260040161056990612296565b6001600160a01b0382166112d35760405162461bcd60e51b815260206004820152601a6024820152794275726e2066726f6d20746865207a65726f206164647265737360301b6044820152606401610569565b801561133a575f5f6112f1846112e885611678565b610aa89061231a565b915091506112ff82826116e5565b82609a5461130d91906122dd565b609a556040518381525f906001600160a01b038616905f5160206123cd5f395f51905f5290602001610b36565b5050565b5f6001600160a01b0383166113655760405162461bcd60e51b815260040161056990612264565b61137033848461173b565b6040518281526001600160a01b0384169033905f5160206123cd5f395f51905f5290602001610763565b6113a26113f6565b6113be5760405162461bcd60e51b815260040161056990612334565b6001600160a01b0381166113e45760405162461bcd60e51b8152600401610569906121bf565b610a1b81611cb5565b610bd533611aea565b5f6113ff611729565b6001600160a01b0316336001600160a01b031614905090565b6114206113f6565b61143c5760405162461bcd60e51b815260040161056990612334565b6001600160a01b0382166114875760405162461bcd60e51b81526020600482015260126024820152715a65726f207661756c74206164647265737360701b6044820152606401610569565b609c546001600160a01b0316156114d65760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610569565b609f55609c80546001600160a01b0319166001600160a01b0392909216919091179055565b6115036113f6565b61151f5760405162461bcd60e51b815260040161056990612334565b611534815f51602061242d5f395f51905f5255565b806001600160a01b0316611546611729565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b6001600160a01b0381165f908152609d6020526040812054819081906115a385611abc565b909590945060019350915050565b610bd533611cb5565b5f5f5f6115c684611abc565b905080676765c793fa10079d601b1b036115f9576001600160a01b039093165f908152609d602052604090205493915050565b6001600160a01b0384165f908152609d602052604090205461162090633b9aca0090612245565b61162e633b9aca0083612245565b9250925050915091565b5f670de0b6b3a76400006001609f548461165291906122f0565b61166490670de0b6b3a7640000612307565b61166e91906122dd565b61076f9190612245565b5f6001600160ff1b038211156116e15760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610569565b5090565b811561170d57611709826116fa609e54611678565b6117049190612368565b611e7e565b609e555b801561133a57611722816116fa60a054611678565b60a0555050565b5f5160206123ed5f395f51905f525490565b5f5f61174a856112e885611678565b915091505f5f61175d86610aa887611678565b909250905061177961176f8386612368565b6106aa8386612368565b50505050505050565b6001600160a01b0382165f90815260a26020526040812054819060ff16816117b16117ac87610bea565b611678565b90505f6117be8683612368565b121561180c5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220616d6f756e7420657863656564732062616c616e6365006044820152606401610569565b5f61181a6117048784612368565b90506003836004811115611830576118306120eb565b036118d1576001600160a01b038088165f90815260a460205260408120549091169061185b82610bea565b90505f61186b61113f8584612307565b6001600160a01b0384165f908152609d602052604090205490915061188f90611678565b61189882611678565b6118a29190612205565b6001600160a01b03808c165f908152609d60205260408082208890559590911681529390932055509450611a56565b60048360048111156118e5576118e56120eb565b0361197a576001600160a01b038088165f90815260a560209081526040808320549093168252609d9052908120546119219061113f9084612307565b6001600160a01b0389165f908152609d602052604090205490915061194590611678565b61194e82611678565b6119589190612205565b6001600160a01b0389165f908152609d60205260409020919091559450611a56565b61198387611ecf565b6001600160a01b0387165f90815260a1602052604090205480156119f55786945080670de0b6b3a7640000146119d6576001600160a01b0388165f90815260a160205260409020670de0b6b3a764000090555b6001600160a01b0388165f908152609d60205260409020829055611a54565b5f6119ff83611638565b6001600160a01b038a165f908152609d6020526040902054909150611a2390611678565b611a2c82611678565b611a369190612205565b6001600160a01b038a165f908152609d602052604090209190915595505b505b5050509250929050565b6001600160a01b038116611ab35760405162461bcd60e51b815260206004820152601a6024820152794e657720476f7665726e6f72206973206164647265737328302960301b6044820152606401610569565b610a1b81611f9c565b6001600160a01b0381165f90815260a160205260408120548015611ae05792915050565b5050609f54919050565b6001600160a01b0381165f90815260a1602052604090205415611b4a5760405162461bcd60e51b81526020600482015260186024820152774163636f756e74206d757374206265207265626173696e6760401b6044820152606401610569565b6001600160a01b0381165f90815260a2602052604090205460ff166002816004811115611b7957611b796120eb565b1480611b9557505f816004811115611b9357611b936120eb565b145b611bf55760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c79207374616e64617264207265626173696e67206163636f756e74732060448201526a18d85b881bdc1d081bdd5d60aa1b6064820152608401610569565b6001600160a01b0382165f908152609d602052604081205490611c1784610bea565b6001600160a01b0385165f90815260a260209081526040808320805460ff1916600117905560a18252808320670de0b6b3a76400009055609d90915290208190559050611c78611c6683611678565b611c6f9061231a565b6106aa83611678565b7f201ace89ad3f5ab7428b91989f6a50d1998791c7b94a0fa812fd64a57687165e84604051611ca79190612082565b60405180910390a150505050565b5f611cbf82610bea565b6001600160a01b0383165f90815260a16020526040902054909150151580611cfc57506001600160a01b0382165f908152609d6020526040902054155b611d475760405162461bcd60e51b815260206004820152601c60248201527b4163636f756e74206d757374206265206e6f6e2d7265626173696e6760201b6044820152606401610569565b6001600160a01b0382165f90815260a2602052604090205460ff166001816004811115611d7657611d766120eb565b1480611d9257505f816004811115611d9057611d906120eb565b145b611df55760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79207374616e64617264206e6f6e2d7265626173696e67206163636f7560448201526d373a399031b0b71037b83a1034b760911b6064820152608401610569565b5f611dff83611638565b6001600160a01b0385165f90815260a260209081526040808320805460ff1916600217905560a18252808320839055609d90915290208190559050611e4f611e4682611678565b61120985611678565b7f19a249fa2050bac8314ac10e3ad420bd9825574bf750f58810c3c7adfc7b1c6f84604051611ca79190612082565b5f5f8212156116e15760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610569565b6001600160a01b0381163b5f811580611f2f5750816017148015611f2f5750826001600160a01b0316803b806020016040519081016040528181525f908060200190933c611f1c9061238f565b6001600160e81b03191662ef010060e81b145b905080158015611f6857506001600160a01b0383165f90815260a2602052604081205460ff166004811115611f6657611f666120eb565b145b8015611f8957506001600160a01b0383165f90815260a16020526040902054155b15611f9757611f9783611aea565b505050565b806001600160a01b0316611fae611729565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a35f5160206123ed5f395f51905f5255565b6001600160a01b0381168114610a1b575f5ffd5b5f60208284031215612018575f5ffd5b8135610ccc81611ff4565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215612069575f5ffd5b823561207481611ff4565b946020939093013593505050565b6001600160a01b0391909116815260200190565b5f5f5f606084860312156120a8575f5ffd5b83356120b381611ff4565b925060208401356120c381611ff4565b929592945050506040919091013590565b5f602082840312156120e4575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b602081016005831061211f57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f5f60408385031215612136575f5ffd5b823561214181611ff4565b9150602083013561215181611ff4565b809150509250929050565b5f6020828403121561216c575f5ffd5b8151610ccc81611ff4565b60208082526028908201527f43616c6c6572206973206e6f74207468652053747261746567697374206f722060408201526723b7bb32b93737b960c11b606082015260800190565b60208082526018908201527716995c9bc81859191c995cdcc81b9bdd08185b1b1bddd95960421b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181035f831280158383131683831282161715612224576122246121f1565b5092915050565b6001600160a01b0392831681529116602082015260400190565b5f8261225f57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252601890820152775472616e7366657220746f207a65726f206164647265737360401b604082015260600190565b60208082526017908201527610d85b1b195c881a5cc81b9bdd081d1a194815985d5b1d604a1b604082015260600190565b9283526020830191909152604082015260600190565b8181038181111561076f5761076f6121f1565b808202811582820484141761076f5761076f6121f1565b8082018082111561076f5761076f6121f1565b5f600160ff1b820161232e5761232e6121f1565b505f0390565b6020808252601a908201527921b0b63632b91034b9903737ba103a34329023b7bb32b93737b960311b604082015260600190565b8082018281125f831280158216821582161715612387576123876121f1565b505092915050565b805160208201516001600160e81b03198116919060038210156123c5576001600160e81b03196003838103901b81901b82161692505b505091905056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a41645eb819d3011b13f97696a8109d14bfcddfaca7d063ec0564d62a3e25723544c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db