solc-0.8.36-fakeopcode 0x83bc649fcdb2c8da146b2154a559ddedf937ef12 optimized-low-runs
20582 bytes
608060405260043610610364575f3560e01c806303dcfbdc1461041957806306be9c531461044b5780630716e2421461046b57806308061aeb1461048c57806308388426146104ca578063086e16c0146104e957806308c73259146105075780630de371e2146105335780630ea9e8521461055257806310ddce8e1461057257806312c53c9b146105a5578063158f8f59146105c55780631665f66d146105e45780631729d10b1461060357806317e51e80146106225780631991c225146106415780631aab9ef1146106605780631e95e60e1461067f5780631ee665c41461069e57806322828cc2146106bd57806326d5d54a146106dc57806328a947d91461073557806328ac82e71461074a5780632db004a31461076957806335876476146107945780633659cfe6146107b357806337cfdaca146107d2578063397a1b28146107e65780633a53acb014610805578063439766ce14610824578063456a23a6146108385780634690484014610857578063469963aa1461087657806346d4b714146108955780634c73f498146108b45780634f1ef286146108d357806351199700146108e657806352d1902d1461090557806353f3fcb1146109195780635460172614610932578063561bddf81461095257806356f1199b146109715780635c975abb14610990578063616e6c1b146109b0578063715018a6146109cf57806371cb700f146109e35780637346f1aa14610a025780637c8dc44014610a225780637c90fbf014610a415780638da5cb5b14610a67578063917266fa14610a7b5780639795947314610a9a5780639a8a302b14610ac8578063aaf10f4214610ae7578063b46a130e14610afb578063baaff11614610b1a578063bac1520314610b39578063c00b2d6114610b4d578063c00c2d7314610b6c578063c98bea5b14610b8b578063d0e30db014610bb2578063d67b8fee14610bba578063d6951aa914610bd9578063da79205814610bf8578063da8ed1f714610c1c578063dcbfb6c314610c3b578063de70b59f14610c5a578063e453793414610c79578063e74b981b14610cb1578063e939482314610cd0578063ee30511614610d03578063f2c5998a14610d22578063f2fde38b14610d41578063f340fa0114610d60578063f3fef3a314610d73578063f9609f0814610d92578063fc6dfe4e14610da5575f5ffd5b36610415576001600160801b033411156103915760405163162908e360e11b815260040160405180910390fd5b60cf80543491905f906103ae9084906001600160801b03166141fc565b92506101000a8154816001600160801b03021916908360801b60801c02179055503460cf60108282829054906101000a90046001600160801b03166103f3919061421b565b92506101000a8154816001600160801b03021916908360801b60801c02179055005b5f5ffd5b348015610424575f5ffd5b5061043861043336600461424e565b610dd3565b6040519081526020015b60405180910390f35b348015610456575f5ffd5b506104385f5160206150265f395f51905f5281565b348015610476575f5ffd5b5061048a6104853660046142db565b610e9c565b005b348015610497575f5ffd5b506104ba6104a6366004614319565b60db6020525f908152604090205460ff1681565b6040519015158152602001610442565b3480156104d5575f5ffd5b5061048a6104e4366004614378565b610f93565b3480156104f4575f5ffd5b5061048a610503366004614494565b5050565b348015610512575f5ffd5b5060e054610526906001600160a01b031681565b60405161044291906144c5565b34801561053e575f5ffd5b5060ce54610526906001600160a01b031681565b34801561055d575f5ffd5b506104385f5160206150465f395f51905f5281565b34801561057d575f5ffd5b5060d45461059890600160801b90046001600160801b031681565b60405161044291906144d8565b3480156105b0575f5ffd5b5060ce546104ba90600160a01b900460ff1681565b3480156105d0575f5ffd5b5061048a6105df366004614319565b61156a565b3480156105ef575f5ffd5b5061048a6105fe3660046144ff565b6116bb565b34801561060e575f5ffd5b5060de54610526906001600160a01b031681565b34801561062d575f5ffd5b5060dd54610526906001600160a01b031681565b34801561064c575f5ffd5b5061048a61065b3660046144ff565b61172e565b34801561066b575f5ffd5b5061043861067a36600461451a565b6117b0565b34801561068a575f5ffd5b5061052661069936600461454c565b6118f7565b3480156106a9575f5ffd5b5061048a6106b8366004614563565b61191f565b3480156106c8575f5ffd5b5060c954610526906001600160a01b031681565b3480156106e7575f5ffd5b506107186106f63660046145e4565b60d76020525f908152604090205463ffffffff80821691600160201b90041682565b6040805163ffffffff938416815292909116602083015201610442565b348015610740575f5ffd5b5061043860e15481565b348015610755575f5ffd5b5060cb54610526906001600160a01b031681565b348015610774575f5ffd5b5061043861078336600461454c565b60d86020525f908152604090205481565b34801561079f575f5ffd5b5061048a6107ae366004614602565b6119c1565b3480156107be575f5ffd5b5061048a6107cd366004614319565b611be6565b3480156107dd575f5ffd5b50610438611cad565b3480156107f1575f5ffd5b50610438610800366004614693565b611cdc565b348015610810575f5ffd5b5061043861081f36600461454c565b611df9565b34801561082f575f5ffd5b5061048a611e93565b348015610843575f5ffd5b5060cf54610598906001600160801b031681565b348015610862575f5ffd5b5060d054610526906001600160a01b031681565b348015610881575f5ffd5b5060ca54610526906001600160a01b031681565b3480156108a0575f5ffd5b5061048a6108af3660046146bd565b612023565b3480156108bf575f5ffd5b5061048a6108ce3660046146bd565b61215d565b61048a6108e136600461471a565b6121f9565b3480156108f1575f5ffd5b50610438610900366004614319565b6122ae565b348015610910575f5ffd5b506104386123bf565b348015610924575f5ffd5b5060dc546104ba9060ff1681565b34801561093d575f5ffd5b506104385f516020614fbf5f395f51905f5281565b34801561095d575f5ffd5b5061043861096c36600461454c565b61246b565b34801561097c575f5ffd5b5061048a61098b366004614319565b6124f8565b34801561099b575f5ffd5b5060dc546104ba90600160881b900460ff1681565b3480156109bb575f5ffd5b5061048a6109ca36600461454c565b612651565b3480156109da575f5ffd5b5061048a61272e565b3480156109ee575f5ffd5b5060d254610526906001600160a01b031681565b348015610a0d575f5ffd5b5060d9546104ba90600160a01b900460ff1681565b348015610a2d575f5ffd5b5061048a610a3c3660046147a6565b612741565b348015610a4c575f5ffd5b5060cf5461059890600160801b90046001600160801b031681565b348015610a72575f5ffd5b506105266128a1565b348015610a86575f5ffd5b50610438610a9536600461454c565b6128b0565b348015610aa5575f5ffd5b506104ba610ab4366004614319565b60da6020525f908152604090205460ff1681565b348015610ad3575f5ffd5b5060d154610526906001600160a01b031681565b348015610af2575f5ffd5b5061052661296b565b348015610b06575f5ffd5b50610438610b153660046147c6565b612979565b348015610b25575f5ffd5b5061048a610b34366004614805565b6129fc565b348015610b44575f5ffd5b5061048a612bd5565b348015610b58575f5ffd5b5061048a610b6736600461484c565b612d50565b348015610b77575f5ffd5b5060d954610526906001600160a01b031681565b348015610b96575f5ffd5b5060d5546107189063ffffffff80821691600160201b90041682565b610438612e5c565b348015610bc5575f5ffd5b5060cd54610526906001600160a01b031681565b348015610be4575f5ffd5b5060d454610598906001600160801b031681565b348015610c03575f5ffd5b5060dc546105989061010090046001600160801b031681565b348015610c27575f5ffd5b5061048a610c36366004614879565b612e66565b348015610c46575f5ffd5b5060df54610526906001600160a01b031681565b348015610c65575f5ffd5b5061048a610c74366004614563565b612f14565b348015610c84575f5ffd5b5060d054610c9c90600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610442565b348015610cbc575f5ffd5b5061048a610ccb366004614319565b613045565b348015610cdb575f5ffd5b506105267f000000000000000000000000000000000000000000000000000000000000000081565b348015610d0e575f5ffd5b5060cc54610526906001600160a01b031681565b348015610d2d575f5ffd5b5061048a610d3c36600461454c565b61312b565b348015610d4c575f5ffd5b5061048a610d5b366004614319565b613206565b610438610d6e366004614319565b61327c565b348015610d7e575f5ffd5b50610438610d8d366004614693565b6132c4565b610438610da03660046146bd565b6136ff565b348015610db0575f5ffd5b506104ba610dbf366004614319565b60d66020525f908152604090205460ff1681565b5f610ddc613769565b60ce546001600160a01b031663d505accf333085356020870135610e066060890160408a01614894565b6040516001600160e01b031960e088901b1681526001600160a01b0395861660048201529490931660248501526044840191909152606483015260ff166084820152606085013560a4820152608085013560c482015260e4015f604051808303815f87803b158015610e76575f5ffd5b505af1925050508015610e87575060015b50610e928484611cdc565b90505b9392505050565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490610edb905f5160206150465f395f51905f529033906004016148b4565b602060405180830381865afa158015610ef6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1a91906148cb565b610f375760405163209296a360e01b815260040160405180910390fd5b5f5b81811015610f8e57828282818110610f5357610f536148e6565b905060200201357f339b23d24a078f6403801d644f7cba5045424e28175a49da36de4445b66387da60405160405180910390a2600101610f39565b505050565b610f9b613769565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490610fda905f5160206150265f395f51905f529033906004016148b4565b602060405180830381865afa158015610ff5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101991906148cb565b6110365760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec80000060e15410806110595750686f05b59d3b2000000060e154115b1561107757604051633f4219cd60e21b815260040160405180910390fd5b84511580611086575084518314155b80611092575084518114155b156110b05760405163a9854bc960e01b815260040160405180910390fd5b60c954604080516321edd09760e01b815290515f926001600160a01b0316916321edd097916004808301926020929190829003018187875af11580156110f8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111c91906148fa565b60e1546111299190614911565b90505f86516001600160401b0381111561114557611145614334565b6040519080825280602002602001820160405280156111a057816020015b61118d604051806080016040528060608152602001606081526020015f8152602001606081525090565b8152602001906001900390816111635790505b5090505f5b87518110156114e35760ca5488515f916001600160a01b03169063b165e295908b90859081106111d7576111d76148e6565b60200260200101516040518263ffffffff1660e01b81526004016111fd91815260200190565b602060405180830381865afa158015611218573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123c9190614924565b90505f8160601b60601c63bcbb073a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611278573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061129c9190614924565b60ca54604051632a25a9af60e11b81529192505f916001600160a01b039091169063544b535e906112d19085906004016144c5565b5f60405180830381865afa1580156112eb573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611312919081019061493f565b60c9549091505f906001600160a01b031663125ae56b8c8c8881811061133a5761133a6148e6565b905060200281019061134c91906149b3565b8c8c8a81811061135e5761135e6148e6565b905060200281019061137091906149b3565b878d6040518763ffffffff1660e01b815260040161139396959493929190614a4b565b602060405180830381865afa1580156113ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d291906148fa565b90505f60405180608001604052808d8d898181106113f2576113f26148e6565b905060200281019061140491906149b3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018b8b8981811061144f5761144f6148e6565b905060200281019061146191906149b3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506020808301869052604080519182018152918152910152875190915081908890889081106114c6576114c66148e6565b6020026020010181905250505050505080806001019150506111a5565b505f8751836114f29190614a99565b90506114fd816137b6565b60c95460e154604051635d57f88b60e11b81526001600160a01b039092169163baaff116918491611532918791600401614ab0565b5f604051808303818588803b158015611549575f5ffd5b505af115801561155b573d5f5f3e3d5ffd5b50505050505050505050505050565b6001600160a01b0381165f90815260db602052604090205460ff166115c75760405162461bcd60e51b815260206004820152600e60248201526d139bdd081c9959da5cdd195c995960921b60448201526064015b60405180910390fd5b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490611606905f5160206150465f395f51905f529033906004016148b4565b602060405180830381865afa158015611621573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164591906148cb565b6116615760405162461bcd60e51b81526004016115be90614b66565b6001600160a01b0381165f90815260db602052604090819020805460ff19169055517f8a5afe4e68ed1b812242442424ef608ee7b0a23b6111c6183e781ac4656e8173906116b09083906144c5565b60405180910390a150565b60d9546001600160a01b031633146116e6576040516317fe949f60e01b815260040160405180910390fd5b8060dc60018282829054906101000a90046001600160801b031661170a919061421b565b92506101000a8154816001600160801b03021916908360801b60801c021790555050565b60d9546001600160a01b03163314611759576040516317fe949f60e01b815260040160405180910390fd5b7fafea3ee583ed00355634c0a2f47d947b6af95fda2bc1dbe0ff919c45166789d48160405161178891906144d8565b60405180910390a160d054610503906001600160a01b03166001600160801b0383165f612979565b5f6117b9613769565b60cc546001600160a01b031633146117e4576040516317fe949f60e01b815260040160405180910390fd5b5f6117ee84611df9565b90506001600160601b03841180611803575083155b8061180c575080155b1561182a5760405163162908e360e11b815260040160405180910390fd5b60d25460ce54611849916001600160a01b039182169133911687613818565b60d25460405163019691cb60e41b81525f916001600160a01b0316906319691cb09061187f90889086908b908a90600401614b90565b6020604051808303815f875af115801561189b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118bf91906148fa565b60405190915033905f5160206150065f395f51905f52906118e69089908990600290614be2565b60405180910390a295945050505050565b60d38181548110611906575f80fd5b5f918252602090912001546001600160a01b0316905081565b611927613769565b335f90815260db602052604090205460ff166119555760405162461bcd60e51b81526004016115be90614b66565b60c954604051637c561c3960e11b81526001600160a01b039091169063f8ac38729061198d9088908890889088908890600401614d19565b5f604051808303815f87803b1580156119a4575f5ffd5b505af11580156119b6573d5f5f3e3d5ffd5b505050505050505050565b5f54610100900460ff16158080156119df57505f54600160ff909116105b806119ff57506119ee30613878565b1580156119ff57505f5460ff166001145b611a625760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016115be565b5f805460ff191660011790558015611a83575f805461ff0019166101001790555b6001600160a01b0388161580611aa057506001600160a01b038716155b80611ab257506001600160a01b038616155b80611ac457506001600160a01b038516155b80611ad657506001600160a01b038416155b15611af45760405163baca868960e01b815260040160405180910390fd5b611afc613887565b611b046138b5565b60ce80546001600160a01b03199081166001600160a01b038b81169190911790925560c9805482168a841617905560ca8054821689841617905560cc8054821688841617905560cd8054821687841617905560dc8054600160881b6001600160901b031990911617905560d98054821686841617905560d2805490911691841691909117905560de805460ff60a01b191690558015611bdc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611c2e5760405162461bcd60e51b81526004016115be90614d77565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611c606138db565b6001600160a01b031614611c865760405162461bcd60e51b81526004016115be90614db0565b611c8f816138f6565b604080515f80825260208201909252611caa9183919061394e565b50565b60cf545f90611cce906001600160801b03600160801b82048116911661421b565b6001600160801b0316919050565b5f611ce5613769565b5f611cef83611df9565b90506001600160601b03831180611d04575082155b80611d0d575080155b15611d2b5760405163162908e360e11b815260040160405180910390fd5b60d25460ce54611d4a916001600160a01b039182169133911686613818565b60d25460405163019691cb60e41b81525f916001600160a01b0316906319691cb090611d8090879086908a908790600401614b90565b6020604051808303815f875af1158015611d9c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc091906148fa565b60405190915033905f5160206150065f395f51905f5290611de79088908890600190614be2565b60405180910390a29150505b92915050565b5f5f611e03611cad565b9050805f03611e1457505f92915050565b60ce5460408051633a98ef3960e01b8152905183926001600160a01b031691633a98ef399160048083019260209291908290030181865afa158015611e5b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7f91906148fa565b611e899085614a99565b610e959190614de9565b60e05460408051633bd48c9f60e11b815290516001600160a01b03909216916391d148549183916377a9193e916004808201926020929091908290030181865afa158015611ee3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0791906148fa565b336040518363ffffffff1660e01b8152600401611f259291906148b4565b602060405180830381865afa158015611f40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f6491906148cb565b611f815760405163209296a360e01b815260040160405180910390fd5b60dc54600160881b900460ff1615611fd65760405162461bcd60e51b815260206004820152601860248201527714185d5cd8589b194e88185b1c9958591e481c185d5cd95960421b60448201526064016115be565b60dc805460ff60881b1916600160881b1790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906120199033906144c5565b60405180910390a1565b61202b613ab5565b60df546001600160a01b031615801561204c57506001600160a01b03811615155b6120685760405162461bcd60e51b81526004016115be90614e08565b60e0546001600160a01b0316156120b75760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016115be565b60df80546001600160a01b038084166001600160a01b03199283161790925560e08054928516929091169190911790555f6120f0611cad565b60cf80546001600160801b03478116600160801b908102928216929092179283905592935061212292910416826141fc565b60cf80546001600160801b0319166001600160801b039290921691909117905561214a611cad565b6001600160801b03821614610f8e575f5ffd5b612165613ab5565b6001600160a01b0382161580159061218557506001600160a01b03811615155b801561219a575060dd546001600160a01b0316155b80156121af575060de546001600160a01b0316155b6121cb5760405162461bcd60e51b81526004016115be90614e08565b60dd80546001600160a01b039384166001600160a01b03199182161790915560de8054929093169116179055565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036122415760405162461bcd60e51b81526004016115be90614d77565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166122736138db565b6001600160a01b0316146122995760405162461bcd60e51b81526004016115be90614db0565b6122a2826138f6565b6105038282600161394e565b5f5f5f60ce5f9054906101000a90046001600160a01b031660601b60601c633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122fe573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061232291906148fa565b905080156123b85760ce5460405163673e156160e11b815282916001600160a01b03169063ce7c2ac29061235a9088906004016144c5565b602060405180830381865afa158015612375573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061239991906148fa565b6123a1611cad565b6123ab9190614a99565b6123b59190614de9565b91505b5092915050565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146124595760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60648201526084016115be565b505f516020614f9f5f395f51905f5290565b5f5f60ce5f9054906101000a90046001600160a01b031660601b60601c633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124de91906148fa565b9050805f036124ef57505f92915050565b80611e7f611cad565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612537905f5160206150465f395f51905f529033906004016148b4565b602060405180830381865afa158015612552573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061257691906148cb565b6125935760405163209296a360e01b815260040160405180910390fd5b6001600160a01b0381165f90815260db602052604090205460ff16156125f05760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b60448201526064016115be565b6040805160208082018352600182526001600160a01b0384165f90815260db9091528290209051815460ff1916901515179055517f8bef88cac8d05094711d367d04bf4f2fcb4b589ca12a6ed8c8f375000e1e848e906116b09083906144c5565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612690905f5160206150465f395f51905f529033906004016148b4565b602060405180830381865afa1580156126ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126cf91906148cb565b6126ec5760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec80000081108061270b5750686f05b59d3b2000000081115b1561272957604051633f4219cd60e21b815260040160405180910390fd5b60e155565b612736613ab5565b61273f5f613b14565b565b5f61274b826128b0565b60df549091506001600160a01b03163314612779576040516317fe949f60e01b815260040160405180910390fd5b821580612784575081155b156127a25760405163162908e360e11b815260040160405180910390fd5b828111156127c35760405163162908e360e11b815260040160405180910390fd5b60cf80548391905f906127e09084906001600160801b03166141fc565b82546001600160801b039182166101009390930a92830291909202199091161790555060ce54604051633b9e9f0160e21b81526001600160a01b039091169063ee7a7c04906128359033908790600401614e29565b5f604051808303815f87803b15801561284c575f5ffd5b505af115801561285e573d5f5f3e3d5ffd5b505060408051868152602081018690527f888a2432cd9af74ee23f9ebdf262368f5434dffe681b3c7426880c6639b2a74a935001905060405180910390a1505050565b6033546001600160a01b031690565b5f5f6128ba611cad565b9050805f036128cb57505f92915050565b60ce5460408051633a98ef3960e01b815290515f926001600160a01b031691633a98ef399160048083019260209291908290030181865afa158015612912573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061293691906148fa565b6129409085614a99565b905081600161294f8284614e41565b6129599190614911565b6129639190614de9565b949350505050565b5f6129746138db565b905090565b5f612982613769565b60de546001600160a01b03163314806129a5575060d9546001600160a01b031633145b6129c15760405162461bcd60e51b81526004016115be90614b66565b8360601b60601c5f516020614f5f5f395f51905f52846001856040516129e993929190614e54565b60405180910390a2610e92845f85613b65565b612a04613769565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612a43905f5160206150265f395f51905f529033906004016148b4565b602060405180830381865afa158015612a5e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a8291906148cb565b612a9f5760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec800000811080612abe5750686f05b59d3b2000000081115b15612adc57604051633f4219cd60e21b815260040160405180910390fd5b60c954604080516321edd09760e01b815290515f926001600160a01b0316916321edd097916004808301926020929190829003018187875af1158015612b24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b4891906148fa565b612b529083614911565b90505f612b5f8483614a99565b9050612b6a816137b6565b60c954604051635d57f88b60e11b81526001600160a01b039091169063baaff116908390612ba090899089908990600401614e80565b5f604051808303818588803b158015612bb7575f5ffd5b505af1158015612bc9573d5f5f3e3d5ffd5b50505050505050505050565b60e0546040805163421d0eb360e01b815290516001600160a01b03909216916391d1485491839163421d0eb3916004808201926020929091908290030181865afa158015612c25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c4991906148fa565b336040518363ffffffff1660e01b8152600401612c679291906148b4565b602060405180830381865afa158015612c82573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ca691906148cb565b612cc35760405163209296a360e01b815260040160405180910390fd5b60dc54600160881b900460ff16612d135760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016115be565b60dc805460ff60881b191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906120199033906144c5565b60cc546001600160a01b03163314612d7b576040516317fe949f60e01b815260040160405180910390fd5b60cf54612d929082906001600160801b0316614ea3565b60cf80546001600160801b0319166001600160801b03929092169190911790557f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511612ddb611cad565b60ce5460408051633a98ef3960e01b815290516001600160a01b0390921691633a98ef39916004808201926020929091908290030181865afa158015612e23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e4791906148fa565b604080519283526020830191909152016116b0565b5f6129745f61327c565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612ea5905f5160206150465f395f51905f529033906004016148b4565b602060405180830381865afa158015612ec0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ee491906148cb565b612f015760405163209296a360e01b815260040160405180910390fd5b60dc805460ff1916911515919091179055565b612f1c613769565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612f5b905f516020614fbf5f395f51905f529033906004016148b4565b602060405180830381865afa158015612f76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9a91906148cb565b612fb75760405163209296a360e01b815260040160405180910390fd5b5f612fca83670de0b6b3a7640000614a99565b9050612fd5816137b6565b60c954604051632dc4817560e21b81526001600160a01b039091169063b71205d490839061300f908a908a908a908a908a90600401614d19565b5f604051808303818588803b158015613026575f5ffd5b505af1158015613038573d5f5f3e3d5ffd5b5050505050505050505050565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490613084905f5160206150465f395f51905f529033906004016148b4565b602060405180830381865afa15801561309f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130c391906148cb565b6130e05760405163209296a360e01b815260040160405180910390fd5b60d080546001600160a01b0319166001600160a01b0383161790556040517fbf5406678e9fe702eaea01d92d3b62ac5be0a14e1802562e2a428364d30d1b11906116b09083906144c5565b60df546001600160a01b03163314801590613151575060d2546001600160a01b03163314155b80156131865750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156131a4576040516317fe949f60e01b815260040160405180910390fd5b60ce54604051633b9e9f0160e21b81526001600160a01b039091169063ee7a7c04906131d69033908590600401614e29565b5f604051808303815f87803b1580156131ed575f5ffd5b505af11580156131ff573d5f5f3e3d5ffd5b5050505050565b61320e613ab5565b6001600160a01b0381166132735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016115be565b611caa81613b14565b5f613285613769565b60405133905f516020614f5f5f395f51905f52906132a99034906001908790614e54565b60405180910390a26132bc33345f613b65565b90505b919050565b5f6132cd613769565b5f6132d7836128b0565b60d2549091506001600160a01b03163314806132fd575060cc546001600160a01b031633145b80613312575060df546001600160a01b031633145b806133455750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6133615760405162461bcd60e51b81526004016115be90614b66565b60cf54600160801b90046001600160801b03168311806133ed575060ce546040516370a0823160e01b815284916001600160a01b0316906370a08231906133ac9033906004016144c5565b602060405180830381865afa1580156133c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133eb91906148fa565b105b1561340b5760405163bb55fd2760e01b815260040160405180910390fd5b6001600160801b0383118061341e575082155b80613427575080155b156134455760405163162908e360e11b815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156134ae575060dc5460cf5484916134a3916001600160801b03610100909204821691600160801b909104166141fc565b6001600160801b0316105b156134cc5760405163bb55fd2760e01b815260040160405180910390fd5b60d2546001600160a01b0316330361364f5760dc5461010090046001600160801b031683111561350f5760405163bb55fd2760e01b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001615613609575f7f000000000000000000000000000000000000000000000000000000000000000060601b60601c63341c6b3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613598573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135bc9190614ed0565b60cf5490915084906135df908390600160801b90046001600160801b03166141fc565b6001600160801b031610156136075760405163bb55fd2760e01b815260040160405180910390fd5b505b8260dc60018282829054906101000a90046001600160801b031661362d91906141fc565b92506101000a8154816001600160801b03021916908360801b60801c02179055505b8260cf60108282829054906101000a90046001600160801b031661367391906141fc565b82546001600160801b039182166101009390930a92830291909202199091161790555060ce54604051633b9e9f0160e21b81526001600160a01b039091169063ee7a7c04906136c89033908590600401614e29565b5f604051808303815f87803b1580156136df575f5ffd5b505af11580156136f1573d5f5f3e3d5ffd5b50505050610e958484613cad565b5f613708613769565b60cc546001600160a01b031633146137325760405162461bcd60e51b81526004016115be90614b66565b60405133905f516020614f5f5f395f51905f52906137569034906002908790614e54565b60405180910390a2610e9533345f613b65565b60dc54600160881b900460ff161561273f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016115be565b60cf80548291905f906137d39084906001600160801b031661421b565b92506101000a8154816001600160801b03021916908360801b60801c02179055508060cf60108282829054906101000a90046001600160801b031661170a91906141fc565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613872908590613d4d565b50505050565b6001600160a01b03163b151590565b5f54610100900460ff166138ad5760405162461bcd60e51b81526004016115be90614eeb565b61273f613e16565b5f54610100900460ff1661273f5760405162461bcd60e51b81526004016115be90614eeb565b5f516020614f9f5f395f51905f52546001600160a01b031690565b60e054604051635006bb7b60e01b81526001600160a01b0390911690635006bb7b906139269033906004016144c5565b5f6040518083038186803b15801561393c575f5ffd5b505afa1580156131ff573d5f5f3e3d5ffd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561398157610f8e83613e45565b8260601b60601c6352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156139d8575060408051601f3d908101601f191682019092526139d5918101906148fa565b60015b613a3b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016115be565b5f516020614f9f5f395f51905f528114613aa95760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016115be565b50610f8e838383613ede565b33613abe6128a1565b6001600160a01b03161461273f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016115be565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f8260cf60108282829054906101000a90046001600160801b0316613b8a919061421b565b92506101000a8154816001600160801b03021916908360801b60801c02179055508160cf5f8282829054906101000a90046001600160801b0316613bce919061421b565b92506101000a8154816001600160801b03021916908360801b60801c02179055505f8284613bfc9190614e41565b90505f613c0882613f02565b90506001600160801b03821180613c1d575081155b80613c26575080155b15613c445760405163162908e360e11b815260040160405180910390fd5b60ce546040516329460cc560e11b81526001600160a01b039091169063528c198a90613c769089908590600401614e29565b5f604051808303815f87803b158015613c8d575f5ffd5b505af1158015613c9f573d5f5f3e3d5ffd5b509298975050505050505050565b60405147905f906001600160a01b0385169084908381818185875af1925050503d805f8114613cf7576040519150601f19603f3d011682016040523d82523d5f602084013e613cfc565b606091505b50509050808015613d165750613d128383614911565b4710155b6138725760405162461bcd60e51b815260206004820152600860248201526714d95b9911985a5b60c21b60448201526064016115be565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201525f90613d99906001600160a01b038516908490613f27565b805190915015610f8e5780806020019051810190613db791906148cb565b610f8e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016115be565b5f54610100900460ff16613e3c5760405162461bcd60e51b81526004016115be90614eeb565b61273f33613b14565b613e4e81613878565b613eb05760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016115be565b5f516020614f9f5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b613ee783613f35565b5f82511180613ef35750805b15610f8e576138728383613f74565b5f5f82613f0d611cad565b613f179190614911565b9050805f03611e14575090919050565b6060610e9284845f8561405f565b613f3e81613e45565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060613f7f83613878565b613fda5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016115be565b5f5f8460601b60601c84604051613ff19190614f36565b5f60405180830381855af49150503d805f8114614029576040519150601f19603f3d011682016040523d82523d5f602084013e61402e565b606091505b50915091506140568282604051806060016040528060278152602001614fdf60279139614133565b95945050505050565b6060824710156140c05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016115be565b5f5f8660601b60601c85876040516140d89190614f36565b5f6040518083038185875af1925050503d805f8114614112576040519150601f19603f3d011682016040523d82523d5f602084013e614117565b606091505b50915091506141288783838761414c565b979650505050505050565b60608315614142575081610e95565b610e9583836141be565b606083156141b85782515f036141b15761416585613878565b6141b15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016115be565b5081612963565b61296383835b8151156141ce5781518083602001fd5b8060405162461bcd60e51b81526004016115be9190614f4c565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b038083168282160390811115611df357611df36141e8565b6001600160801b038181168184160190811115611df357611df36141e8565b6001600160a01b0381168114611caa575f5ffd5b5f5f5f83850360e0811215614261575f5ffd5b843561426c8161423a565b93506020850135925060a0603f1982011215614286575f5ffd5b506040840190509250925092565b5f5f83601f8401126142a4575f5ffd5b5081356001600160401b038111156142ba575f5ffd5b6020830191508360208260051b85010111156142d4575f5ffd5b9250929050565b5f5f602083850312156142ec575f5ffd5b82356001600160401b03811115614301575f5ffd5b61430d85828601614294565b90969095509350505050565b5f60208284031215614329575f5ffd5b8135610e958161423a565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561437057614370614334565b604052919050565b5f5f5f5f5f6060868803121561438c575f5ffd5b85356001600160401b038111156143a1575f5ffd5b8601601f810188136143b1575f5ffd5b80356001600160401b038111156143ca576143ca614334565b8060051b6143da60208201614348565b9182526020818401810192908101908b8411156143f5575f5ffd5b6020850194505b8385101561441b578435808352602095860195909350909101906143fc565b9850505050602087013590506001600160401b0381111561443a575f5ffd5b61444688828901614294565b90955093505060408601356001600160401b03811115614464575f5ffd5b61447088828901614294565b969995985093965092949392505050565b803563ffffffff811681146132bf575f5ffd5b5f5f604083850312156144a5575f5ffd5b6144ae83614481565b91506144bc60208401614481565b90509250929050565b6001600160a01b03909116815260200190565b6001600160801b03909116815260200190565b6001600160801b0381168114611caa575f5ffd5b5f6020828403121561450f575f5ffd5b8135610e95816144eb565b5f5f5f6060848603121561452c575f5ffd5b83356145378161423a565b95602085013595506040909401359392505050565b5f6020828403121561455c575f5ffd5b5035919050565b5f5f5f5f5f60608688031215614577575f5ffd5b85356001600160401b0381111561458c575f5ffd5b61459888828901614294565b90965094505060208601356001600160401b038111156145b6575f5ffd5b6145c288828901614294565b90945092505060408601356145d68161423a565b809150509295509295909350565b5f602082840312156145f4575f5ffd5b813560048110610e95575f5ffd5b5f5f5f5f5f5f5f60e0888a031215614618575f5ffd5b87356146238161423a565b965060208801356146338161423a565b955060408801356146438161423a565b945060608801356146538161423a565b935060808801356146638161423a565b925060a08801356146738161423a565b915060c08801356146838161423a565b8091505092959891949750929550565b5f5f604083850312156146a4575f5ffd5b82356146af8161423a565b946020939093013593505050565b5f5f604083850312156146ce575f5ffd5b82356146d98161423a565b915060208301356146e98161423a565b809150509250929050565b5f6001600160401b0382111561470c5761470c614334565b50601f01601f191660200190565b5f5f6040838503121561472b575f5ffd5b82356147368161423a565b915060208301356001600160401b03811115614750575f5ffd5b8301601f81018513614760575f5ffd5b803561477361476e826146f4565b614348565b818152866020838501011115614787575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156147b7575f5ffd5b50508035926020909101359150565b5f5f5f606084860312156147d8575f5ffd5b83356147e38161423a565b92506020840135915060408401356147fa8161423a565b809150509250925092565b5f5f5f60408486031215614817575f5ffd5b83356001600160401b0381111561482c575f5ffd5b61483886828701614294565b909790965060209590950135949350505050565b5f6020828403121561485c575f5ffd5b813580600f0b8114610e95575f5ffd5b8015158114611caa575f5ffd5b5f60208284031215614889575f5ffd5b8135610e958161486c565b5f602082840312156148a4575f5ffd5b81358060ff168114610e95575f5ffd5b9182526001600160a01b0316602082015260400190565b5f602082840312156148db575f5ffd5b8151610e958161486c565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561490a575f5ffd5b5051919050565b81810381811115611df357611df36141e8565b5f60208284031215614934575f5ffd5b8151610e958161423a565b5f6020828403121561494f575f5ffd5b81516001600160401b03811115614964575f5ffd5b8201601f81018413614974575f5ffd5b805161498261476e826146f4565b818152856020838501011115614996575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f8335601e198436030181126149c8575f5ffd5b8301803591506001600160401b038211156149e1575f5ffd5b6020019150368190038213156142d4575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b608081525f614a5e60808301888a6149f5565b8281036020840152614a718187896149f5565b90508281036040840152614a858186614a1d565b915050826060830152979650505050505050565b8082028115828204841417611df357611df36141e8565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b82811015614b5257605f198786030184528151805160808752614afc6080880182614a1d565b905060208201518782036020890152614b158282614a1d565b91505060408201516040880152606082015191508681036060880152614b3b8183614a1d565b965050506020938401939190910190600101614ad6565b505050506020929092019290925292915050565b60208082526010908201526f24b731b7b93932b1ba1021b0b63632b960811b604082015260600190565b6001600160601b0394851681529290931660208301526001600160a01b03166040820152606081019190915260800190565b60048110614bde57634e487b7160e01b5f52602160045260245ffd5b9052565b6001600160a01b038416815260208101839052606081016129636040830184614bc2565b5f5f8335601e19843603018112614c1b575f5ffd5b83016020810192503590506001600160401b03811115614c39575f5ffd5b8036038213156142d4575f5ffd5b5f8383855260208501945060208460051b820101835f5b86811015614d0d57838303601f19018852813536879003607e19018112614c83575f5ffd5b8601614c8f8180614c06565b60808652614ca16080870182846149f5565b915050614cb16020830183614c06565b8683036020880152614cc48382846149f5565b9250505060408201356040860152614cdf6060830183614c06565b92508582036060870152614cf48284836149f5565b60209b8c019b9096509490940193505050600101614c5e565b50909695505050505050565b606081525f614d2c606083018789614c47565b82810360208401528481526001600160fb1b03851115614d4a575f5ffd5b8460051b808760208401376001600160a01b03909416604093909301929092525001602001949350505050565b6020808252602c908201525f516020614f7f5f395f51905f5260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201525f516020614f7f5f395f51905f5260408201526b6163746976652070726f787960a01b606082015260800190565b5f82614e0357634e487b7160e01b5f52601260045260245ffd5b500490565b602080825260079082015266125b9d985b1a5960ca1b604082015260600190565b6001600160a01b039092168252602082015260400190565b80820180821115611df357611df36141e8565b83815260608101614e686020830185614bc2565b6001600160a01b039092166040919091015292915050565b604081525f614e93604083018587614c47565b9050826020830152949350505050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715611df357611df36141e8565b5f60208284031215614ee0575f5ffd5b8151610e95816144eb565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f82518060208501845e5f920191825250919050565b602081525f610e956020830184614a1d56fea241faf62e66ce518d1934ce4c936d806a02289ba483fac23beb8c15755be90d46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc20e7d93f475a4a8dd621285797dd2d68da59e4450b89aea5ca9bf079e95c1db5416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564b9da3f3df62c28aca604806cc6ee9678189d7591ef511a77bb040fa8361e9e02c6ace799356a5a236ccaa6708c68b77b7de838b1700b6e0c40f48a1407a5eef00e8d94121b3383f03d9ae60b39295aa793469d7230d51a3f62cbf47cd45481d9