solc-0.8.35 0x4e90495f66fb04a5fba401967abd607e2ea0ab46 optimized-low-runs

10457 bytes

608060405234801561000f575f5ffd5b50600436106101c0575f3560e01c806301ffc9a7146101c457806302c37ddc146101ec57806306fdde0314610201578063081812fc14610216578063095ea7b314610236578063127a529814610249578063166c4b05146102775780631785f53c1461028a57806318160ddd1461029d57806323b872dd146102a557806324d7806c146102b8578063278d9c41146102cb57806328db38b4146102de5780632f745c59146102f15780633f4ba83a1461030457806342842e0e1461030c57806342966c681461031f5780634f6ccce71461033257806355f804b3146103455780635c975abb146103585780636352211e1461036457806367e971ce14610377578063704802751461039f57806370a08231146103b25780638129fc1c146103c55780638456cb59146103cd5780638bad0c0a146103d55780638d232094146103dd57806395d89b41146103f05780639cd3cad6146103f8578063a140ae231461040b578063a22cb4651461041e578063b88d4fde14610431578063c4d66de814610444578063c87b56dd14610457578063d890c8e21461046a578063e985e9c51461047d578063f980f3dc14610490575b5f5ffd5b6101d76101d2366004612028565b6104a3565b60405190151581526020015b60405180910390f35b6101ff6101fa366004612043565b6104c1565b005b6102096104ce565b6040516101e39190612088565b610229610224366004612043565b61055f565b6040516101e3919061209a565b6101ff6102443660046120c9565b61058c565b610269610257366004612043565b5f90815261013d602052604090205490565b6040519081526020016101e3565b6101ff6102853660046120f1565b6105c7565b6101ff610298366004612112565b6105f6565b609e54610269565b6101ff6102b336600461212b565b610624565b6101d76102c6366004612112565b610658565b6101d76102d936600461223c565b61066a565b6101d76102ec3660046120f1565b61072c565b6102696102ff3660046120c9565b61075a565b6101ff6107a8565b6101ff61031a36600461212b565b61085e565b6101ff61032d366004612043565b61088d565b610269610340366004612043565b6108fb565b6101ff6103533660046122f5565b610932565b6101065460ff166101d7565b610229610372366004612043565b610988565b61038a6103853660046120c9565b6109a8565b604080519283526020830191909152016101e3565b6101ff6103ad366004612112565b6109d0565b6102696103c0366004612112565b6109fe565b6101ff610a2e565b6101ff610ad9565b6101ff610b60565b6101ff6103eb366004612326565b610b6b565b610209610c6e565b6101ff6104063660046120f1565b610c7e565b6101d76104193660046120f1565b610caf565b6101ff61042c3660046123db565b610d2c565b6101ff61043f366004612414565b610d5a565b6101ff610452366004612112565b610d90565b610209610465366004612043565b610e15565b6101d761047836600461247e565b610ef6565b6101d761048b3660046124b0565b610f57565b6101d761049e3660046124d8565b610f84565b6001600160e01b0319165f9081526033602052604090205460ff1690565b6104cb8133611043565b50565b606061013980546104de90612571565b80601f016020809104026020016040519081016040528092919081815260200182805461050a90612571565b80156105555780601f1061052c57610100808354040283529160200191610555565b820191905f5260205f20905b81548152906001019060200180831161053857829003601f168201915b5050505050905090565b5f61056982611093565b610571575f5ffd5b505f908152606760205260409020546001600160a01b031690565b6101065460ff16156105b95760405162461bcd60e51b81526004016105b0906125a9565b60405180910390fd5b6105c382826110af565b5050565b6105d033610658565b6105ec5760405162461bcd60e51b81526004016105b0906125d5565b6105c38282611043565b6105ff33610658565b61061b5760405162461bcd60e51b81526004016105b0906125d5565b6104cb81611157565b6101065460ff16156106485760405162461bcd60e51b81526004016105b0906125a9565b610653838383611198565b505050565b5f61066460d2836111b5565b92915050565b610106545f9060ff16156106905760405162461bcd60e51b81526004016105b0906125a9565b8261069b813361072c565b6106b75760405162461bcd60e51b81526004016105b090612602565b5f5b835181101561070957610700858261013c5460016106d7919061264a565b6106e1919061264a565b8684815181106106f3576106f361265d565b60200260200101516111e7565b506001016106b9565b50825161013c5f82825461071d919061264a565b90915550600195945050505050565b5f61073682610658565b8061075357505f83815260d36020526040902061075390836111b5565b9392505050565b5f610764836109fe565b821061076e575f5ffd5b6001600160a01b0383165f908152609c602052604090208054839081106107975761079761265d565b905f5260205f200154905092915050565b6107b133610658565b6107cd5760405162461bcd60e51b81526004016105b0906125d5565b6101065460ff166108195760405162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9858dd081a5cc81b9bdd0814185d5cd95960521b60448201526064016105b0565b610106805460ff191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9061085490339061209a565b60405180910390a1565b6101065460ff16156108825760405162461bcd60e51b81526004016105b0906125a9565b610653838383611247565b6108973382611261565b806108a657506108a633610658565b6108f25760405162461bcd60e51b815260206004820152601e60248201527f53656e64657220646f65736e27742068617665207065726d697373696f6e000060448201526064016105b0565b6104cb816112b7565b5f610905609e5490565b821061090f575f5ffd5b609e82815481106109225761092261265d565b905f5260205f2001549050919050565b61093b33610658565b6109575760405162461bcd60e51b81526004016105b0906125d5565b6101065460ff161561097b5760405162461bcd60e51b81526004016105b0906125a9565b61013b6105c382826126c7565b5f818152606660205260408120546001600160a01b031680610664575f5ffd5b5f5f6109b4848461075a565b5f81815261013d60205260409020549092505b90509250929050565b6109d933610658565b6109f55760405162461bcd60e51b81526004016105b0906125d5565b6104cb816112c9565b5f6001600160a01b038216610a11575f5ffd5b6001600160a01b0382165f90815260686020526040902054610664565b5f54610100900460ff1680610a425750303b155b80610a4f57505f5460ff16155b610a6b5760405162461bcd60e51b81526004016105b090612785565b5f805461ffff1981166101011790915560405162461bcd60e51b815260206004820152602360248201527f506f61703a2075736520706172616d65746572697a656420696e697469616c696044820152623d32b960e91b606482015261010090910460ff16906084016105b0565b610ae233610658565b610afe5760405162461bcd60e51b81526004016105b0906125d5565b6101065460ff1615610b225760405162461bcd60e51b81526004016105b0906125a9565b610106805460ff191660011790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589061085490339061209a565b610b6933611157565b565b5f54610100900460ff1680610b7f5750303b155b80610b8c57505f5460ff16155b610ba85760405162461bcd60e51b81526004016105b090612785565b5f805461ffff19811661010117909155610100900460ff16610bc861130a565b610bd0611390565b610bd933610d90565b610be1611405565b5f5b8251811015610c1657610c0e838281518110610c0157610c0161265d565b60200260200101516112c9565b600101610be3565b50610139610c2486826126c7565b5061013a610c3285826126c7565b5061013b610c4084826126c7565b50610c51635b5e139f60e01b61146d565b5f80549115156101000261ff001990921691909117905550505050565b606061013a80546104de90612571565b81610c89813361072c565b610ca55760405162461bcd60e51b81526004016105b090612602565b61065383836114a7565b610106545f9060ff1615610cd55760405162461bcd60e51b81526004016105b0906125a9565b82610ce0813361072c565b610cfc5760405162461bcd60e51b81526004016105b090612602565b600161013c5f828254610d0f919061264a565b92505081905550610d248461013c54856111e7565b949350505050565b6101065460ff1615610d505760405162461bcd60e51b81526004016105b0906125a9565b6105c382826114f7565b6101065460ff1615610d7e5760405162461bcd60e51b81526004016105b0906125a9565b610d8a84848484611576565b50505050565b5f54610100900460ff1680610da45750303b155b80610db157505f5460ff16155b610dcd5760405162461bcd60e51b81526004016105b090612785565b5f805461ffff19811661010117909155610100900460ff16610dee82610658565b610dfb57610dfb826112c9565b5f80549115156101000261ff001990921691909117905550565b5f81815261013d602052604090205461013b80546060929161075391610e3a90612571565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6690612571565b8015610eb15780601f10610e8857610100808354040283529160200191610eb1565b820191905f5260205f20905b815481529060010190602001808311610e9457829003601f168201915b5050505050610ebf83611595565b604051806040016040528060018152602001602f60f81b815250610ee287611595565b60405180602001604052805f8152506116a6565b610106545f9060ff1615610f1c5760405162461bcd60e51b81526004016105b0906125a9565b83610f27813361072c565b610f435760405162461bcd60e51b81526004016105b090612602565b610f4e8585856111e7565b95945050505050565b6001600160a01b039182165f90815260696020908152604080832093909416825291909152205460ff1690565b610106545f9060ff1615610faa5760405162461bcd60e51b81526004016105b0906125a9565b610fb333610658565b610fcf5760405162461bcd60e51b81526004016105b0906125d5565b5f5b835181101561102157611018848281518110610fef57610fef61265d565b60200260200101518261013c546001611008919061264a565b611012919061264a565b856111e7565b50600101610fd1565b50825161013c5f828254611035919061264a565b909155506001949350505050565b5f82815260d36020526040902061105a908261194d565b6040516001600160a01b0382169083907fb6882c4d609d560f6d57e78e73dd96027f0d9852739b0b922537a6dd3c8e944c905f90a35050565b5f908152606660205260409020546001600160a01b0316151590565b5f6110b982610988565b9050806001600160a01b0316836001600160a01b0316036110d8575f5ffd5b336001600160a01b03821614806110f457506110f48133610f57565b6110fc575f5ffd5b5f8281526067602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61116260d28261194d565b6040516001600160a01b038216907fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f905f90a250565b6111a23382611261565b6111aa575f5ffd5b610653838383611992565b5f6001600160a01b0382166111c8575f5ffd5b506001600160a01b03165f908152602091909152604090205460ff1690565b5f6111f282846119b1565b5f83815261013d602090815260409182902086905581518681529081018590527f4b3711cd7ece062b0828c1b6e08d814a72d4c003383a016c833cbb1b45956e34910160405180910390a15060019392505050565b61065383838360405180602001604052805f815250610d5a565b5f5f61126c83610988565b9050806001600160a01b0316846001600160a01b031614806112a75750836001600160a01b031661129c8461055f565b6001600160a01b0316145b80610d245750610d248185610f57565b6104cb6112c382610988565b82611a0c565b6112d460d282611a28565b6040516001600160a01b038216907f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339905f90a250565b5f54610100900460ff168061131e5750303b155b8061132b57505f5460ff16155b6113475760405162461bcd60e51b81526004016105b090612785565b5f805461ffff19811661010117909155610100900460ff16611367611a71565b6113776380ac58cd60e01b61146d565b5f80549115156101000261ff0019909216919091179055565b5f54610100900460ff16806113a45750303b155b806113b157505f5460ff16155b6113cd5760405162461bcd60e51b81526004016105b090612785565b5f805461ffff19811661010117909155610100900460ff166113ed611ad6565b6113f5575f5ffd5b61137763780e9d6360e01b61146d565b5f54610100900460ff16806114195750303b155b8061142657505f5460ff16155b6114425760405162461bcd60e51b81526004016105b090612785565b5f8054610106805460ff1916905561ffff1981166101009182900460ff161515909102176001179055565b6001600160e01b03198082169003611483575f5ffd5b6001600160e01b0319165f908152603360205260409020805460ff19166001179055565b5f82815260d3602052604090206114be9082611a28565b6040516001600160a01b0382169083907fe1bd660d9f7c60e6fb12dd6479fdde12d21fc96385dc7b9b022c0b2f319e7391905f90a35050565b336001600160a01b0383160361150b575f5ffd5b335f8181526069602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611581848484610624565b61158d84848484611aec565b610d8a575f5ffd5b6060815f036115bb5750506040805180820190915260018152600360fc1b602082015290565b815f5b81156115e457806115ce816127d3565b91506115dd9050600a836127ff565b91506115be565b5f816001600160401b038111156115fd576115fd612165565b6040519080825280601f01601f191660200182016040528015611627576020820181803683370190505b5090505f611636600184612812565b90505b851561169d5761164a600a87612825565b61165590603061264a565b60f81b828261166381612838565b9350815181106116755761167561265d565b60200101906001600160f81b03191690815f1a905350611696600a876127ff565b9550611639565b50949350505050565b805182518451865188516060948a948a948a948a948a945f949093909290916116cf919061264a565b6116d9919061264a565b6116e3919061264a565b6116ed919061264a565b6001600160401b0381111561170457611704612165565b6040519080825280601f01601f19166020018201604052801561172e576020820181803683370190505b509050805f805b885181101561179a578881815181106117505761175061265d565b01602001516001600160f81b031916838361176a816127d3565b94508151811061177c5761177c61265d565b60200101906001600160f81b03191690815f1a905350600101611735565b505f5b8751811015611802578781815181106117b8576117b861265d565b01602001516001600160f81b03191683836117d2816127d3565b9450815181106117e4576117e461265d565b60200101906001600160f81b03191690815f1a90535060010161179d565b505f5b865181101561186a578681815181106118205761182061265d565b01602001516001600160f81b031916838361183a816127d3565b94508151811061184c5761184c61265d565b60200101906001600160f81b03191690815f1a905350600101611805565b505f5b85518110156118d2578581815181106118885761188861265d565b01602001516001600160f81b03191683836118a2816127d3565b9450815181106118b4576118b461265d565b60200101906001600160f81b03191690815f1a90535060010161186d565b505f5b845181101561193a578481815181106118f0576118f061265d565b01602001516001600160f81b031916838361190a816127d3565b94508151811061191c5761191c61265d565b60200101906001600160f81b03191690815f1a9053506001016118d5565b50909d9c50505050505050505050505050565b6001600160a01b03811661195f575f5ffd5b61196982826111b5565b611971575f5ffd5b6001600160a01b03165f90815260209190915260409020805460ff19169055565b61199d838383611b96565b6119a78382611c5e565b6106538282611d60565b6119bb8282611d9d565b6119c58282611d60565b6105c381609e80545f838152609f60205260408120829055600182018355919091527fcfe2a20ff701a1f3e14f63bd70d6c6bc6fba8172ec6d5a505cdab3927c0a9de60155565b611a168282611e27565b5f90815261013d602052604081205550565b6001600160a01b038116611a3a575f5ffd5b611a4482826111b5565b15611a4d575f5ffd5b6001600160a01b03165f90815260209190915260409020805460ff19166001179055565b5f54610100900460ff1680611a855750303b155b80611a9257505f5460ff16155b611aae5760405162461bcd60e51b81526004016105b090612785565b5f805461ffff19811661010117909155610100900460ff166113776301ffc9a760e01b61146d565b5f611ae76380ac58cd60e01b6104a3565b905090565b5f6001600160a01b0384163b611b0457506001610d24565b604051630a85bd0160e11b81525f906001600160a01b0386169063150b7a0290611b389033908a908990899060040161284d565b6020604051808303815f875af1158015611b54573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b789190612889565b6001600160e01b031916630a85bd0160e11b14915050949350505050565b826001600160a01b0316611ba982610988565b6001600160a01b031614611bbb575f5ffd5b6001600160a01b038216611bcd575f5ffd5b611bd681611e52565b6001600160a01b0383165f908152606860205260409020611bf690611e8b565b6001600160a01b0382165f908152606860205260409020611c1690611e9c565b5f8181526066602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716915f5160206128b95f395f51905f5291a4505050565b6001600160a01b0382165f908152609c6020526040812054611c81906001611eb7565b5f838152609d6020526040902054909150808214611d21576001600160a01b0384165f908152609c60205260408120805484908110611cc257611cc261265d565b905f5260205f200154905080609c5f876001600160a01b03166001600160a01b031681526020019081526020015f208381548110611d0257611d0261265d565b5f918252602080832090910192909255918252609d9052604090208190555b6001600160a01b0384165f908152609c60205260409020805480611d4757611d476128a4565b600190038181905f5260205f20015f9055905550505050565b6001600160a01b039091165f908152609c602081815260408084208054868652609d84529185208290559282526001810183559183529091200155565b6001600160a01b038216611daf575f5ffd5b611db881611093565b15611dc1575f5ffd5b5f81815260666020908152604080832080546001600160a01b0319166001600160a01b038716908117909155835260689091529020611dff90611e9c565b60405181906001600160a01b038416905f905f5160206128b95f395f51905f52908290a45050565b611e318282611ecf565b611e3b8282611c5e565b5f818152609d60205260408120556105c381611f5e565b5f818152606760205260409020546001600160a01b0316156104cb575f90815260676020526040902080546001600160a01b0319169055565b8054611e98906001611eb7565b9055565b6001815f015f828254611eaf919061264a565b909155505050565b5f82821115611ec4575f5ffd5b5f610d248385612812565b816001600160a01b0316611ee282610988565b6001600160a01b031614611ef4575f5ffd5b611efd81611e52565b6001600160a01b0382165f908152606860205260409020611f1d90611e8b565b5f8181526066602052604080822080546001600160a01b0319169055518291906001600160a01b038516905f5160206128b95f395f51905f52908390a45050565b609e545f90611f6e906001611eb7565b5f838152609f6020526040812054609e8054939450909284908110611f9557611f9561265d565b905f5260205f200154905080609e8381548110611fb457611fb461265d565b5f918252602080832090910192909255828152609f90915260409020829055609e805480611fe457611fe46128a4565b600190038181905f5260205f20015f905590555f609f5f8681526020019081526020015f208190555050505050565b6001600160e01b0319811681146104cb575f5ffd5b5f60208284031215612038575f5ffd5b813561075381612013565b5f60208284031215612053575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610753602083018461205a565b6001600160a01b0391909116815260200190565b80356001600160a01b03811681146120c4575f5ffd5b919050565b5f5f604083850312156120da575f5ffd5b6120e3836120ae565b946020939093013593505050565b5f5f60408385031215612102575f5ffd5b823591506109c7602084016120ae565b5f60208284031215612122575f5ffd5b610753826120ae565b5f5f5f6060848603121561213d575f5ffd5b612146846120ae565b9250612154602085016120ae565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156121a1576121a1612165565b604052919050565b5f6001600160401b038211156121c1576121c1612165565b5060051b60200190565b5f82601f8301126121da575f5ffd5b81356121ed6121e8826121a9565b612179565b8082825260208201915060208360051b86010192508583111561220e575f5ffd5b602085015b8381101561223257612224816120ae565b835260209283019201612213565b5095945050505050565b5f5f6040838503121561224d575f5ffd5b8235915060208301356001600160401b03811115612269575f5ffd5b612275858286016121cb565b9150509250929050565b5f806001600160401b0384111561229857612298612165565b50601f8301601f19166020016122ad81612179565b9150508281528383830111156122c1575f5ffd5b828260208301375f602084830101529392505050565b5f82601f8301126122e6575f5ffd5b6107538383356020850161227f565b5f60208284031215612305575f5ffd5b81356001600160401b0381111561231a575f5ffd5b610d24848285016122d7565b5f5f5f5f60808587031215612339575f5ffd5b84356001600160401b0381111561234e575f5ffd5b61235a878288016122d7565b94505060208501356001600160401b03811115612375575f5ffd5b612381878288016122d7565b93505060408501356001600160401b0381111561239c575f5ffd5b6123a8878288016122d7565b92505060608501356001600160401b038111156123c3575f5ffd5b6123cf878288016121cb565b91505092959194509250565b5f5f604083850312156123ec575f5ffd5b6123f5836120ae565b915060208301358015158114612409575f5ffd5b809150509250929050565b5f5f5f5f60808587031215612427575f5ffd5b612430856120ae565b935061243e602086016120ae565b92506040850135915060608501356001600160401b0381111561245f575f5ffd5b8501601f8101871361246f575f5ffd5b6123cf8782356020840161227f565b5f5f5f60608486031215612490575f5ffd5b83359250602084013591506124a7604085016120ae565b90509250925092565b5f5f604083850312156124c1575f5ffd5b6124ca836120ae565b91506109c7602084016120ae565b5f5f604083850312156124e9575f5ffd5b82356001600160401b038111156124fe575f5ffd5b8301601f8101851361250e575f5ffd5b803561251c6121e8826121a9565b8082825260208201915060208360051b85010192508783111561253d575f5ffd5b6020840193505b8284101561255f578335825260209384019390910190612544565b94506109c792505050602084016120ae565b600181811c9082168061258557607f821691505b6020821081036125a357634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526012908201527110dbdb9d1c9858dd081a5cc814185d5cd95960721b604082015260600190565b60208082526013908201527229b2b73232b91034b9903737ba1020b236b4b760691b604082015260600190565b6020808252601a908201527929b2b73232b91034b9903737ba1022bb32b73a1026b4b73a32b960311b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561066457610664612636565b634e487b7160e01b5f52603260045260245ffd5b601f821115610653578282111561065357805f5260205f20601f840160051c602085101561269c57505f5b90810190601f840160051c035f5b818110156126bf575f838201556001016126aa565b505050505050565b81516001600160401b038111156126e0576126e0612165565b6126f4816126ee8454612571565b84612671565b6020601f821160018114612726575f831561270f5750848201515b5f19600385901b1c1916600184901b17845561277e565b5f84815260208120601f198516915b828110156127555787850151825560209485019460019092019101612735565b508482101561277257868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b5f600182016127e4576127e4612636565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f8261280d5761280d6127eb565b500490565b8181038181111561066457610664612636565b5f82612833576128336127eb565b500690565b5f8161284657612846612636565b505f190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061287f9083018461205a565b9695505050505050565b5f60208284031215612899575f5ffd5b815161075381612013565b634e487b7160e01b5f52603160045260245ffdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef