0 txs
0 calls
constructor
constructor(address tokenImplementation, address multiTokenImplementation, address protocolBeneficiary_, uint256 creationFee_, uint256 maxSteps)
functions
BURN_ADDRESS
viewfunction BURN_ADDRESS() view returns (address)
creationFee
viewfunction creationFee() view returns (uint256)
exists
viewfunction exists(address token) view returns (bool)
getDetail
viewfunction getDetail(address token) view returns (tuple detail)
getList
viewfunction getList(uint256 start, uint256 stop) view returns (tuple[] info)
getRefundForTokens
viewfunction getRefundForTokens(address token, uint256 tokensToBurn) view returns (uint256 refundAmount, uint256 royalty)
getReserveForToken
viewfunction getReserveForToken(address token, uint256 tokensToMint) view returns (uint256 reserveAmount, uint256 royalty)
getRoyaltyInfo
viewfunction getRoyaltyInfo(address wallet, address reserveToken) view returns (uint256, uint256)
getSteps
viewfunction getSteps(address token) view returns (tuple[])
getTokensByCreator
viewfunction getTokensByCreator(address creator, uint256 start, uint256 stop) view returns (address[] addresses)
getTokensByReserveToken
viewfunction getTokensByReserveToken(address reserveToken, uint256 start, uint256 stop) view returns (address[] addresses)
maxRoyaltyRange
viewfunction maxRoyaltyRange() view returns (uint256)
maxSupply
viewfunction maxSupply(address token) view returns (uint128)
owner
viewfunction owner() view returns (address)
priceForNextMint
viewfunction priceForNextMint(address token) view returns (uint128)
protocolBeneficiary
viewfunction protocolBeneficiary() view returns (address)
tokenBond
viewfunction tokenBond(address) view returns (address creator, uint16 mintRoyalty, uint16 burnRoyalty, uint40 createdAt, address reserveToken, uint256 reserveBalance)
tokenCount
viewfunction tokenCount() view returns (uint256)
tokens
viewfunction tokens(uint256) view returns (address)
userTokenRoyaltyBalance
viewfunction userTokenRoyaltyBalance(address, address) view returns (uint256)
userTokenRoyaltyClaimed
viewfunction userTokenRoyaltyClaimed(address, address) view returns (uint256)
version
purefunction version() pure returns (string)
burn
nonpayablefunction burn(address token, uint256 tokensToBurn, uint256 minRefund, address receiver) returns (uint256)
burnRoyalties
nonpayablefunction burnRoyalties(address reserveToken)
claimRoyalties
nonpayablefunction claimRoyalties(address reserveToken)
createMultiToken
payablefunction createMultiToken(tuple tp, tuple bp) payable returns (address)
createToken
payablefunction createToken(tuple tp, tuple bp) payable returns (address)
mint
nonpayablefunction mint(address token, uint256 tokensToMint, uint256 maxReserveAmount, address receiver) returns (uint256)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateBondCreator
nonpayablefunction updateBondCreator(address token, address creator)
updateCreationFee
nonpayablefunction updateCreationFee(uint256 amount)
updateMaxRoyaltyRange
nonpayablefunction updateMaxRoyaltyRange(uint256 ratio)
updateProtocolBeneficiary
nonpayablefunction updateProtocolBeneficiary(address protocolBeneficiary_)
events
BondCreatorUpdated
event BondCreatorUpdated(address indexed token, address indexed creator)
Burn
event Burn(address indexed token, address indexed user, address receiver, uint256 amountBurned, address indexed reserveToken, uint256 refundAmount)
CreationFeeUpdated
event CreationFeeUpdated(uint256 amount)
Mint
event Mint(address indexed token, address indexed user, address receiver, uint256 amountMinted, address indexed reserveToken, uint256 reserveAmount)
MultiTokenCreated
event MultiTokenCreated(address indexed token, string name, string symbol, string uri, address indexed reserveToken)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ProtocolBeneficiaryUpdated
event ProtocolBeneficiaryUpdated(address protocolBeneficiary)
RoyaltyClaimed
event RoyaltyClaimed(address indexed user, address reserveToken, uint256 amount)
RoyaltyRangeUpdated
event RoyaltyRangeUpdated(uint256 ratio)
TokenCreated
event TokenCreated(address indexed token, string name, string symbol, address indexed reserveToken)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
ERC1167FailedCreateClone
error ERC1167FailedCreateClone()
FailedInnerCall
error FailedInnerCall()
MCV2_Bond__CreationFeeTransactionFailed
error MCV2_Bond__CreationFeeTransactionFailed()
MCV2_Bond__ExceedMaxSupply
error MCV2_Bond__ExceedMaxSupply()
MCV2_Bond__ExceedTotalSupply
error MCV2_Bond__ExceedTotalSupply()
MCV2_Bond__InvalidConstructorParams
error MCV2_Bond__InvalidConstructorParams(string reason)
MCV2_Bond__InvalidCreationFee
error MCV2_Bond__InvalidCreationFee()
MCV2_Bond__InvalidCreatorAddress
error MCV2_Bond__InvalidCreatorAddress()
MCV2_Bond__InvalidCurrentSupply
error MCV2_Bond__InvalidCurrentSupply()
MCV2_BOND__InvalidPaginationParameters
error MCV2_BOND__InvalidPaginationParameters()
MCV2_Bond__InvalidReceiver
error MCV2_Bond__InvalidReceiver()
MCV2_Bond__InvalidReserveToken
error MCV2_Bond__InvalidReserveToken(string reason)
MCV2_Bond__InvalidStepParams
error MCV2_Bond__InvalidStepParams(string reason)
MCV2_Bond__InvalidTokenAmount
error MCV2_Bond__InvalidTokenAmount()
MCV2_Bond__InvalidTokenCreationParams
error MCV2_Bond__InvalidTokenCreationParams(string reason)
MCV2_Bond__PermissionDenied
error MCV2_Bond__PermissionDenied()
MCV2_Bond__SlippageLimitExceeded
error MCV2_Bond__SlippageLimitExceeded()
MCV2_Bond__TokenNotFound
error MCV2_Bond__TokenNotFound()
MCV2_Bond__TokenSymbolAlreadyExists
error MCV2_Bond__TokenSymbolAlreadyExists()
MCV2_Royalty__InvalidParams
error MCV2_Royalty__InvalidParams()
MCV2_Royalty__NothingToClaim
error MCV2_Royalty__NothingToClaim()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60e06040526113886003553480156200001757600080fd5b50604051620058c0380380620058c08339810160408190526200003a916200025f565b82823380806200006557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007081620001f2565b5050600180546001600160a01b0319166001600160a01b039384161790556002558516620000e25760405163643b81d760e01b815260206004820152601360248201527f746f6b656e496d706c656d656e746174696f6e0000000000000000000000000060448201526064016200005c565b6001600160a01b0384166200013b5760405163643b81d760e01b815260206004820152601860248201527f6d756c7469546f6b656e496d706c656d656e746174696f6e000000000000000060448201526064016200005c565b6001600160a01b038316620001945760405163643b81d760e01b815260206004820152601360248201527f70726f746f636f6c42656e65666963696172790000000000000000000000000060448201526064016200005c565b80600003620001d25760405163643b81d760e01b81526020600482015260086024820152676d6178537465707360c01b60448201526064016200005c565b6001600160a01b0394851660a0529290931660c0525060805250620002bc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200025a57600080fd5b919050565b600080600080600060a086880312156200027857600080fd5b620002838662000242565b9450620002936020870162000242565b9350620002a36040870162000242565b6060870151608090970151959894975095949392505050565b60805160a05160c0516155d4620002ec60003960006119d501526000610bb70152600061324b01526155d46000f3fe6080604052600436106102195760003560e01c8063995e5f921161011d578063c9cb204b116100b0578063f2fde38b1161007f578063f74bfe8e11610064578063f74bfe8e14610801578063fb8c13c814610821578063fccc28131461084157600080fd5b8063f2fde38b14610786578063f6a3d24e146107a657600080fd5b8063c9cb204b14610620578063cfc5562214610640578063d9fe0eae14610660578063dce0b4e41461077057600080fd5b8063a746ee2e116100ec578063a746ee2e14610586578063a9816b08146105b3578063ac4e9675146105e0578063c162c9161461060057600080fd5b8063995e5f92146104ec5780639c65003d146105195780639cc7becf146105515780639f181b5e1461057157600080fd5b8063715018a6116101b057806377e456cb1161017f57806385396d2b1161016457806385396d2b146104815780638da5cb5b14610494578063990e6005146104bf57600080fd5b806377e456cb1461042a578063840d885d1461044057600080fd5b8063715018a6146103a05780637348ed2f146103b5578063763e7da6146103d557806376a9864b146103f557600080fd5b806350801fb1116101ec57806350801fb1146102ce57806354fd4d50146103145780635a4d5311146103605780636fa237951461038057600080fd5b806307e329461461021e57806327e381a91461025457806330be6955146102765780634f64b2be146102ae575b600080fd5b34801561022a57600080fd5b5061023e6102393660046149df565b610857565b60405161024b9190614a12565b60405180910390f35b34801561026057600080fd5b5061027461026f366004614a6c565b610a90565b005b610289610284366004614a9f565b610b61565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161024b565b3480156102ba57600080fd5b506102896102c9366004614b0b565b610f47565b3480156102da57600080fd5b506103066102e9366004614b24565b600560209081526000928352604080842090915290825290205481565b60405190815260200161024b565b34801561032057600080fd5b50604080518082018252600781527f302e312e313230000000000000000000000000000000000000000000000000006020820152905161024b9190614bc5565b34801561036c57600080fd5b5061030661037b366004614bd8565b610f7e565b34801561038c57600080fd5b5061027461039b366004614b0b565b61119d565b3480156103ac57600080fd5b506102746111da565b3480156103c157600080fd5b506102746103d0366004614b0b565b6111ee565b3480156103e157600080fd5b506102746103f0366004614b24565b611267565b34801561040157600080fd5b50610415610410366004614c1e565b61138a565b6040805192835260208301919091520161024b565b34801561043657600080fd5b5061030660035481565b34801561044c57600080fd5b5061046061045b366004614a6c565b611859565b6040516fffffffffffffffffffffffffffffffff909116815260200161024b565b61028961048f366004614c48565b61197f565b3480156104a057600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610289565b3480156104cb57600080fd5b506001546102899073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104f857600080fd5b5061050c610507366004614a6c565b611b94565b60405161024b9190614ce3565b34801561052557600080fd5b50610306610534366004614b24565b600460209081526000928352604080842090915290825290205481565b34801561055d57600080fd5b5061046061056c366004614a6c565b611c46565b34801561057d57600080fd5b50600754610306565b34801561059257600080fd5b506105a66105a1366004614a6c565b611cb0565b60405161024b9190614e7f565b3480156105bf57600080fd5b506105d36105ce366004614efb565b611ed3565b60405161024b9190614f1d565b3480156105ec57600080fd5b506104156105fb366004614b24565b61208c565b34801561060c57600080fd5b5061027461061b366004614a6c565b6120df565b34801561062c57600080fd5b5061041561063b366004614c1e565b612224565b34801561064c57600080fd5b5061027461065b366004614a6c565b6126ac565b34801561066c57600080fd5b5061071861067b366004614a6c565b60066020526000908152604090208054600182015460029092015473ffffffffffffffffffffffffffffffffffffffff8083169374010000000000000000000000000000000000000000840461ffff90811694760100000000000000000000000000000000000000000000810490911693780100000000000000000000000000000000000000000000000090910464ffffffffff16929091169086565b6040805173ffffffffffffffffffffffffffffffffffffffff978816815261ffff9687166020820152949095169484019490945264ffffffffff919091166060830152909216608083015260a082015260c00161024b565b34801561077c57600080fd5b5061030660025481565b34801561079257600080fd5b506102746107a1366004614a6c565b61282b565b3480156107b257600080fd5b506107f16107c1366004614a6c565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526006602052604090206001015416151590565b604051901515815260200161024b565b34801561080d57600080fd5b5061030661081c366004614bd8565b612894565b34801561082d57600080fd5b5061023e61083c3660046149df565b612abb565b34801561084d57600080fd5b5061028961dead81565b6060818310158061087257506127106108708484614fcc565b115b156108a9576040517f891724d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754808311156108b8578092505b6000845b84811015610941578673ffffffffffffffffffffffffffffffffffffffff1660066000600784815481106108f2576108f2614fdf565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff90811684529083019390935260409091019020600101541603610939578160010191505b6001016108bc565b508067ffffffffffffffff81111561095b5761095b61500e565b604051908082528060200260200182016040528015610984578160200160208202803683370190505b5092506000855b85811015610a85578773ffffffffffffffffffffffffffffffffffffffff1660066000600784815481106109c1576109c1614fdf565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff90811684529083019390935260409091019020600101541603610a7d5760078181548110610a1457610a14614fdf565b6000918252602090912001548551600184019373ffffffffffffffffffffffffffffffffffffffff9092169187918110610a5057610a50614fdf565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152818314610a85575b60010161098b565b505050509392505050565b610a98612ce3565b60015473ffffffffffffffffffffffffffffffffffffffff16610ae7576040517f5059b85f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fcf7686c0c53a1ab216c4cd81c1bc037136c791a61f30af4a78827c3915766044906020015b60405180910390a150565b60006002543414610b9e576040517f3403ce3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba783612d36565b610bb082612e25565b6000610be87f0000000000000000000000000000000000000000000000000000000000000000610be3602087018761503d565b613451565b90508073ffffffffffffffffffffffffffffffffffffffff8116637029144c610c11878061503d565b610c1e60208a018a61503d565b6040518563ffffffff1660e01b8152600401610c3d94939291906150eb565b600060405180830381600087803b158015610c5757600080fd5b505af1158015610c6b573d6000803e3d6000fd5b5050600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861617905550610cea90508285613508565b610cfa6060850160408601614a6c565b73ffffffffffffffffffffffffffffffffffffffff9081169083167f6596c1670eb3390048d23721809c3da5d3f531375ac0e2cab0f77a808ed64331610d40888061503d565b610d4d60208b018b61503d565b604051610d5d94939291906150eb565b60405180910390a3610d7260a085018561511d565b6000818110610d8357610d83614fdf565b9050602002016020810190610d989190615185565b6fffffffffffffffffffffffffffffffff16600003610e975773ffffffffffffffffffffffffffffffffffffffff8116631b5ad8b533610ddb608088018861511d565b6000818110610dec57610dec614fdf565b9050602002016020810190610e019190615185565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526fffffffffffffffffffffffffffffffff166024820152604401600060405180830381600087803b158015610e7e57600080fd5b505af1158015610e92573d6000803e3d6000fd5b505050505b60025415610f3d5760015460025460405160009273ffffffffffffffffffffffffffffffffffffffff1691908381818185875af1925050503d8060008114610efb576040519150601f19603f3d011682016040523d82523d6000602084013e610f00565b606091505b5050905080610f3b576040517f0d4d59b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5090505b92915050565b60078181548110610f5757600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600073ffffffffffffffffffffffffffffffffffffffff8216610fcd576040517fd9b08f7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610fda8787612224565b9150915084821015611018576040517f07728bb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff871660008181526006602052604080822081517ff4efe8f20000000000000000000000000000000000000000000000000000000081523360048201819052602482018c905292519194929363f4efe8f29260448084019382900301818387803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b5050505082846110bd91906151b7565b8260020160008282546110d09190614fcc565b9091555050815460018301546111009173ffffffffffffffffffffffffffffffffffffffff908116911685613a97565b600182015473ffffffffffffffffffffffffffffffffffffffff16611126818887613b59565b60018301546040805173ffffffffffffffffffffffffffffffffffffffff8a81168252602082018d905291810188905291811691848216918d16907f80a56de61873550ae491e454783a8dfc9d08a6f8bdace0887eabd4315c4b9da8906060015b60405180910390a4509298975050505050505050565b6111a5612ce3565b60028190556040518181527f88a973fd5506071e0cf878b30898776c47d5250a7ee1e6ee0b36df3b03c7c16a90602001610b56565b6111e2612ce3565b6111ec6000613bdf565b565b6111f6612ce3565b612710811115611232576040517f5059b85f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527f21085b3501e0e4fa8e0c825e7ed36b44420471b9f3c5aef447cebe50b2db133d90602001610b56565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600660205260409020805490911633146112ca576040517f36a0203800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611317576040517f67f61c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182178355604051908516907f9dcef3aa57f22970dfc6ff519e5421e041cc4153300a7dabe19bffe85e25568890600090a3505050565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260066020526040812060010154909182918591166113f1576040517f2d350e9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360000361142b576040517fc01ae10500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600660209081526040808320815160e0810183528154808716825261ffff7401000000000000000000000000000000000000000082048116838701527601000000000000000000000000000000000000000000008204168285015264ffffffffff780100000000000000000000000000000000000000000000000090910416606082015260018201549095166080860152600281015460a0860152600381018054835181860281018601909452808452949594919360c08601939290879084015b8282101561156857600084815260209081902060408051808201909152908401546fffffffffffffffffffffffffffffffff80821683527001000000000000000000000000000000009091041681830152825260019092019101611509565b5050505081525050905060008160c001519050600087905060008173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f191906151ca565b905060006115ff89836151b7565b905061160a8a611c46565b6fffffffffffffffffffffffffffffffff16811115611655576040517f6b5b0f7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c691906151e3565b6116d190600a615326565b905089600080806116e28f88613c54565b90505b88518110156117e757600089828151811061170257611702614fdf565b602002602001015190508781600001516fffffffffffffffffffffffffffffffff1661172e9190614fcc565b92508483101561179a578260000361174657506117d7565b61177181602001516fffffffffffffffffffffffffffffffff168461176b9190615335565b87613d0c565b61177b90856151b7565b935061178783896151b7565b97506117938386614fcc565b94506117d5565b6117bf81602001516fffffffffffffffffffffffffffffffff168661176b9190615335565b6117c990856151b7565b935060009450506117e7565b505b6117e08161534c565b90506116e5565b508115806117f55750600083115b1561182c576040517fc01ae10500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61183a828a60200151613d5c565b9a506118468b836151b7565b9b50505050505050505050509250929050565b6000808273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb91906151ca565b90506118d683611c46565b6fffffffffffffffffffffffffffffffff168110156118fb576118f88161534c565b90505b60006119078483613c54565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602052604090206003018054919250908290811061194557611945614fdf565b60009182526020909120015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16949350505050565b600060025434146119bc576040517f3403ce3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119c583613d79565b6119ce82612e25565b6000611a017f0000000000000000000000000000000000000000000000000000000000000000610be3602087018761503d565b90508073ffffffffffffffffffffffffffffffffffffffff81166341e461a0611a2a878061503d565b611a3760208a018a61503d565b611a4460408c018c61503d565b6040518763ffffffff1660e01b8152600401611a6596959493929190615384565b600060405180830381600087803b158015611a7f57600080fd5b505af1158015611a93573d6000803e3d6000fd5b5050600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861617905550611b1290508285613508565b611b226060850160408601614a6c565b73ffffffffffffffffffffffffffffffffffffffff9081169083167f42d30c09380d6b8dbb77d95cae534a5c8fbf778789d87f58030bd74280437071611b68888061503d565b611b7560208b018b61503d565b611b8260408d018d61503d565b604051610d5d96959493929190615384565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600660209081526040808320600301805482518185028101850190935280835260609492939192909184015b82821015611c3b57600084815260209081902060408051808201909152908401546fffffffffffffffffffffffffffffffff80821683527001000000000000000000000000000000009091041681830152825260019092019101611bdc565b505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081206003018054611c7c90600190614fcc565b81548110611c8c57611c8c614fdf565b6000918252602090912001546fffffffffffffffffffffffffffffffff1692915050565b611d4760408051608080820183526000808352602080840182905284516101c081018652828152908101829052808501829052606080820181905292810183905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081018390526101808101929092526101a082015290918201908152602001606081525090565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600660209081526040808320815160e0810183528154808716825261ffff7401000000000000000000000000000000000000000082048116838701527601000000000000000000000000000000000000000000008204168285015264ffffffffff780100000000000000000000000000000000000000000000000090910416606082015260018201549095166080860152600281015460a0860152600381018054835181860281018601909452808452949594919360c08601939290879084015b82821015611e8457600084815260209081902060408051808201909152908401546fffffffffffffffffffffffffffffffff80821683527001000000000000000000000000000000009091041681830152825260019092019101611e25565b505050508152505090506040518060800160405280826020015161ffff168152602001826040015161ffff168152602001611ebe85613ee0565b81526020018260c00151815250915050919050565b60608183101580611eee57506103e8611eec8484614fcc565b115b15611f25576040517f891724d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075480831115611f34578092505b8383038067ffffffffffffffff811115611f5057611f5061500e565b60405190808252806020026020018201604052801561200c57816020015b604080516101c0810182526000808252602080830182905292820181905260608083018190526080830181905260a0830182905260c0830182905260e0830182905261010083018290526101208301829052610140830182905261016083018190526101808301526101a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611f6e5790505b5092506000855b85811015612082576120586007828154811061203157612031614fdf565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16613ee0565b855160018401938791811061206f5761206f614fdf565b6020908102919091010152600101612013565b5050505092915050565b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600460209081526040808320948616808452948252808320549383526005825280832094835293905291909120545b9250929050565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120549081900361214a576040517fbfa4e44600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff80831660008181526004602090815260408083209488168084529482528083208390559282526005815282822093825292909252812080548392906121a59084906151b7565b909155506121cc905073ffffffffffffffffffffffffffffffffffffffff84168383613b59565b6040805173ffffffffffffffffffffffffffffffffffffffff8581168252602082018490528416917fd1b893da855ca6a7c9cfbaff142da78c734a39d4811ad711fe7acfd6e5e433a4910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600660205260408120600101549091829185911661228b576040517f2d350e9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036122c5576040517fc01ae10500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600660209081526040808320815160e0810183528154808716825261ffff7401000000000000000000000000000000000000000082048116838701527601000000000000000000000000000000000000000000008204168285015264ffffffffff780100000000000000000000000000000000000000000000000090910416606082015260018201549095166080860152600281015460a0860152600381018054835181860281018601909452808452949594919360c08601939290879084015b8282101561240257600084815260209081902060408051808201909152908401546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000090910416818301528252600190920191016123a3565b5050505081525050905060008160c001519050600087905060008173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248b91906151ca565b9050808811156124c7576040517f4fffb8fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612514573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253891906151e3565b61254390600a615326565b9050600089816125538d86613c54565b90505b811561264857600081156125ae5787612570600184614fcc565b8151811061258057612580614fdf565b6020026020010151600001516fffffffffffffffffffffffffffffffff16866125a99190614fcc565b6125b0565b855b905060008184106125c157816125c3565b835b9050858984815181106125d8576125d8614fdf565b6020026020010151602001516fffffffffffffffffffffffffffffffff16826126019190615335565b61260b91906153cd565b61261590866151b7565b94506126218185614fcc565b935061262d8188614fcc565b965082156126415761263e83615408565b92505b5050612556565b8115612680576040517fc01ae10500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268e838960400151613d5c565b995061269a8a84614fcc565b9a505050505050505050509250929050565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd60205260408120549081900361272b576040517fbfa4e44600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd602090815260408083208390557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba909152812080548392906127ab9084906151b7565b909155506127d4905073ffffffffffffffffffffffffffffffffffffffff831661dead83613b59565b6040805173ffffffffffffffffffffffffffffffffffffffff841681526020810183905261dead917fd1b893da855ca6a7c9cfbaff142da78c734a39d4811ad711fe7acfd6e5e433a4910160405180910390a25050565b612833612ce3565b73ffffffffffffffffffffffffffffffffffffffff8116612888576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61289181613bdf565b50565b600073ffffffffffffffffffffffffffffffffffffffff82166128e3576040517fd9b08f7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806128f0878761138a565b915091508482111561292e576040517f07728bb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8781166000908152600660205260409020600181015490913391166129688486614fcc565b83600201600082825461297b91906151b7565b9091555050825460018401546129ab9173ffffffffffffffffffffffffffffffffffffffff908116911686613a97565b6040517f1b5ad8b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018b90528b1690631b5ad8b590604401600060405180830381600087803b158015612a1b57600080fd5b505af1158015612a2f573d6000803e3d6000fd5b50612a569250505073ffffffffffffffffffffffffffffffffffffffff8216833088614541565b60018301546040805173ffffffffffffffffffffffffffffffffffffffff8a81168252602082018d905291810188905291811691848216918d16907f02ed9b10d8b33a6a9fda664247bfd8f6248f74cff85cc84e56b7530c2fce560a90606001611187565b60608183101580612ad65750612710612ad48484614fcc565b115b15612b0d576040517f891724d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075480831115612b1c578092505b6000845b84811015612ba2578673ffffffffffffffffffffffffffffffffffffffff166006600060078481548110612b5657612b56614fdf565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff90811684529083019390935260409091019020541603612b9a578160010191505b600101612b20565b508067ffffffffffffffff811115612bbc57612bbc61500e565b604051908082528060200260200182016040528015612be5578160200160208202803683370190505b5092506000855b85811015610a85578773ffffffffffffffffffffffffffffffffffffffff166006600060078481548110612c2257612c22614fdf565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff90811684529083019390935260409091019020541603612cdb5760078181548110612c7257612c72614fdf565b6000918252602090912001548551600184019373ffffffffffffffffffffffffffffffffffffffff9092169187918110612cae57612cae614fdf565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152818314610a85575b600101612bec565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111ec576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161287f565b612d40818061503d565b9050600003612dad576040517f49d3358800000000000000000000000000000000000000000000000000000000815260040161287f9060208082526004908201527f6e616d6500000000000000000000000000000000000000000000000000000000604082015260600190565b612dba602082018261503d565b9050600003612891576040517f49d3358800000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f73796d626f6c0000000000000000000000000000000000000000000000000000604482015260640161287f565b600354612e35602083018361543d565b61ffff161115612ea1576040517f49d3358800000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6d696e74526f79616c7479000000000000000000000000000000000000000000604482015260640161287f565b600354612eb4604083016020840161543d565b61ffff161115612f20576040517f49d3358800000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6275726e526f79616c7479000000000000000000000000000000000000000000604482015260640161287f565b6000612f326060830160408401614a6c565b905073ffffffffffffffffffffffffffffffffffffffff8116612fb1576040517f49d3358800000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f72657365727665546f6b656e0000000000000000000000000000000000000000604482015260640161287f565b612ff2816040518060400160405280600a81526020017f646563696d616c73282900000000000000000000000000000000000000000000815250601f61458d565b613058576040517f59f5822400000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f646563696d616c73000000000000000000000000000000000000000000000000604482015260640161287f565b613099816040518060400160405280600681526020017f6e616d6528290000000000000000000000000000000000000000000000000000815250605f61458d565b613101576040517f59f5822400000000000000000000000000000000000000000000000000000000815260040161287f9060208082526004908201527f6e616d6500000000000000000000000000000000000000000000000000000000604082015260600190565b613142816040518060400160405280600881526020017f73796d626f6c2829000000000000000000000000000000000000000000000000815250605f61458d565b6131a8576040517f59f5822400000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f73796d626f6c0000000000000000000000000000000000000000000000000000604482015260640161287f565b6131b86080830160608401615185565b6fffffffffffffffffffffffffffffffff16600003613233576040517f49d3358800000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6d6178537570706c790000000000000000000000000000000000000000000000604482015260640161287f565b613240608083018361511d565b1590508061327b57507f0000000000000000000000000000000000000000000000000000000000000000613277608084018461511d565b9050115b156132e2576040517f1afd40d600000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e56414c49445f535445505f4c454e47544800000000000000000000000000604482015260640161287f565b6132ef60a083018361511d565b90506132fe608084018461511d565b905014613367576040517f1afd40d600000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f535445505f4c454e4754485f444f5f4e4f545f4d415443480000000000000000604482015260640161287f565b6133776080830160608401615185565b6fffffffffffffffffffffffffffffffff16613396608084018461511d565b60016133a5608087018761511d565b6133b0929150614fcc565b8181106133bf576133bf614fdf565b90506020020160208101906133d49190615185565b6fffffffffffffffffffffffffffffffff161461344d576040517f1afd40d600000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d41585f535550504c595f4d49534d4154434800000000000000000000000000604482015260640161287f565b5050565b60008030848460405160200161346993929190615461565b604051602081830303815290604052805190602001209050600061348d8683614686565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526006602052604090206001015491925016156134f2576040517f358b663800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134fc86836146e6565b925050505b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260066020908152604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633178155906135659083018361543d565b815461ffff9190911674010000000000000000000000000000000000000000027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff9091161781556135bc604083016020840161543d565b81547fffffff00000000000000ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000061ffff92909216919091027fffffff0000000000ffffffffffffffffffffffffffffffffffffffffffffffff161778010000000000000000000000000000000000000000000000004264ffffffffff160217815561365c6060830160408401614a6c565b8160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370f91906151e3565b61371a90600a615326565b905060005b61372c608085018561511d565b9050811015613a90576000613744608086018661511d565b8381811061375457613754614fdf565b90506020020160208101906137699190615185565b6fffffffffffffffffffffffffffffffff169050600061378c60a087018761511d565b8481811061379c5761379c614fdf565b90506020020160208101906137b19190615185565b6fffffffffffffffffffffffffffffffff1690508160000361382f576040517f1afd40d600000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f535445505f43414e4e4f545f42455f5a45524f00000000000000000000000000604482015260640161287f565b6000811180156138475750836138458284615335565b105b156138ae576040517f1afd40d600000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f535445505f52414e475f4f525f50524943455f544f4f5f534d414c4c00000000604482015260640161287f565b8215613a20576138c1608087018761511d565b6138cc600186614fcc565b8181106138db576138db614fdf565b90506020020160208101906138f09190615185565b6fffffffffffffffffffffffffffffffff16821161396a576040517f1afd40d600000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f44454352454153494e475f52414e474500000000000000000000000000000000604482015260640161287f565b61397760a087018761511d565b613982600186614fcc565b81811061399157613991614fdf565b90506020020160208101906139a69190615185565b6fffffffffffffffffffffffffffffffff168111613a20576040517f1afd40d600000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f44454352454153494e475f505249434500000000000000000000000000000000604482015260640161287f565b604080518082019091526fffffffffffffffffffffffffffffffff928316815290821660208083019182526003870180546001810182556000918252919020925191518416700100000000000000000000000000000000029190931617910155613a898161534c565b905061371f565b5050505050565b6000612710613aa86107d084615335565b613ab291906153cd565b9050613abe8183614fcc565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260046020908152604080832093881683529290529081208054909190613b029084906151b7565b909155505060015473ffffffffffffffffffffffffffffffffffffffff908116600090815260046020908152604080832093871683529290529081208054839290613b4e9084906151b7565b909155505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052613bda91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061477a565b505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260408120815b6003820154811015613cd957816003018181548110613c9c57613c9c614fdf565b6000918252602090912001546fffffffffffffffffffffffffffffffff168411613cc9579150610f419050565b613cd28161534c565b9050613c7b565b506040517fd1ce01ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600003613d2757613d2082846153cd565b9050610f41565b8215613d535781613d39600185614fcc565b613d4391906153cd565b613d4e9060016151b7565b613501565b60009392505050565b6000612710613d6f61ffff841685615335565b61350191906153cd565b613d83818061503d565b9050600003613df0576040517f49d3358800000000000000000000000000000000000000000000000000000000815260040161287f9060208082526004908201527f6e616d6500000000000000000000000000000000000000000000000000000000604082015260600190565b613dfd602082018261503d565b9050600003613e68576040517f49d3358800000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f73796d626f6c0000000000000000000000000000000000000000000000000000604482015260640161287f565b613e75604082018261503d565b9050600003612891576040517f49d3358800000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f7572690000000000000000000000000000000000000000000000000000000000604482015260640161287f565b604080516101c08101825260008082526020820181905291810182905260608082018190526080820181905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820183905261016082018190526101808201526101a081019190915273ffffffffffffffffffffffffffffffffffffffff8083166000908152600660209081526040808320815160e0810183528154808716825261ffff7401000000000000000000000000000000000000000082048116838701527601000000000000000000000000000000000000000000008204168285015264ffffffffff780100000000000000000000000000000000000000000000000090910416606082015260018201549095166080860152600281015460a0860152600381018054835181860281018601909452808452889694929360c086019390929190879084015b8282101561408f57600084815260209081902060408051808201909152908401546fffffffffffffffffffffffffffffffff80821683527001000000000000000000000000000000009091041681830152825260019092019101614030565b50505050815250509050600081608001519050604051806101c00160405280836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015614135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415991906151e3565b60ff1681526020018473ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156141ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526141f291908101906154a0565b81526020018473ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015614242573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261428891908101906154a0565b8152602001836060015164ffffffffff1681526020016143158573ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061431091906151ca565b614810565b6fffffffffffffffffffffffffffffffff16815260200161433587611c46565b6fffffffffffffffffffffffffffffffff16815260200161435587611859565b6fffffffffffffffffffffffffffffffff168152602001836080015173ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143fb91906151e3565b60ff1681526020018273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561444e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261449491908101906154a0565b81526020018273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156144e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261452a91908101906154a0565b81526020018360a001518152509350505050919050565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526145879186918216906323b872dd90608401613b93565b50505050565b604080516004815260248101918290526000918291829173ffffffffffffffffffffffffffffffffffffffff881691906145c8908890615560565b60408051918290039091206020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009092169190911790525161462c9190615560565b600060405180830381855afa9150503d8060008114614667576040519150601f19603f3d011682016040523d82523d6000602084013e61466c565b606091505b50915091508180156134fc57505192909211949350505050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c82012060788201526055604390910120600090613501565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f5905073ffffffffffffffffffffffffffffffffffffffff8116610f41576040517fc2f868f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061479c73ffffffffffffffffffffffffffffffffffffffff84168361486a565b905080516000141580156147c15750808060200190518101906147bf919061557c565b155b15613bda576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161287f565b60006fffffffffffffffffffffffffffffffff821115614866576040517f6dfcc650000000000000000000000000000000000000000000000000000000008152608060048201526024810183905260440161287f565b5090565b606061350183836000846000808573ffffffffffffffffffffffffffffffffffffffff16848660405161489d9190615560565b60006040518083038185875af1925050503d80600081146148da576040519150601f19603f3d011682016040523d82523d6000602084013e6148df565b606091505b50915091506134fc8683836060826148fa57613d4e82614974565b815115801561491e575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561496d576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161287f565b5080613501565b8051156149845780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146149da57600080fd5b919050565b6000806000606084860312156149f457600080fd5b6149fd846149b6565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b81811015614a6057835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101614a2e565b50909695505050505050565b600060208284031215614a7e57600080fd5b613501826149b6565b600060c08284031215614a9957600080fd5b50919050565b60008060408385031215614ab257600080fd5b823567ffffffffffffffff80821115614aca57600080fd5b9084019060408287031215614ade57600080fd5b90925060208401359080821115614af457600080fd5b50614b0185828601614a87565b9150509250929050565b600060208284031215614b1d57600080fd5b5035919050565b60008060408385031215614b3757600080fd5b614b40836149b6565b9150614b4e602084016149b6565b90509250929050565b60005b83811015614b72578181015183820152602001614b5a565b50506000910152565b60008151808452614b93816020860160208601614b57565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006135016020830184614b7b565b60008060008060808587031215614bee57600080fd5b614bf7856149b6565b93506020850135925060408501359150614c13606086016149b6565b905092959194509250565b60008060408385031215614c3157600080fd5b614c3a836149b6565b946020939093013593505050565b60008060408385031215614c5b57600080fd5b823567ffffffffffffffff80821115614c7357600080fd5b9084019060608287031215614ade57600080fd5b600081518084526020808501945080840160005b83811015614cd857815180516fffffffffffffffffffffffffffffffff908116895290840151168388015260409096019590820190600101614c9b565b509495945050505050565b6020815260006135016020830184614c87565b805173ffffffffffffffffffffffffffffffffffffffff16825260006101c06020830151614d3c602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614d51604086018260ff169052565b506060830151816060860152614d6982860182614b7b565b91505060808301518482036080860152614d838282614b7b565b91505060a0830151614d9e60a086018264ffffffffff169052565b5060c0830151614dc260c08601826fffffffffffffffffffffffffffffffff169052565b5060e0830151614de660e08601826fffffffffffffffffffffffffffffffff169052565b50610100838101516fffffffffffffffffffffffffffffffff16908501526101208084015173ffffffffffffffffffffffffffffffffffffffff16908501526101408084015160ff16908501526101608084015185830382870152614e4b8382614b7b565b925050506101808084015185830382870152614e678382614b7b565b6101a095860151969095019590955250919392505050565b60208152600061ffff80845116602084015280602085015116604084015250604083015160806060840152614eb760a0840182614cf6565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016080850152614ef28282614c87565b95945050505050565b60008060408385031215614f0e57600080fd5b50508035926020909101359150565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614f90577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614f7e858351614cf6565b94509285019290850190600101614f44565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610f4157610f41614f9d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261507257600080fd5b83018035915067ffffffffffffffff82111561508d57600080fd5b6020019150368190038213156120d857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040815260006150ff6040830186886150a2565b82810360208401526151128185876150a2565b979650505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261515257600080fd5b83018035915067ffffffffffffffff82111561516d57600080fd5b6020019150600581901b36038213156120d857600080fd5b60006020828403121561519757600080fd5b81356fffffffffffffffffffffffffffffffff8116811461350157600080fd5b80820180821115610f4157610f41614f9d565b6000602082840312156151dc57600080fd5b5051919050565b6000602082840312156151f557600080fd5b815160ff8116811461350157600080fd5b600181815b8085111561525f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561524557615245614f9d565b8085161561525257918102915b93841c939080029061520b565b509250929050565b60008261527657506001610f41565b8161528357506000610f41565b816001811461529957600281146152a3576152bf565b6001915050610f41565b60ff8411156152b4576152b4614f9d565b50506001821b610f41565b5060208310610133831016604e8410600b84101617156152e2575081810a610f41565b6152ec8383615206565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561531e5761531e614f9d565b029392505050565b600061350160ff841683615267565b8082028115828204841417610f4157610f41614f9d565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361537d5761537d614f9d565b5060010190565b60608152600061539860608301888a6150a2565b82810360208401526153ab8187896150a2565b905082810360408401526153c08185876150a2565b9998505050505050505050565b600082615403577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008161541757615417614f9d565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60006020828403121561544f57600080fd5b813561ffff8116811461350157600080fd5b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b168152818360148301376000910160140190815292915050565b6000602082840312156154b257600080fd5b815167ffffffffffffffff808211156154ca57600080fd5b818401915084601f8301126154de57600080fd5b8151818111156154f0576154f061500e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156155365761553661500e565b8160405282815287602084870101111561554f57600080fd5b615112836020830160208801614b57565b60008251615572818460208701614b57565b9190910192915050565b60006020828403121561558e57600080fd5b8151801515811461350157600080fdfea2646970667358221220351f2ae368865a13555f41433ee16f0aa1dd76517a44783ab00fbe69435f844964736f6c63430008140033000000000000000000000000aa70bc79fd1cb4a6fba717018351f0c3c64b79df0000000000000000000000006c61918eeccc306d35247338fdcf025af0f6120a00000000000000000000000082ca6d313bffe56e9096b16633dfd414148d66b100000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000003e8