solc-0.8.35 0xfe89fd96f270ac3c0f11921af0390dbb1340f704 optimized-low-runs

22175 bytes

608060405234801561000f575f5ffd5b50600436106102f4575f3560e01c8063033a0695146102f8578063066dd8301461031e5780630752c44c146103335780630c90e7fe14610346578063132a8bea14610369578063152ee0d3146103895780631901057d146103b15780631e83287e146103c457806321a3bebc146103d7578063228e731f1461041857806324ba667f1461042b57806324e4c1af1461043e5780632a5b3803146104515780633369706614610464578063341f7dcf1461048257806339921637146104955780633a445c4e146104d65780633c9a9ee5146104e9578063403d7778146104fc57806341a009eb1461050f57806358a54078146105425780635e39616d146105555780635ff1c482146105685780637333a3b4146105a65780637658c644146105b9578063771602f7146105e45780637a9e5e4b146105f757806380c099f41461060a57806383e4bcb71461061d57806387a7dc77146106305780638accc4a3146106435780638fb36037146106565780639c7ee64f146106775780639f9b19901461068a578063a0aead4d146106b2578063a0b3d9d8146106b9578063a2763d29146106db578063a436458d146106ee578063a467cc5914610701578063aab9eb0714610714578063b0745f2b14610727578063b33454e514610753578063b5f460c814610768578063be1052801461077b578063bf7e214f1461078e578063c04d164e14610796578063c25d82fe146107a9578063c435e928146107bc578063c4d66de814610810578063cc0e1c1c14610823578063ceb233b314610836578063d3c6a11d14610849578063d5d15a111461085c578063d6abe64214610887578063de079b571461089a578063de31ea9f146108f7578063e5c9274514610993578063e840427d146109d2578063eac8f5b8146109e5578063efdba7c014610ba7578063f51f1a3514610bba578063f701f06e14610bcd578063f8447aaf14610bed578063f899860514610c00578063f91ebd5214610c1a578063fce56a0b14610c22575b5f5ffd5b61030b610306366004614bb7565b610d63565b6040519081526020015b60405180910390f35b61033161032c366004614bce565b610dc7565b005b61030b610341366004614bb7565b610f29565b610359610354366004614c04565b610f50565b6040519015158152602001610315565b61037c610377366004614bce565b610f80565b6040516103159190614c2a565b61039c610397366004614bb7565b610fa0565b60408051928352602083019190915201610315565b6103596103bf366004614c3e565b610fda565b61030b6103d2366004614ca5565b610ff1565b61030b6103e5366004614c3e565b5f9182526002602090815260408084206001600160a01b039390931684529190529020600301546001600160c81b031690565b61030b610426366004614bce565b611674565b61030b610439366004614bb7565b61168b565b61033161044c366004614d2c565b6116a1565b61030b61045f366004614da2565b611a2e565b61046e62ffffff81565b60405162ffffff9091168152602001610315565b610331610490366004614dd5565b611c6d565b61039c6104a3366004614bb7565b5f9081526001602052604090206003810154600290910154600160781b9091046001600160781b03169160189190910b90565b61030b6104e4366004614bce565b611d34565b61039c6104f7366004614c3e565b611d4b565b61030b61050a366004614bb7565b611d98565b61030b61051d366004614bb7565b5f9081526001602081905260409091200154600160781b90046001600160781b031690565b61030b610550366004614bb7565b611dd5565b61030b610563366004614bce565b611deb565b61030b610576366004614c3e565b5f9182526002602090815260408084206001600160a01b039390931684529190529020546001600160781b031690565b6103316105b4366004614bce565b611e02565b61030b6105c7366004614bb7565b5f908152600160205260409020600301546001600160781b031690565b61030b6105f2366004614bce565b611fc2565b610331610605366004614c04565b6121f8565b61030b610618366004614bce565b61226c565b61033161062b366004614bce565b612283565b61033161063e366004614df7565b612324565b61030b610651366004614bb7565b6123b1565b61065e6123d3565b6040516001600160e01b03199091168152602001610315565b61030b610685366004614c3e565b612405565b61030b610698366004614bb7565b5f908152600160205260409020546001600160781b031690565b5f5461030b565b6106c564ffffffffff81565b60405164ffffffffff9091168152602001610315565b6103316106e9366004614e20565b612447565b61030b6106fc366004614df7565b6124c3565b61033161070f366004614e64565b612653565b61030b610722366004614bce565b61270f565b61030b610735366004614bb7565b5f90815260016020819052604090912001546001600160781b031690565b61075b600181565b6040516103159190614eab565b61030b610776366004614bb7565b612726565b61039c610789366004614df7565b61273c565b61037c61296d565b61030b6107a4366004614bce565b612987565b6103316107b7366004614e20565b61299e565b61039c6107ca366004614c3e565b5f9182526002602090815260408084206001600160a01b0393909316845291905290208054600190910154600160781b9091046001600160781b03169160189190910b90565b61033161081e366004614c04565b6129f9565b61039c610831366004614da2565b612ae0565b61030b610844366004614bce565b612d01565b61030b610857366004614c3e565b612d18565b61030b61086a366004614bb7565b5f908152600160205260409020600901546001600160c81b031690565b61030b610895366004614c04565b612d53565b6108d66108a8366004614bb7565b5f908152600160205260409020600581015490546001600160a01b0390911691600160f01b90910460ff1690565b604080516001600160a01b03909316835260ff909116602083015201610315565b610986610905366004614bb7565b604080516080810182525f808252602082018190529181018290526060810191909152505f90815260016020908152604091829020825160808101845260088201546001600160a01b0390811682526003830154600160f01b900461ffff169382019390935260068201548316938101939093526007015416606082015290565b6040516103159190614ebf565b61030b6109a1366004614c3e565b5f9182526002602081815260408085206001600160a01b03949094168552929052912001546001600160781b031690565b61030b6109e0366004614df7565b612d95565b610b9a6109f3366004614bb7565b60408051610220810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810191909152505f9081526001602081815260409283902083516102208101855281546001600160781b038082168352600160781b808304821695840195909552600160f01b9182900460ff169683019690965293820154808616606083015283900485166080820152600282015460180b60a0820152600382015480861660c0830152838104861660e08301529390930461ffff1661010084015260048101549384166101208401529083046001600160601b0316610140830152600160d81b90920464ffffffffff1661016082015260058201546001600160a01b03908116610180830152600683015481166101a0830152600783015481166101c08301526008830154166101e08201526009909101546001600160c81b031661020082015290565b6040516103159190614f16565b61030b610bb5366004614c3e565b612f25565b61030b610bc8366004614bb7565b612f6b565b610be0610bdb366004614c3e565b612fa7565b6040516103159190615086565b61030b610bfb366004614bce565b61303a565b610c08601281565b60405160ff9091168152602001610315565b610c08600681565b610d56610c30366004614c3e565b60408051610140810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152505f8281526002602081815260408084206001600160a01b038616855282529283902083516101408101855281546001600160781b038082168352600160781b91829004811694830194909452600183015460180b9582019590955292810154918216606084015264ffffffffff93820484166080840152600160a01b820490931660a083015262ffffff600160c81b82041660c083015260ff600160e01b82048116151560e0840152600160e81b9091041615156101008201526003909101546001600160c81b031661012082015292915050565b60405161031591906150d6565b5f610d70335b5f36613051565b5f548210610d915760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020610da781613143565b5f610db2828561321b565b9050610dbe82856133a4565b9150505b919050565b5f548210610de85760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020610dfe81613143565b610e09813384613435565b80546001600160781b03168080841115610e425760405163c730333f60e01b8152600401610e3991815260200190565b60405180910390fd5b50610e5383820361348a565b61348a565b82546001600160781b0319166001600160781b0391909116178255610e778361348a565b600183018054600f90610e9b908490600160781b90046001600160781b03166151bf565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550610ed284836133a490919063ffffffff16565b6005820154610eeb906001600160a01b031633856134bc565b604051838152339085907f69bb3893073d7a893f3933f3871309fc25acfc72e365b71f554d439a85b20e8b906020015b60405180910390a350505050565b5f818152600160205260408120610f49610f42826134e8565b829061357c565b9392505050565b6001600160a01b039081165f81815260046020908152604080832054835260019091529020600501549091161490565b5f828152600360205260408120610f97908361359b565b90505b92915050565b5f818152600160205260408120819081610fb9826134e8565b9050610fc582826135a6565b610fcf83836135c0565b935093505050915091565b5f828152600360205260408120610f9790836135f3565b5f610ffb33610d69565b6001600160a01b0387161580159061101b57506001600160a01b03851615155b801561102f57506001600160a01b03841615155b61104c5760405163e6c4247b60e01b815260040160405180910390fd5b60ff86166006118015906110645750601260ff871611155b6110815760405163e236476560e01b815260040160405180910390fd5b61108a87610f50565b156110a85760405163603c058b60e01b815260040160405180910390fd5b5f805481806110b6836151de565b909155506001600160a01b03808a165f90815260046020819052604091829020849055905163a467cc5960e01b81529293509087169163a467cc5991611102918591899189910161521e565b5f604051808303815f87803b158015611119575f5ffd5b505af115801561112b573d5f5f3e3d5ffd5b5050604051637aff437760e11b8152600481018490525f6024820181905260448201819052606482018190526084820181905292506001600160a01b038816915063f5fe86ee9060a401602060405180830381865afa158015611190573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b49190615237565b60408051610220810182525f8082526020820181905260ff8c1692820192909252606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152909150676765c793fa10079d601b1b90429061012081016112218461348a565b6001600160781b0316815260200161123885613607565b6001600160601b0316815260200161124f83613635565b64ffffffffff1681526020018c6001600160a01b03168152602001896001600160a01b031681526020015f6001600160a01b031681526020018a6001600160a01b031681526020015f6001600160c81b031681525060015f8681526020019081526020015f205f820151815f015f6101000a8154816001600160781b0302191690836001600160781b031602179055506020820151815f01600f6101000a8154816001600160781b0302191690836001600160781b031602179055506040820151815f01601e6101000a81548160ff021916908360ff1602179055506060820151816001015f6101000a8154816001600160781b0302191690836001600160781b03160217905550608082015181600101600f6101000a8154816001600160781b0302191690836001600160781b0316021790555060a0820151816002015f6101000a8154816001600160c81b03021916908360180b6001600160c81b0316021790555060c0820151816003015f6101000a8154816001600160781b0302191690836001600160781b0316021790555060e082015181600301600f6101000a8154816001600160781b0302191690836001600160781b0316021790555061010082015181600301601e6101000a81548161ffff021916908361ffff160217905550610120820151816004015f6101000a8154816001600160781b0302191690836001600160781b0316021790555061014082015181600401600f6101000a8154816001600160601b0302191690836001600160601b0316021790555061016082015181600401601b6101000a81548164ffffffffff021916908364ffffffffff160217905550610180820151816005015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506101a0820151816006015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506101c0820151816007015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506101e0820151816008015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550610200820151816009015f6101000a8154816001600160c81b0302191690836001600160c81b031602179055509050506115a3848a613661565b60405160ff8b1681526001600160a01b038c169085907f92fb402b777f3710166f15b30098f41042b439850df67d0195196d125458e7b39060200160405180910390a3604080516080810182526001600160a01b03808c1682525f60208301819052908b16828401526060820152905185915f51602061565f5f395f51905f529161162e9190614ebf565b60405180910390a260408051838152602081018590525f81830152905185915f51602061567f5f395f51905f52919081900360600190a250919998505050505050505050565b5f828152600160205260408120610f9790836136a7565b5f818152600160205260408120610f9a906136bb565b6116aa33610d69565b5f5484106116cb5760405163b77e1e0f60e01b815260040160405180910390fd5b5f8481526001602052604090206116e181613143565b6127106116f4604086016020870161525f565b61ffff1611156117175760405163e15e46cb60e01b815260040160405180910390fd5b5f6117256020860186614c04565b6001600160a01b03161415801561175457505f6117486060860160408701614c04565b6001600160a01b031614155b6117715760405163e6c4247b60e01b815260040160405180910390fd5b5f6117826080860160608701614c04565b6001600160a01b03161415806117aa57506001810154600160781b90046001600160781b0316155b6117c7576040516391eaafa160e01b815260040160405180910390fd5b6117d7604085016020860161525f565b60038201805461ffff92909216600160f01b026001600160f01b0390921691909117905561180b6080850160608601614c04565b6007820180546001600160a01b0319166001600160a01b0392831617905560088201541661183c6020860186614c04565b6001600160a01b0316816001600160a01b0316146119095761185e828761321b565b50611867614b8a565b5f8781526002602081815260408084206001600160a01b0387168086528184529185209093015460ff600160e01b820481161515606088015291909452919052600160e81b90910416151560808201526118c287838361377c565b6118cf6020870187614c04565b6008840180546001600160a01b0319166001600160a01b0392909216919091179055611907876119026020890189614c04565b613661565b505b60068201546001600160a01b03166119276060870160408801614c04565b6001600160a01b0316146119d8576119456060860160408701614c04565b6006830180546001600160a01b0319166001600160a01b03929092169190911790556119776060860160408701614c04565b6001600160a01b031663a467cc598786866040518463ffffffff1660e01b81526004016119a69392919061521e565b5f604051808303815f87803b1580156119bd575f5ffd5b505af11580156119cf573d5f5f3e3d5ffd5b505050506119f7565b82156119f757604051631c56bc9960e11b815260040160405180910390fd5b611a0182876133a4565b855f51602061565f5f395f51905f5286604051611a1e9190615278565b60405180910390a2505050505050565b5f838152600160209081526040808320600283528184203385529092528220611a5682613143565b611a668282878760400135613874565b5f611a74610e4e8488613965565b60038401805491925082915f90611a959084906001600160781b03166152df565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555080825f015f8282829054906101000a90046001600160781b0316611add91906152df565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550611b0c838387613979565b5f611b1a8660400135613ad1565b84549091505f908290611b37908a906001600160781b03166152fe565b611b4191906152fe565b60058601546040516370a0823160e01b81529192505f916001600160a01b03909116906370a0823190611b78903090600401614c2a565b602060405180830381865afa158015611b93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb79190615237565b905080820382821015611be0576040516380561eeb60e01b8152600401610e3991815260200190565b50611bea8261348a565b86546001600160781b0319166001600160781b0391909116178655611c0f868b6133a4565b336001600160a01b03168a7f119e7f996dc987b3ae79eb3735f1620c4292f6a7761a1e0f834c445f7798b912868b8d88604051611c4f949392919061532a565b60405180910390a35050506001600160781b03169695505050505050565b5f82815260016020908152604080832060028352818420338552909252909120611c9682613143565b6002810154600160e01b900460ff16611cc257604051637437d01960e11b815260040160405180910390fd5b604083013515611ce55760405163a664e07560e01b815260040160405180910390fd5b611cf0828285613979565b611cfa82856133a4565b336001600160a01b0316847f3fa96ecf17429fddfbb919a64196f4e43f71b57f0c5c38c49a21c8e1e763d18c85604051610f1b9190615359565b5f828152600160205260408120610f979083613ae8565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220829190611d808282613afc565b611d8a8383613b14565b9350935050505b9250929050565b5f81815260016020526040812060038101546002820154610f4991600160781b90046001600160781b03169060180b611dd0846134e8565b613b22565b5f818152600360205260408120610f9a90613b48565b5f828152600160205260408120610f979083613b51565b5f548210611e235760405163b77e1e0f60e01b815260040160405180910390fd5b5f828152600160205260409020611e3981613143565b611e44813384613435565b80545f90611e5c9084906001600160781b03166152fe565b60058301546040516370a0823160e01b81529192505f916001600160a01b03909116906370a0823190611e93903090600401614c2a565b602060405180830381865afa158015611eae573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ed29190615237565b905080820382821015611efb576040516380561eeb60e01b8152600401610e3991815260200190565b50611f058261348a565b83546001600160781b0319166001600160781b0391909116178355611f298461348a565b600184018054600f90611f4d908490600160781b90046001600160781b03166152df565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550611f8485846133a490919063ffffffff16565b604051848152339086907f566111831db1f090374baff3c3f9fc512084f5a9b8f5b199fb475d9c43a8013f9060200160405180910390a35050505050565b5f828152600160209081526040808320600283528184203385529092528220611fea82613143565b611ff5828286613b5e565b81545f9061200d9086906001600160781b03166152fe565b60058401546040516370a0823160e01b81529192505f916001600160a01b03909116906370a0823190612044903090600401614c2a565b602060405180830381865afa15801561205f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120839190615237565b9050808203828210156120ac576040516380561eeb60e01b8152600401610e3991815260200190565b505f6120bb610e4e8689613c58565b90505f816001600160781b0316116120e657604051636edcc52360e01b815260040160405180910390fd5b6001850180548291905f906121059084906001600160781b03166151bf565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555080846002015f8282829054906101000a90046001600160781b031661214e91906151bf565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555061217b8361348a565b85546001600160781b0319166001600160781b03919091161785556121a085896133a4565b336001600160a01b0316887fb233dd05ed21346e144167b35a6213bcf04768dbdffdc8339e8b027b94b9f305838a6040516121dc929190615367565b60405180910390a36001600160781b0316979650505050505050565b3361220161296d565b6001600160a01b0316816001600160a01b031614612233578060405162d1953b60e31b8152600401610e399190614c2a565b816001600160a01b03163b5f0361225f57816040516361798f2f60e11b8152600401610e399190614c2a565b61226882613c7b565b5050565b5f828152600160205260408120610f979083613cdc565b5f8281526001602090815260408083206008810154600284528285206001600160a01b039091168086529352818420338552919093206122c284613143565b6122cc8186613cff565b6122d7818387613d4b565b6122e184876133a4565b826001600160a01b0316336001600160a01b0316875f51602061563f5f395f51905f528860405161231491815260200190565b60405180910390a4505050505050565b5f838152600160209081526040808320600283528184203385528084528285206001600160a01b03871686529352922061235d83613143565b61236983838388613de2565b612374828287613d4b565b61237e83876133a4565b836001600160a01b0316336001600160a01b0316875f51602061563f5f395f51905f528860405161231491815260200190565b5f818152600160205260408120610f49836123cb836134e8565b839190613f0a565b5f5f6123dd613fdc565b8054909150600160a01b900460ff166123f6575f6123ff565b638fb3603760e01b5b91505090565b5f8281526002602081815260408084206001600160a01b03861685528252808420909201548584526001909152908220610f97916001600160781b0316614000565b61245033610d69565b5f5483106124715760405163b77e1e0f60e01b815260040160405180910390fd5b5f83815260036020526040902061248890836135f3565b6124a557604051630aa1b05f60e41b815260040160405180910390fd5b6124be83836124b9368590038501856153b5565b61377c565b505050565b5f8381526001602090815260408083206002835281842033855290925282206124eb82613143565b6124f782828787614023565b81546001600160781b031680808711156125275760405163c730333f60e01b8152600401610e3991815260200190565b505f612536610e4e85896136a7565b60038501805491925082915f906125579084906001600160781b03166151bf565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555080835f015f8282829054906101000a90046001600160781b031661259f91906151bf565b92506101000a8154816001600160781b0302191690836001600160781b031602179055506125d9610e4e888461348590919063ffffffff16565b84546001600160781b0319166001600160781b03919091161784556125fe84896133a4565b6005840154612617906001600160a01b031687896134bc565b336001600160a01b0316887fe2497bc41b1fa7c4ba996f24dc2affdffb2a5571584db6db0eed8fbbf1dc8517838a6040516121dc929190615367565b61265c33610d69565b5f54831061267d5760405163b77e1e0f60e01b815260040160405180910390fd5b5f83815260016020526040902061269381613143565b600681015460405163a467cc5960e01b81526001600160a01b039091169063a467cc59906126c99087908790879060040161521e565b5f604051808303815f87803b1580156126e0575f5ffd5b505af11580156126f2573d5f5f3e3d5ffd5b5050505061270984826133a490919063ffffffff16565b50505050565b5f828152600160205260408120610f979083613965565b5f818152600160205260408120610f9a906134e8565b5f8061274733610d69565b5f858152600160209081526040808320600283528184203385528084528285206001600160a01b03891686529352922061278083613143565b60038101546001600160c81b03165f61279882613ad1565b89106127a457816127ad565b6127ad89614170565b90506127b9848261418c565b5f6127c382613ad1565b90505f6127d3610e4e88846141d8565b60018801805491925082915f906127f49084906001600160781b03166152df565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555080866002015f8282829054906101000a90046001600160781b031661283d91906152df565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555061286a836141fb565b6009880180545f906128869084906001600160c81b031661544e565b92506101000a8154816001600160c81b0302191690836001600160c81b031602179055506128b3836141fb565b6003860180545f906128cf9084906001600160c81b031661544e565b92506101000a8154816001600160c81b0302191690836001600160c81b031602179055506129068c886133a490919063ffffffff16565b896001600160a01b0316336001600160a01b03168d7fe97b8576ac531cdc817b933309d0518ca3d26c6b46d490f3ae9fa39426a141ee848760405161294c929190615367565b60405180910390a46001600160781b03169b909a5098505050505050505050565b5f5f612977613fdc565b546001600160a01b031692915050565b5f828152600160205260408120610f979083614000565b6129a733610d69565b5f5483106129c85760405163b77e1e0f60e01b815260040160405180910390fd5b6001600160a01b0382166129ef5760405163e6c4247b60e01b815260040160405180910390fd5b6124a58383614229565b60015f612a04614296565b8054909150600160401b900460ff1680612a2b575080546001600160401b03808416911610155b15612a495760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1781556001600160a01b038316612a8f5760405163e6c4247b60e01b815260040160405180910390fd5b612a98836142be565b805460ff60401b191681556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290612ad3908490614eab565b60405180910390a1505050565b5f838152600160209081526040808320600283528184203385529092528220829190612b0b82613143565b612b1b82828888604001356142d2565b5f612b29610e4e8489613965565b60038401805491925082915f90612b4a9084906001600160781b03166152df565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555080825f015f8282829054906101000a90046001600160781b0316612b9291906152df565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550612bc1838388613979565b60048301545f90604088013590612be5906001600160781b0390811690851661546d565b612bef91906152fe565b9050612bfa816141fb565b6009850180545f90612c169084906001600160c81b0316615484565b92506101000a8154816001600160c81b0302191690836001600160c81b03160217905550612c43816141fb565b6003840180545f90612c5f9084906001600160c81b0316615484565b92506101000a8154816001600160c81b0302191690836001600160c81b03160217905550612c9689856133a490919063ffffffff16565b336001600160a01b0316897f4845ee5c72bde2b62defc8a1ca2f0fc3313b2d9e799997ce4f6776da9773bcbf848a85604051612cd4939291906154a3565b60405180910390a381612ce682613ad1565b6001600160781b039091169650945050505050935093915050565b5f828152600160205260408120610f979083613c58565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220612d4a828261438d565b95945050505050565b5f612d5d82610f50565b612d7a5760405163b77e1e0f60e01b815260040160405180910390fd5b506001600160a01b03165f9081526004602052604090205490565b5f838152600160209081526040808320600283528184203385529092528220612dbd82613143565b612dc88186866143b8565b81546001600160781b03168080871115612df85760405163c730333f60e01b8152600401610e3991815260200190565b505f612e07610e4e85896141d8565b60018501805491925082915f90612e289084906001600160781b03166152df565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555080836002015f8282829054906101000a90046001600160781b0316612e7191906152df565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550612eab610e4e888461348590919063ffffffff16565b84546001600160781b0319166001600160781b0391909116178455612ed084896133a4565b6005840154612ee9906001600160a01b031687896134bc565b336001600160a01b0316887f535be2ff85ab4c5d0991e10dc057a4951ea2bac426ffb036eded23036a3942b2838a6040516121dc929190615367565b5f828152600160209081526040808320600283528184206001600160a01b03861685529092528220612f578282613b14565b612f618383613afc565b612d4a91906152fe565b5f818152600160205260408120612f8b612f84826134e8565b829061445a565b8154610f499190600160781b90046001600160781b03166152fe565b612faf614b8a565b505f8281526002602081815260408084206001600160a01b0386168552825292839020835160a08101855292015464ffffffffff600160781b820481168452600160a01b8204169183019190915262ffffff600160c81b8204169282019290925260ff600160e01b8304811615156060830152600160e81b9092049091161515608082015292915050565b5f828152600160205260408120610f9790836141d8565b5f61305a613fdc565b90505f5f61308661306961296d565b873061307860045f8a8c6154ce565b613081916154f5565b614534565b915091508161313b5763ffffffff81161561312157825460ff60a01b1916600160a01b1783556130b461296d565b6001600160a01b03166394c7d7ee8787876040518463ffffffff1660e01b81526004016130e39392919061552b565b5f604051808303815f87803b1580156130fa575f5ffd5b505af115801561310c573d5f5f3e3d5ffd5b5050845460ff60a01b191685555061313b9050565b8560405162d1953b60e31b8152600401610e399190614c2a565b505050505050565b600481015442600160d81b90910464ffffffffff16036131605750565b5f61316a826134e8565b9050613179610e4e838361445a565b82548390600f9061319b908490600160781b90046001600160781b03166151bf565b92506101000a8154816001600160781b0302191690836001600160781b031602179055506131c88161348a565b6004830180546001600160781b0319166001600160781b03929092169190911790556131f342613635565b82600401601b6101000a81548164ffffffffff021916908364ffffffffff1602179055505050565b81545f90600160781b90046001600160781b03168161323d610e4e8684613c58565b9050806001600160781b03165f03613259575f92505050610f9a565b60088501545f8581526002602081815260408084206001600160a01b039095168085529490915290912090810154600160e01b900460ff166132ae57604051637437d01960e11b815260040160405180910390fd5b6001870180548491905f906132cd9084906001600160781b03166151bf565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555082816002015f8282829054906101000a90046001600160781b031661331691906151bf565b82546001600160781b039182166101009390930a9283029190920219909116179055508654600160781b600160f01b03191687556040516001600160a01b0383169087907fafd21228e21de4a3f779e1cc3617e12672c3da091dcf3812a931036aa0bf633c906133899087908990615367565b60405180910390a350506001600160781b0316949350505050565b60048201546001600160781b03165f6133be848484613f0a565b90506133c981613607565b600485018054600160781b600160d81b031916600160781b6001600160601b0393909316830217905584546040805185815260208101859052929091046001600160781b03169082015283905f51602061567f5f395f51905f529060600160405180910390a250505050565b60078301546001600160a01b0383811691161461346557604051631e35bba360e11b815260040160405180910390fd5b5f81116124be5760405163162908e360e11b815260040160405180910390fd5b900390565b5f6001600160781b038211156134b8576078826040516306dfcc6560e41b8152600401610e3992919061554f565b5090565b6134c983838360016145c6565b6124be5782604051635274afe760e01b8152600401610e399190614c2a565b60048101545f906001600160781b03811690600160d81b900464ffffffffff164281148061353e575060038401546001600160781b031615801561353e57506003840154600160781b90046001600160781b0316155b1561354a575092915050565b60048401546135749061356d90600160781b90046001600160601b031683614628565b8390614655565b949350505050565b5f61358783836135c0565b61359184846135a6565b610f9791906152fe565b5f610f978383614683565b60038201545f90610f97906001600160781b031683614655565b600382015460028301545f91610f97916135ee91600160781b90046001600160781b03169060180b85613b22565b613ad1565b5f610f97836001600160a01b0384166146a9565b5f6001600160601b038211156134b8576060826040516306dfcc6560e41b8152600401610e3992919061554f565b5f64ffffffffff8211156134b8576028826040516306dfcc6560e41b8152600401610e3992919061554f565b61366b8282614229565b6040805160a08101825264ffffffffff81525f60208201819052918101829052600160608201526080810191909152612268908390839061377c565b5f610f976136b4846134e8565b83906146c0565b5f5f6136c6836134e8565b6003840154600285015460098601549293505f9261370a926001600160781b0380821693600160781b909204169160189190910b906001600160c81b031686614702565b9050613716848361445a565b8454600160781b90046001600160781b031661373183613ad1565b60018701548754613755916001600160781b03600160781b909104811691166151bf565b6001600160781b031661376891906152fe565b6137729190615562565b6135749190615562565b5f8381526002602081815260408084206001600160a01b03871680865290835293819020855193810180549387015187840151606089015160808a0151600160781b600160c81b0319909716600160781b64ffffffffff998a160264ffffffffff60a01b191617600160a01b98909316979097029190911763ffffffff60c81b1916600160c81b62ffffff9092169190910260ff60e01b191617600160e01b951515959095029490941760ff60e81b1916600160e81b9315159390930292909217909255905190919085907f90984699e37aaae5f79c2f33e480f273509662005a8ff82a17b325eb7072454e90610f1b908690615086565b5f82118061388157505f81115b61389e5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff166138ca57604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff16156138f757604051639db9b35560e01b815260040160405180910390fd5b5f6139028585613afc565b90505f61390f868661438d565b90508180851115613936576040516325ecf23b60e11b8152600401610e3991815260200190565b50808084111561395c57604051636e43412360e11b8152600401610e3991815260200190565b50505050505050565b5f610f97613972846134e8565b839061473c565b6004830154600384015460028501546001600160781b03928316926139af928492600160781b9091049091169060180b85614776565b6002860180546001600160c81b0319166001600160c81b0392909216919091179055600385018054600160781b600160f01b031916600160781b6001600160781b0393841681029190911790915584546001860154613a1a9385939092049091169060180b85614776565b6001850180546001600160c81b039092166001600160c81b031990921691909117905583546001600160781b03909116600160781b02600160781b600160f01b0319909116178355600283015462ffffff600160c81b909104811690811480613aad57508354613a98906001600160781b031662ffffff8316614803565b8454600160781b90046001600160781b031611155b613aca5760405163a664e07560e01b815260040160405180910390fd5b5050505050565b676765c793fa10079d601b1b808204910615150190565b5f610f97613af5846134e8565b8390614828565b80545f90610f979084906001600160781b0316613b51565b5f610f976135ee848461438d565b5f61357483613b39613b34858861546d565b61484e565b613b439190615575565b61487a565b5f610f9a825490565b5f610f9761356d846134e8565b5f8111613b7e5760405163162908e360e11b815260040160405180910390fd5b6002820154600160e01b900460ff16613baa57604051637437d01960e11b815260040160405180910390fd5b6002820154600160e81b900460ff1615613bd757604051639db9b35560e01b815260040160405180910390fd5b600282015464ffffffffff600160781b909104811690811480613c36575060028301548290613c109086906001600160781b0316613cdc565b613c1a91906152fe565b8454600160f01b900460ff16600a0a613c33908361546d565b10155b8190613aca57604051636f1fe35760e11b8152600401610e3991815260200190565b5f610f97613c65846136bb565b60018501548491906001600160781b031661489f565b5f613c84613fdc565b80546001600160a01b0319166001600160a01b0384161781556040519091507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90613cd0908490614c2a565b60405180910390a15050565b5f610f97613ce9846136bb565b60018501548491906001600160781b03166148c6565b6002820154600160e01b900460ff16613d2b57604051637437d01960e11b815260040160405180910390fd5b5f811161226857604051636edcc52360e01b815260040160405180910390fd5b613d548161348a565b6002840180545f90613d709084906001600160781b03166152df565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550613d9d8161348a565b6002830180545f90613db99084906001600160781b03166151bf565b92506101000a8154816001600160781b0302191690836001600160781b03160217905550505050565b6002830154600160e01b900460ff168015613e0857506002820154600160e01b900460ff165b613e2557604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff16158015613e4d57506002820154600160e81b900460ff16155b613e6a57604051639db9b35560e01b815260040160405180910390fd5b5f8111613e8a57604051636edcc52360e01b815260040160405180910390fd5b600282015464ffffffffff600160781b909104811690811480613ee857506002830154613ecc90613ec59084906001600160781b03166152fe565b8690613cdc565b8554600160f01b900460ff16600a0a613ee5908361546d565b10155b819061313b57604051636f1fe35760e11b8152600401610e3991815260200190565b600683015483545f916001600160a01b03169063f5fe86ee9085906001600160781b0316613f3888876135a6565b6009890154613f4f906001600160c81b0316613ad1565b60018a015460405160e087901b6001600160e01b031916815260048101959095526001600160781b03938416602486015260448501929092526064840152600160781b900416608482015260a401602060405180830381865afa158015613fb8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135749190615237565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0090565b5f610f9761400d846136bb565b60018501548491906001600160781b03166148ee565b306001600160a01b0382160361404c5760405163e6c4247b60e01b815260040160405180910390fd5b5f821161406c5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff1661409857604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff16156140c557604051639db9b35560e01b815260040160405180910390fd5b6002830154600160a01b900464ffffffffff165f6140e38686613b14565b6140ed8787613afc565b6140f791906152fe565b905064ffffffffff82148061414e5750600385015461411e906001600160c81b0316613ad1565b61412885836152fe565b61413291906152fe565b8654600160f01b900460ff16600a0a61414b908461546d565b10155b829061395c576040516303ad30dd60e41b8152600401610e3991815260200190565b676765c793fa10079d601b1b8181029081048214610dc2575f5ffd5b6002820154600160e01b900460ff166141b857604051637437d01960e11b815260040160405180910390fd5b5f81116122685760405163162908e360e11b815260040160405180910390fd5b5f610f976141e5846136bb565b60018501548491906001600160781b031661490c565b5f6001600160c81b038211156134b85760c8826040516306dfcc6560e41b8152600401610e3992919061554f565b5f828152600360205260409020614240908261492a565b61425d576040516304c9458360e01b815260040160405180910390fd5b6040516001600160a01b0382169083907f47acdb603dbca71028fbd9b37192e17a62e64fa160e2e607eef3853b792ea5ab905f90a35050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610f9a565b6142c661493e565b6142cf81614965565b50565b5f8211806142df57505f81115b6142fc5760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff1661432857604051637437d01960e11b815260040160405180910390fd5b5f6143338585613afc565b90505f614340868661438d565b90508180851115614367576040516304ddd91f60e01b8152600401610e3991815260200190565b50808084111561395c576040516337f3f9b760e01b8152600401610e3991815260200190565b805460018201545f91610f9791600160781b9091046001600160781b03169060180b611dd0866134e8565b306001600160a01b038216036143e15760405163e6c4247b60e01b815260040160405180910390fd5b5f82116144015760405163162908e360e11b815260040160405180910390fd5b6002830154600160e01b900460ff1661442d57604051637437d01960e11b815260040160405180910390fd5b6002830154600160e81b900460ff16156124be57604051639db9b35560e01b815260040160405180910390fd5b60048201545f906001600160781b031682810361447a575f915050610f9a565b6003840154600160f01b900461ffff165f81900361449c575f92505050610f9a565b6003850154600286015460098701546001600160781b0380841693600160781b9004169160180b906001600160c81b03165f6144db858585858d614702565b90505f6144fd866001600160781b0316866001600160781b031686868c614702565b90506145258761450c83613ad1565b61451585613ad1565b61451f9190615562565b90614976565b9b9a5050505050505050505050565b6040516001600160a01b038085166024830152831660448201526001600160e01b0319821660648201525f908190819060840160408051601f19818403018152918152602080830180516001600160e01b031663b700961360e01b1781525f808052918290528351939450919290918a5afa156145bc575f516020805191945081901c150291505b5094509492505050565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661461c578383151615614610573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f42821115614635575f5ffd5b506301e1338042919091039190910204676765c793fa10079d601b1b0190565b5f815f1904831115821517614668575f5ffd5b50676765c793fa10079d601b1b910281810491900615150190565b5f825f01828154811061469857614698615594565b905f5260205f200154905092915050565b5f9081526001919091016020526040902054151590565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e028841117156146e5575f5ffd5b50676765c793fa10079d601b1b9190910281810491900615150190565b5f5f61470f868685613b22565b9050838161471d858a61546d565b61472791906152fe565b61473191906152fe565b979650505050505050565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e02884111715614761575f5ffd5b50676765c793fa10079d601b1b919091020490565b5f5f5f614784868689613b22565b90505f614792878635614993565b90505f6147a36020870135886155a8565b90505f6147b183838c613b22565b9050836147c26040890135836152fe565b146147e05760405163a664e07560e01b815260040160405180910390fd5b6147e98361348a565b6147f2836149bf565b955095505050505094509492505050565b5f815f1904831115821517614816575f5ffd5b50612710910281810491900615150190565b5f815f190483111582151761483b575f5ffd5b50676765c793fa10079d601b1b91020490565b5f6001600160ff1b038211156134b85760405163123baf0360e11b815260048101839052602401610e39565b5f5f8212156134b857604051635467221960e11b815260048101839052602401610e39565b5f6135746148b0620f4240846152fe565b6148bd620f4240866152fe565b8691905f6149e9565b5f6135746148d7620f4240856152fe565b6148e4620f4240856152fe565b86919060016149e9565b5f6135746148ff620f4240856152fe565b6148bd620f4240856152fe565b5f61357461491d620f4240846152fe565b6148e4620f4240866152fe565b5f610f97836001600160a01b038416614a21565b614946614a68565b61496357604051631afcd79f60e31b815260040160405180910390fd5b565b61496d61493e565b6142cf81613c7b565b5f815f1904831115821517614989575f5ffd5b5061271091020490565b5f5f82126149ac576149a582846152fe565b9050610f9a565b6149b5826155cf565b610f979084615562565b80601881900b8114610dc25760c88260405163327269a760e01b8152600401610e3992919061554f565b5f614a166149f683614a81565b8015614a1157505f8480614a0c57614a0c6155e9565b868809115b151590565b612f61868686614aad565b5f614a2c83836146a9565b614a6157508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610f9a565b505f610f9a565b5f614a71614296565b54600160401b900460ff16919050565b5f6002826003811115614a9657614a966155fd565b614aa09190615611565b60ff166001149050919050565b5f5f5f614aba8686614b5d565b91509150815f03614ade57838181614ad457614ad46155e9565b0492505050610f49565b818411614af557614af56003851502601118614b79565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6040805160a0810182525f8082526020820181905291810182905260608101829052608081019190915290565b5f60208284031215614bc7575f5ffd5b5035919050565b5f5f60408385031215614bdf575f5ffd5b50508035926020909101359150565b80356001600160a01b0381168114610dc2575f5ffd5b5f60208284031215614c14575f5ffd5b610f9782614bee565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b5f5f60408385031215614c4f575f5ffd5b82359150614c5f60208401614bee565b90509250929050565b5f5f83601f840112614c78575f5ffd5b5081356001600160401b03811115614c8e575f5ffd5b602083019150836020828501011115611d91575f5ffd5b5f5f5f5f5f5f60a08789031215614cba575f5ffd5b614cc387614bee565b9550602087013560ff81168114614cd8575f5ffd5b9450614ce660408801614bee565b9350614cf460608801614bee565b925060808701356001600160401b03811115614d0e575f5ffd5b614d1a89828a01614c68565b979a9699509497509295939492505050565b5f5f5f5f84860360c0811215614d40575f5ffd5b853594506080601f1982011215614d55575f5ffd5b5060208501925060a08501356001600160401b03811115614d74575f5ffd5b614d8087828801614c68565b95989497509550505050565b5f60608284031215614d9c575f5ffd5b50919050565b5f5f5f60a08486031215614db4575f5ffd5b8335925060208401359150614dcc8560408601614d8c565b90509250925092565b5f5f60808385031215614de6575f5ffd5b82359150614c5f8460208501614d8c565b5f5f5f60608486031215614e09575f5ffd5b8335925060208401359150614dcc60408501614bee565b5f5f5f83850360e0811215614e33575f5ffd5b84359350614e4360208601614bee565b925060a0603f1982011215614e56575f5ffd5b506040840190509250925092565b5f5f5f60408486031215614e76575f5ffd5b8335925060208401356001600160401b03811115614e92575f5ffd5b614e9e86828701614c68565b9497909650939450505050565b6001600160401b0391909116815260200190565b81516001600160a01b03908116825260208084015161ffff1690830152604080840151821690830152606092830151169181019190915260800190565b6001600160781b03169052565b6001600160c81b03169052565b5f61022082019050614f29828451614efc565b6020830151614f3b6020840182614efc565b506040830151614f50604084018260ff169052565b506060830151614f636060840182614efc565b506080830151614f766080840182614efc565b5060a0830151614f8b60a084018260180b9052565b5060c0830151614f9e60c0840182614efc565b5060e0830151614fb160e0840182614efc565b50610100830151614fc961010084018261ffff169052565b50610120830151614fde610120840182614efc565b50610140830151614ffb6101408401826001600160601b03169052565b5061016083015161501661016084018264ffffffffff169052565b5061018083015161502b610180840182614c1d565b506101a08301516150406101a0840182614c1d565b506101c08301516150556101c0840182614c1d565b506101e083015161506a6101e0840182614c1d565b5061020083015161507f610200840182614f09565b5092915050565b5f60a08201905064ffffffffff835116825264ffffffffff602084015116602083015262ffffff604084015116604083015260608301511515606083015260808301511515608083015292915050565b5f610140820190506150e9828451614efc565b60208301516150fb6020840182614efc565b506040830151615110604084018260180b9052565b5060608301516151236060840182614efc565b50608083015161513c608084018264ffffffffff169052565b5060a083015161515560a084018264ffffffffff169052565b5060c083015161516c60c084018262ffffff169052565b5060e083015161518060e084018215159052565b5061010083015161519661010084018215159052565b5061012083015161507f610120840182614f09565b634e487b7160e01b5f52601160045260245ffd5b6001600160781b038181168382160190811115610f9a57610f9a6151ab565b5f600182016151ef576151ef6151ab565b5060010190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b838152604060208201525f612d4a6040830184866151f6565b5f60208284031215615247575f5ffd5b5051919050565b803561ffff81168114610dc2575f5ffd5b5f6020828403121561526f575f5ffd5b610f978261524e565b608081016001600160a01b0361528d84614bee565b16825261ffff61529f6020850161524e565b1660208301526001600160a01b036152b960408501614bee565b1660408301526001600160a01b036152d360608501614bee565b16606083015292915050565b6001600160781b038281168282160390811115610f9a57610f9a6151ab565b80820180821115610f9a57610f9a6151ab565b8035825260208082013590830152604090810135910152565b6001600160781b038516815260c081016153476020830186615311565b608082019390935260a0015292915050565b60608101610f9a8284615311565b6001600160781b03929092168252602082015260400190565b803564ffffffffff81168114610dc2575f5ffd5b803562ffffff81168114610dc2575f5ffd5b80358015158114610dc2575f5ffd5b5f60a08284031280156153c6575f5ffd5b5060405160a081016001600160401b03811182821017156153f557634e487b7160e01b5f52604160045260245ffd5b60405261540183615380565b815261540f60208401615380565b602082015261542060408401615394565b6040820152615431606084016153a6565b6060820152615442608084016153a6565b60808201529392505050565b6001600160c81b038281168282160390811115610f9a57610f9a6151ab565b8082028115828204841417610f9a57610f9a6151ab565b6001600160c81b038181168382160190811115610f9a57610f9a6151ab565b6001600160781b038416815260a081016154c06020830185615311565b826080830152949350505050565b5f5f858511156154dc575f5ffd5b838611156154e8575f5ffd5b5050820193919092039150565b80356001600160e01b0319811690600484101561507f576001600160e01b031960049490940360031b84901b1690921692915050565b6001600160a01b03841681526040602082018190525f90612d4a90830184866151f6565b60ff929092168252602082015260400190565b81810381811115610f9a57610f9a6151ab565b8181035f83128015838313168383128216171561507f5761507f6151ab565b634e487b7160e01b5f52603260045260245ffd5b8082018281125f8312801582168215821617156155c7576155c76151ab565b505092915050565b5f600160ff1b82016155e3576155e36151ab565b505f0390565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f60ff83168061562f57634e487b7160e01b5f52601260045260245ffd5b8060ff8416069150509291505056fe0d93b0e8579bc9db73c85a1fb79d785ffc47f8e20d346253f809cc98c48292a0ea358cc423f2a5739a0914913452665f0a41d404780bfe9038844d2980e5b974a1facf110ded5028ee267fa3d5986f2aa4dc14230b79ffd27e95760f14883350