[ { "inputs": [], "stateMutability": "payable", "type": "constructor" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "DNAlreadyInitialized", "type": "error" }, { "inputs": [], "name": "ExchangeSameToken", "type": "error" }, { "inputs": [], "name": "ExchangeTokenLocked", "type": "error" }, { "inputs": [], "name": "InsufficientAllowance", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InsufficientBalanceToMaintainLockedTokens", "type": "error" }, { "inputs": [], "name": "InvalidOrderToken", "type": "error" }, { "inputs": [], "name": "InvalidSalePrice", "type": "error" }, { "inputs": [], "name": "InvalidSellerOrBuyer", "type": "error" }, { "inputs": [], "name": "InvalidUnit", "type": "error" }, { "inputs": [], "name": "LinkMirrorContractFailed", "type": "error" }, { "inputs": [], "name": "MirrorAddressIsZero", "type": "error" }, { "inputs": [], "name": "NewOwnerIsZeroAddress", "type": "error" }, { "inputs": [], "name": "NoHandoverRequest", "type": "error" }, { "inputs": [], "name": "SenderNotMirror", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TokenLockStatusNoChange", "type": "error" }, { "inputs": [], "name": "TokenNotLocked", "type": "error" }, { "inputs": [], "name": "TotalSupplyOverflow", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "inputs": [], "name": "UnauthorizedCallContext", "type": "error" }, { "inputs": [], "name": "UpgradeFailed", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "feeBips", "type": "uint256" } ], "name": "ExchangeMarketFeeSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "feeBips", "type": "uint256" } ], "name": "ListMarketFeeSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "RolesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "status", "type": "bool" } ], "name": "SkipNFTSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cancelOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "completeOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "getSkipNFT", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "grantRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAllRoles", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAnyRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "address", "name": "mirror", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "mirrorERC721", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "result", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "ownershipHandoverExpiresAt", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "renounceRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "requestOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "revokeRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "rolesOf", "outputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "baseURI_", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "feeBips", "type": "uint256" } ], "name": "setExchangeNFTFeeRate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "feeBips", "type": "uint256" } ], "name": "setListMarketNFTFeeRate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" } ], "name": "setNameAndSymbol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "skipNFT", "type": "bool" } ], "name": "setSkipNFT", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bool", "name": "state", "type": "bool" } ], "name": "setSkipNFTFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "result", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60a060405230608052601060016014565b606b565b638b78c6d819805415602d57630dc149f05f526004601cfd5b6001600160a01b03909116801560ff1b8117909155805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b608051615a0861008a5f395f81816139760152613aa90152615a085ff3fe608060405260043610610237575f3560e01c80634ef41efc11610137578063715018a6116100af578063c87b56dd1161007e578063f04e283e11610063578063f04e283e14610cb8578063f2fde38b14610ccb578063fee81cf414610cde5761023e565b8063c87b56dd14610c4d578063dd62ed3e14610c6c5761023e565b8063715018a614610bfa5780638da5cb5b14610c0257806395d89b4114610c1a578063a9059cbb14610c2e5761023e565b806352d1902d1161010657806355f804b3116100eb57806355f804b314610b705780635a44621514610b8f57806370a0823114610bae5761023e565b806352d1902d14610b5457806354d1f13d14610b685761023e565b80634ef41efc14610ab45780634f1ef28614610aed578063514e62fc14610b0057806351cff8d914610b355761023e565b806323705a2b116101ca5780632a495e03116101995780632de948071161017e5780632de9480714610a55578063313ce56714610a865780634a4ee7b114610aa15761023e565b80632a495e0314610a175780632a6a935d14610a365761023e565b806323705a2b146109b257806323b872dd146109d157806325692962146109f0578063274e430b146109f85761023e565b806318160ddd1161020657806318160ddd14610921578063183a4f6e146109575780631c10893f1461096a5780631cd64df41461097d5761023e565b806306fdde0314610896578063077f224a146108c057806307a19f72146108d3578063095ea7b3146108f25761023e565b3661023e57005b68a20d6e21d0e52553085f3560e01c63e5eb36c88190036102a45760018201546001600160a01b031633146102865760405163ce5a776b60e01b815260040160405180910390fd5b61029a600435602435604435606435610d0f565b6102a4600161117c565b8063813500fc036102f95760018201546001600160a01b031633146102dc5760405163ce5a776b60e01b815260040160405180910390fd5b6102ef6004356024351515604435611184565b6102f9600161117c565b80632c5966af0361035b5760018201546001600160a01b031633146103315760405163ce5a776b60e01b815260040160405180910390fd5b5f80806103456004356024356044356112bf565b925092509250825f52816020528060405260605ff35b8063b79cc1bd036103cc5760018201546001600160a01b031633146103935760405163ce5a776b60e01b815260040160405180910390fd5b6004356103c06103b06024355b6103ab906004615160565b6118c3565b60ff83161515606084901c6118ee565b6103ca600161117c565b505b80633e0446a1036104315760018201546001600160a01b031633146104045760405163ce5a776b60e01b815260040160405180910390fd5b600435610425606082901c61041a6024356103a0565b60ff84161515611cf9565b61042f600161117c565b505b806386529a61036104895760018201546001600160a01b031633146104695760405163ce5a776b60e01b815260040160405180910390fd5b61047f60043561047a6024356103a0565b6121b9565b610489600161117c565b806373e63d89036104ed5760018201546001600160a01b031633146104c15760405163ce5a776b60e01b815260040160405180910390fd5b6104e36004356104de6024355b6104d9906004615160565b612593565b61268e565b6104ed600161117c565b806353ffa071036105455760018201546001600160a01b031633146105255760405163ce5a776b60e01b815260040160405180910390fd5b61053b6004356105366024356104ce565b6128c8565b610545600161117c565b80632da2a8590361059d5760018201546001600160a01b0316331461057d5760405163ce5a776b60e01b815260040160405180910390fd5b61059360043561058e6024356103a0565b612d80565b61059d600161117c565b8063b5a1305b036105f55760018201546001600160a01b031633146105d55760405163ce5a776b60e01b815260040160405180910390fd5b6105eb6004356105e66024356104ce565b612e36565b6105f5600161117c565b8063b6ebe1030361064d5760018201546001600160a01b0316331461062d5760405163ce5a776b60e01b815260040160405180910390fd5b61064360043561063e6024356104ce565b6130d7565b61064d600161117c565b8063a38beee1036106a55760018201546001600160a01b031633146106855760405163ce5a776b60e01b815260040160405180910390fd5b61069b6004356106966024356103a0565b6132e0565b6106a5600161117c565b8063e985e9c5036106ec576001600160a01b036024358181165f90815260038501602090815260408083206004359586168452909152902080546106e89061117c565b5050505b80636352211e03610713576107136107056004356133d8565b6001600160a01b031661117c565b8063243598790361072c5761072c610705600435613412565b8063d10b6e0c0361078c5760018201546001600160a01b031633146107645760405163ce5a776b60e01b815260040160405180910390fd5b5f610776600435602435604435613465565b905061078a816001600160a01b031661117c565b505b8063f9b4b328036107d2576040805160200190526004355f6107bd606083901c60243560443560ff86161515613566565b90506020810360208152815160051b60400181f35b8063081812fc036107eb576107eb610705600435613660565b8063f5b100ea036108445761084461083f6004356001600160a01b03165f90815268a20d6e21d0e52553136020526040902054600160601b810463ffffffff908116600160801b9092048116919091011690565b61117c565b8063e2c79281036108705768a20d6e21d0e52553085461087090600160601b900463ffffffff1661117c565b8063c89e2ab1148061088557508063b7a94eb8145b1561089457610894600161117c565b005b3480156108a1575f80fd5b506108aa6136aa565b6040516108b79190615195565b60405180910390f35b6108946108ce36600461527c565b613739565b3480156108de575f80fd5b506108946108ed3660046152ff565b61376b565b3480156108fd575f80fd5b5061091161090c366004615330565b613792565b60405190151581526020016108b7565b34801561092c575f80fd5b5068a20d6e21d0e525530854600160801b90046001600160601b03165b6040519081526020016108b7565b610894610965366004615358565b6137a7565b610894610978366004615330565b6137b4565b348015610988575f80fd5b50610911610997366004615330565b638b78c6d8600c9081525f9290925260209091205481161490565b3480156109bd575f80fd5b506108946109cc366004615358565b6137ca565b3480156109dc575f80fd5b506109116109eb36600461536f565b6137ea565b61089461388d565b348015610a03575f80fd5b50610911610a123660046153a9565b6138da565b348015610a22575f80fd5b50610894610a31366004615358565b61392f565b348015610a41575f80fd5b50610911610a503660046153c9565b61394f565b348015610a60575f80fd5b50610949610a6f3660046153a9565b638b78c6d8600c9081525f91909152602090205490565b348015610a91575f80fd5b50604051601281526020016108b7565b610894610aaf366004615330565b613962565b348015610abf575f80fd5b5068a20d6e21d0e5255309546001600160a01b03165b6040516001600160a01b0390911681526020016108b7565b610894610afb366004615427565b613974565b348015610b0b575f80fd5b50610911610b1a366004615330565b638b78c6d8600c9081525f9290925260209091205416151590565b348015610b40575f80fd5b50610894610b4f3660046153a9565b613a4c565b348015610b5f575f80fd5b50610949613aa6565b610894613b03565b348015610b7b575f80fd5b50610894610b8a366004615476565b613b3c565b348015610b9a575f80fd5b50610894610ba93660046154b5565b613b5f565b348015610bb9575f80fd5b50610949610bc83660046153a9565b6001600160a01b03165f90815268a20d6e21d0e52553136020526040902054600160a01b90046001600160601b031690565b610894613b8f565b348015610c0d575f80fd5b50638b78c6d81954610ad5565b348015610c25575f80fd5b506108aa613ba2565b348015610c39575f80fd5b50610911610c48366004615330565b613bb1565b348015610c58575f80fd5b506108aa610c67366004615358565b613bdc565b348015610c77575f80fd5b50610949610c86366004615521565b6001600160a01b039182165f90815268a20d6e21d0e525530e6020908152604080832093909416825291909152205490565b610894610cc63660046153a9565b613c10565b610894610cd93660046153a9565b613c4a565b348015610ce9575f80fd5b50610949610cf83660046153a9565b63389a75e1600c9081525f91909152602090205490565b6001600160a01b038316610d3657604051633a954ecd60e21b815260040160405180910390fd5b68a20d6e21d0e525530868a20d6e21d0e525531268a20d6e21d0e525530a5f610d8183600188901b5b600381901c5f90815260209290925260409091205460059190911b60e0161c90565b63ffffffff16815260208101919091526040015f20546001600160a01b03878116911614610dc15760405162a1148160e81b815260040160405180910390fd5b856001600160a01b0316836001600160a01b031614610e44576001600160a01b038084165f9081526003840160209081526040808320938a168352929052908120549003610e44575f8481526004830160205260409020546001600160a01b03848116911614610e4457604051632ce44b5f60e11b815260040160405180910390fd5b5f610e4e87613c70565b90505f610e5a87613c70565b8254909150670de0b6b3a76400009081908490601490610e8b908490600160a01b90046001600160601b0316615549565b82546101009290920a6001600160601b0381810219909316918316021790915583546001600160a01b038116600160a01b91829004831685019092160217835550610ed68588613cc7565b610ee08588613d2b565b5f610ef08560018a811b01610d5f565b600889901c5f908152600c8801602052604090205490915060ff89161c60011615610f6d576001600160a01b038a165f9081526008870160205260409020845463ffffffff60601b19811663ffffffff600160601b9283900481165f19018116928302919091178755610f6892918891851690613d75565b611068565b305f90815260038701602090815260408083206001600160a01b038e16845290915290205415610fd157610fa2868b8c613dff565b600d860180545f1963ffffffff640100000000808404821692909201160267ffffffff00000000199091161790555b6001600160a01b038a165f9081526007870160205260409020845463ffffffff60801b19811663ffffffff600160801b9283900481165f1901811692830291909117875561102492918891851690613d75565b600c8601602052600888901c5f908152604090208054600160ff8b161b8019909116179055600d8601805463ffffffff8082166001011663ffffffff199091161790555b8254600163ffffffff600160601b80840482169283019091160263ffffffff60601b199092169190911784556001600160a01b038a165f90815260088801602052604090206110e590828b826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b611139868a6110f4878e613fbd565b848163ffffffff168160201b17846020528360021c5f5260405f206003851660061b815467ffffffffffffffff8482841c188116831b82188455505050505050505050565b5050805f528760601b60601c8960601b60601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60205fa3505050505050505050565b805f5260205ff35b6001600160a01b038381165f81815268a20d6e21d0e525530b6020908152604080832094861683529390529190912068a20d6e21d0e5255308913090036112b45780546001600160a01b0384165f908152600b840160205260409020901580159190861515161561126157600d840180546001830180546a01000000000000000000009092046001600160601b03166bffffffffffffffffffffffff199092169190911790558154815467ffffffff00000000198116600160801b90920463ffffffff9081166401000000009283900482160116021790556112b1565b811515861516156112b157611277848687613dff565b8054600d8501805467ffffffff00000000198116600160801b90930463ffffffff9081166401000000009283900482160316029190911790555b50505b831515905550505050565b5f805f8486036112fb576040517fe95c92e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600885811c5f90815268a20d6e21d0e52553146020526040808220549289901c825290205468a20d6e21d0e525530891600160ff808a169290921c8116151592918a169190911c161515171561137d576040517f025ef6dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611386876133d8565b935061139186613412565b9250836001600160a01b0316856001600160a01b031614611416576001600160a01b038086165f90815260038301602090815260408083209388168352929052908120549003611416575f8781526004820160205260409020546001600160a01b0386811691161461141657604051632ce44b5f60e11b815260040160405180910390fd5b600a81015f63ffffffff61142e83610d5f8b60011b90565b305f908152600386016020526040902063ffffffff9190911691909114915081158261146f57506001600160a01b0386165f90815260208290526040902054155b1561148d576040516367d9dca160e11b815260040160405180910390fd5b611497848b613cc7565b816114a6576114a6848a613cc7565b6114bc8488846114b65788613dff565b89613dff565b5f806114cd8560018e811b01610d5f565b63ffffffff1690505f6114df8a613c70565b6001600160a01b038b165f9081526007890160205260409020815463ffffffff60801b198116600160801b9182900463ffffffff9081165f1901169182021783559192506115309188908590613d75565b61153f8660018e811b01610d5f565b81546001600160601b80830463ffffffff908116928301811690910263ffffffff60601b199093169290921784556001600160a01b038d165f90815260088b0160205260409020929091169450906115c590828f826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b81546116229088908f9063ffffffff600160401b90910416848163ffffffff168160201b17846020528360021c5f5260405f206003851660061b815467ffffffffffffffff8482841c188116831b82188455505050505050505050565b61165788600c018e6001826020528160081c5f5260405f20805460ff8416831515811b6001821b198316178355505050505050565b505050600d8501805463ffffffff8082166001011663ffffffff199091161790555f8361169a5761168788613c70565b54600160401b900463ffffffff166116a0565b63ffffffff5b90506116ed858d83858163ffffffff168160201b17846020528360021c5f5260405f206003851660061b815467ffffffffffffffff8482841c188116831b82188455505050505050505050565b505f83611712576001600160a01b0388165f9081526007870160205260409020611717565b856009015b905061175181838e826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b50600d850154600160401b900461ffff169550851561183857876001600160a01b0316896001600160a01b03161461178e5761178e858a8b613dff565b655af3107a400095909502946117a589308861405e565b600d850154640100000000900463ffffffff16801561183657600d860154640100000000900463ffffffff1687816117df576117df615568565b600d880180547fffffffffffffffffffff000000000000000000000000ffffffffffffffffffff8116939092046a0100000000000000000000928390046001600160601b0390811691909101169091029190911790555b505b876001600160a01b0316896001600160a01b03161461185d5761185d888a8c8b610d0f565b8215801561188157506001600160a01b0388165f9081526020839052604090205415155b156118b557600d850180545f1963ffffffff640100000000808404821692909201160267ffffffff00000000199091161790555b505050505093509350939050565b6060813560405191508060051b60208301016040528082528060051b60208401602084013750919050565b68a20d6e21d0e5255308611903818380613dff565b600a8101600c82015f61191585613c70565b6001600160a01b0386165f908152600886016020908152604080832060078901909252822092935091906119498489613fbd565b8a519091505f5b81811015611c09575f8c828151811061196b5761196b61557c565b602002602001015190508363ffffffff1661198a8a610d5f8460011b90565b63ffffffff16146119ae576040516367d9dca160e11b815260040160405180910390fd5b5f6119be8a600184811b01610d5f565b600883901c5f90815260208b905260409020549091508d15159060ff84161c600116151503611a19576040517f4590a8d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c611b2b576020899052600882901c5f908152604090208054600160ff85161b19169055875463ffffffff60601b19811663ffffffff600160601b9283900481165f19018116928302919091178a55611a799189918d9190851690613d75565b611a838b83613d2b565b8754600163ffffffff600160801b80840482169283019091160263ffffffff60801b19909216919091178955611ae7878285826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b611b258b600185811b015b83826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b50611bff565b6020899052600882901c5f908152604090208054600160ff85161b8019909116179055875463ffffffff60801b19811663ffffffff600160801b9283900481165f19018116928302919091178a55611b8a9188918d9190851690613d75565b8754600163ffffffff600160601b80840482169283019091160263ffffffff60601b19909216919091178955611bee888285826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b611bfd8b600185811b01611af2565b505b5050600101611950565b508915611c3257600d8801805463ffffffff80821684011663ffffffff19909116179055611c51565b600d8801805463ffffffff8082168490031663ffffffff199091161790555b305f90815260038901602090815260408083206001600160a01b038d16845290915290205415611cec578915611cb9578a51600d8901805463ffffffff6401000000008083048216949094031690920267ffffffff0000000019909216919091179055611cec565b8a51600d8901805463ffffffff64010000000080830482169094011690920267ffffffff00000000199092169190911790555b5050505050505050505050565b6001600160a01b038316611d2057604051633a954ecd60e21b815260040160405180910390fd5b68a20d6e21d0e5255308611d35818580613dff565b600a8101600c82015f611d4787613c70565b90505f611d548289613fbd565b90505f8087611d8c5783546001600160a01b038b165f9081526007890160205260409020600160801b90910463ffffffff1690611db7565b83546001600160a01b038b165f9081526008890160205260409020600160601b90910463ffffffff16905b8a5191935091505f5b81811015611f41575f8b8281518110611ddb57611ddb61557c565b6020026020010151905063ffffffff8016811115611e0c5760405163e5cfe95760e01b815260040160405180910390fd5b5f8a6002015f611e208c610d5f8660011b90565b63ffffffff16815260208101919091526040015f20546001600160a01b031690508015611e5f5760405162a1148160e81b815260040160405180910390fd5b6020859052631fffffff600387901c165f90815260409020805460e0600589901b1681811c851863ffffffff16901b189055611ee78a838989611ea181615590565b9a508163ffffffff168160201b17846020528360021c5f5260405f206003851660061b815467ffffffffffffffff8482841c188116831b82188455505050505050505050565b600882901c5f90815260208a9052604090205460ff83161c60011615158c151514611f37576020899052600882901c5f908152604090208054600160ff851690811b199091168e151590911b1790555b5050600101611dc0565b50875481908990600c90611f63908490600160601b900463ffffffff166155b4565b92506101000a81548163ffffffff021916908363ffffffff1602179055508815611fe257845463ffffffff808516600160601b0263ffffffff60601b19909216919091178655600d8901805483925f91611fbf918591166155b4565b92506101000a81548163ffffffff021916908363ffffffff160217905550611fff565b845463ffffffff60801b1916600160801b63ffffffff8516021785555b305f90815260038901602090815260408083206001600160a01b038f16845290915290205415801590612030575088155b15612077578088600d0160048282829054906101000a900463ffffffff1661205891906155b4565b92506101000a81548163ffffffff021916908363ffffffff1602179055505b5f61208a82670de0b6b3a76400006155d0565b89549091505f906120ab90600160801b90046001600160601b031683615160565b90505f670de0b6b3a7640000820463fffffffe10606083901c17151590506120e76120e263ffffffff670de0b6b3a76400006155d0565b831190565b8383108217171561210b5760405163e5cfe95760e01b815260040160405180910390fd5b8a546001600160601b03808416600160801b026bffffffffffffffffffffffff60801b19909216919091178c55885484918a91601491612155918591600160a01b909104166155e7565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505050805f528b60601b60601c5f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60205fa3505050505050505050505050565b6001600160a01b0382166121df5760405162a1148160e81b815260040160405180910390fd5b68a20d6e21d0e52553086121f4818480613dff565b5f6121fe84613c70565b805484516001600160a01b0387165f908152600886016020908152604080832060078901909252822094955063ffffffff600160601b8504811695600160801b9095041693919291600a880191600c890191855b858110156123c9575f8c828151811061226d5761226d61557c565b602002602001015190505f8c6002015f61228b89610d5f8660011b90565b63ffffffff16815260208101919091526040015f20546001600160a01b0390811691508f1681146122cf57604051632ce44b5f60e11b815260040160405180910390fd5b5f6122df88600185811b01610d5f565b600884901c5f9081526020899052604090205490915060ff84161c60011615612354576020879052600883901c5f908152604090208054600160ff86161b1916905561234586898363ffffffff168f61233790615606565b9f508f63ffffffff16613d75565b61234f8e84613d2b565b612383565b612377858963ffffffff84166123698f615606565b9e508e63ffffffff16613d75565b6123808a615624565b99505b61238d8e84613cc7565b6020889052600283901c5f90815260409020805460c0600686901b1681811c67ffffffffffffffff16901b189055836001019350505050612252565b50505083830391505081831461241a57855463ffffffff808716600160601b0263ffffffff60601b19909216919091178755600d8801805480831684900390921663ffffffff199092169190911790555b821561243d57855463ffffffff60801b1916600160801b63ffffffff8616021786555b305f90815260038801602090815260408083206001600160a01b038d1684529091529020541580159061246f57505f83115b156124a257600d8701805463ffffffff64010000000080830482168790039091160267ffffffff00000000199091161790555b505f6124b682670de0b6b3a76400006155d0565b87546001600160601b03600160801b63ffffffff600160601b80850482168890039091160263ffffffff60601b1984168117829004831685900383169091026bffffffffffffffffffffffff60801b199091167fffffffff00000000000000000000000000000000ffffffffffffffffffffffff909316929092179190911789558754600160a01b80820483168490039092169091026001600160a01b039182161788555f8281529192508a167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602083a3505050505050505050565b6020810190606090358067ffffffffffffffff8111156125b5576125b56151c7565b60405190808252806020026020018201604052801561260557816020015b604080516080810182525f8082526020808301829052928201819052606082015282525f199092019101816125d35790505b5091505f5b8181101561268757604080516080810182525f8082526020820181905291810182905260608101919091526080858237608085019450604081015160601b60601c6040820152606081015160601b60601c6060820152808483815181106126735761267361557c565b60209081029190910101525060010161260a565b5050919050565b68a20d6e21d0e525530868a20d6e21d0e52553175f6126b56126af86613c70565b86613fbd565b90505f5b84518110156128c0575f805f805f8986815181106126d9576126d961557c565b60209081029190910181015180519181015160408201516060909201519297509550935091505f9050612713600a8a01610d5f8760011b90565b90508063ffffffff168763ffffffff1614612741576040516367d9dca160e11b815260040160405180910390fd5b600885901c5f908152600c8a01602052604090205460ff86161c60011661277b576040516305b166a360e41b815260040160405180910390fd5b83158061278e57506001600160601b0384115b156127ac57604051631c84583f60e21b815260040160405180910390fd5b604080516080810190915263ffffffff82168152602081016001600160a01b038416156127fb576001600160a01b0384165f908152600b8c01602052604090206127f69085613fbd565b6127fd565b5f5b63ffffffff90811682526001600160601b039687166020808401919091526001600160a01b039687166040938401525f9889528b815297829020835181549985015193850151909816600160401b027fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff9383166401000000000267ffffffffffffffff19909a1698909216979097179790971716959095178455505060609092015160019182018054919093166001600160a01b031990911617909155016126b9565b505050505050565b68a20d6e21d0e525530868a20d6e21d0e52553175f6128e96126af86613c70565b600e8401549091505f9061ffff16815b8651811015612d56575f805f805f8b86815181106129195761291961557c565b60200260200101519050805f015181602001518260400151836060015180955081965082975083985050505050505f895f8681526020019081526020015f206040518060800160405290815f82015f9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160089054906101000a90046001600160601b03166001600160601b03166001600160601b03168152602001600182015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152505090505f815f015190508063ffffffff165f1480612a415750612a318c600a01610d5f8860011b90565b63ffffffff168163ffffffff1614155b80612a7557506001600160a01b0383165f908152600b8d01602052604090205463ffffffff828116600160401b9092041614155b15612a935760405163dead2d2d60e01b815260040160405180910390fd5b50602081015163ffffffff811615801590612aba57508963ffffffff168163ffffffff1614155b15612ad85760405163dead2d2d60e01b815260040160405180910390fd5b8482604001516001600160601b03161115612b0657604051631c84583f60e21b815260040160405180910390fd5b600886901c5f908152600c8d01602052604090205460ff87161c600116612b40576040516305b166a360e41b815260040160405180910390fd5b81606001516001600160a01b0316846001600160a01b031614612b765760405163123d83a160e11b815260040160405180910390fd5b505f9050612710612b8788866155d0565b612b91919061563c565b9050612b9f828e8785610d0f565b612bb4838e84612baf858961565b565b614944565b8015612bf5576001600160a01b0383165f90815260118c01602052604081208054839290612be3908490615160565b90915550612bf59050838e3084614944565b6001600160a01b038316612c1057612c0d8489615160565b97505b505f8a6010015f8681526020019081526020015f205f8e6001600160a01b03166001600160a01b031681526020019081526020015f206040518060400160405290815f82015f9054906101000a90046001600160601b03166001600160601b03166001600160601b031681526020015f8201600c9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152505090505f815f01516001600160601b03161115612d46578a6010015f8681526020019081526020015f205f8e6001600160a01b03166001600160a01b031681526020019081526020015f205f8082015f6101000a8154906001600160601b0302191690555f8201600c6101000a8154906001600160a01b0302191690555050612d468160200151308f845f01516001600160601b0316614944565b85600101955050505050506128f9565b50348214612d7757604051631c84583f60e21b815260040160405180910390fd5b50505050505050565b68a20d6e21d0e525530868a20d6e21d0e52553175f612da16126af86613c70565b90505f5b84518110156128c0575f858281518110612dc157612dc161557c565b60200260200101519050612ddc85600a01610d5f8360011b90565b63ffffffff168363ffffffff1614612e075760405163dead2d2d60e01b815260040160405180910390fd5b5f90815260208490526040902080546001600160a01b0319908116825560019182018054909116905501612da5565b6001600160a01b0382165f90815268a20d6e21d0e52553136020526040812068a20d6e21d0e52553089168a20d6e21d0e525531891612e759086613fbd565b90505f805b85518110156130b6575f805f80898581518110612e9957612e9961557c565b60209081029190910181015180519181015160409091015191955093509150612ecb9050600a8901610d5f8560011b90565b63ffffffff168663ffffffff1603612ef65760405163dead2d2d60e01b815260040160405180910390fd5b811580612f0957506001600160601b0382115b15612f2757604051631c84583f60e21b815260040160405180910390fd5b5f838152602088815260408083206001600160a01b03808f168552908352928190208151808301909252546001600160601b038116808352600160601b909104909316918101919091529083148015612f955750816001600160a01b031681602001516001600160a01b0316145b15612fb357604051631c84583f60e21b815260040160405180910390fd5b6040518060400160405280846001600160601b03168152602001836001600160a01b0316815250885f8681526020019081526020015f205f8d6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a8154816001600160601b0302191690836001600160601b031602179055506020820151815f01600c6101000a8154816001600160a01b0302191690836001600160a01b031602179055509050506130808160200151308d845f01516001600160601b0316614944565b61308c828c3086614944565b6001600160a01b0382166130a7576130a48387615160565b95505b50836001019350505050612e7a565b503481146128c057604051631c84583f60e21b815260040160405180910390fd5b68a20d6e21d0e525530868a20d6e21d0e52553185f6130f86126af86613c70565b600e84015490915061ffff165f5b8551811015612d77575f805f805f8a86815181106131265761312661557c565b602090810291909101810151805191810151604082015160609092015192975095509350915061315f9050600a8a01610d5f8660011b90565b63ffffffff168763ffffffff161461318a5760405163dead2d2d60e01b815260040160405180910390fd5b5f848152602089815260408083206001600160a01b038086168552908352928190208151808301909252546001600160601b0381168252600160601b9004909216908201528315806131e5575080516001600160601b031684115b1561320357604051631c84583f60e21b815260040160405180910390fd5b80602001516001600160a01b0316836001600160a01b0316146132395760405163123d83a160e11b815260040160405180910390fd5b5f85815260208a815260408083206001600160a01b0386168452909152812055516001600160601b031692506132718b828682610d0f565b5f61271061327f88866155d0565b613289919061563c565b905061329b83308e612baf858961565b565b80156132d0576001600160a01b0383165f90815260118b016020526040812080548392906132ca908490615160565b90915550505b8560010195505050505050613106565b68a20d6e21d0e525530868a20d6e21d0e52553185f5b83518110156133d1575f8482815181106133125761331261557c565b6020908102919091018101515f81815285835260408082206001600160a01b03808c1684529085528183208251808401909352546001600160601b038116808452600160601b90910490911694820194909452919350909190036133895760405163dead2d2d60e01b815260040160405180910390fd5b5f828152602085815260408083206001600160a01b038b168452825282209190915581015181516133c7919030908a906001600160601b0316614944565b50506001016132f6565b5050505050565b5f806133e383613412565b90506001600160a01b03811661340c5760405163677510db60e11b815260040160405180910390fd5b92915050565b5f68a20d6e21d0e525530868a20d6e21d0e525530a8261343f68a20d6e21d0e5255312600187901b610d5f565b63ffffffff16815260208101919091526040015f20546001600160a01b03169392505050565b5f68a20d6e21d0e525530868a20d6e21d0e525530a8261349268a20d6e21d0e5255312600188901b610d5f565b63ffffffff16815260208101919091526040015f20546001600160a01b03908116925083168214613505576001600160a01b038084165f90815260038301602090815260408083209386168352929052908120549003613505576040516367d9dca160e11b815260040160405180910390fd5b5f848152600482016020908152604080832080546001600160a01b0319166001600160a01b038a1690811790915560058501909252600887901c83529091208054600160ff881690811b19909116921515901b919091179055509392505050565b606068a20d6e21d0e52553085f80846135b2576001600160a01b0388165f9081526007840160209081526040808320600b870190925290912054600160801b900463ffffffff166135e7565b6001600160a01b0388165f9081526008840160209081526040808320600b870190925290912054600160601b900463ffffffff165b6040516020839052955090925063ffffffff1686811887821102189050865b81811015613643578060031c5f5260405f2080546007831660051b1c63ffffffff1690508089830360051b60208801015250600181019050613606565b9690960380845260051b8301602001604052509095945050505050565b5f61366a826149ef565b6136875760405163677510db60e11b815260040160405180910390fd5b505f90815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b60605f80546136b89061566e565b80601f01602080910402602001604051908101604052809291908181526020018280546136e49061566e565b801561372f5780601f106137065761010080835404028352916020019161372f565b820191905f5260205f20905b81548152906001019060200180831161371257829003601f168201915b5050505050905090565b61374233614a0b565b61374d5f8083614a63565b5f61375884826156ea565b50600161376583826156ea565b50505050565b6d800000000000000000000000000061378381614a98565b61378d8383614abc565b505050565b5f61379e338484614b43565b50600192915050565b6137b13382614bca565b50565b6137bc614bd5565b6137c68282614bef565b5050565b6c200000000000000000000000006137e181614a98565b6137c682614bfb565b6001600160a01b0383165f90815268a20d6e21d0e525530e602090815260408083203384529091528120805468a20d6e21d0e525530891905f19811461386a5780851115613864576040517f13be252b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84810382555b613875838888613dff565b61388087878761405e565b5060019695505050505050565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a250565b6001600160a01b0381165f90815268a20d6e21d0e5255313602052604081208054670100000000000000900460011682036139185750600192915050565b546701000000000000009004600216151592915050565b6c2000000000000000000000000061394681614a98565b6137c682614c4f565b5f61395a3383614abc565b506001919050565b61396a614bd5565b6137c68282614bca565b7f00000000000000000000000000000000000000000000000000000000000000003081036139a957639f03a0265f526004601cfd5b6139b284614cb1565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114613a04576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f38a2849055811561376557604051828482375f388483885af46133d1573d5f823e3d81fd5b6c20000000000000000000000000613a6381614a98565b6001600160a01b0382165f81815268a20d6e21d0e525531960205260408120805491815591613a9b57613a963382614cc3565b613765565b613765843383614cdc565b5f7f0000000000000000000000000000000000000000000000000000000000000000308114613adc57639f03a0265f526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505090565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2565b6b080000000000000000000000613b5281614a98565b60026137658385836157a5565b6b080000000000000000000000613b7581614a98565b5f613b818587836157a5565b5060016128c08385836157a5565b613b97614bd5565b613ba05f614d25565b565b6060600180546136b89061566e565b5f68a20d6e21d0e5255308613bc7813386613dff565b613bd233858561405e565b5060019392505050565b60606002613be983614d6b565b604051602001613bfa92919061585f565b6040516020818303038152906040529050919050565b613c18614bd5565b63389a75e1600c52805f526020600c208054421115613c3e57636f5e88185f526004601cfd5b5f90556137b181614d25565b613c52614bd5565b8060601b613c6757637448fbae5f526004601cfd5b6137b181614d25565b6001600160a01b0381165f90815268a20d6e21d0e525531360205260408120805490916701000000000000009091046001169003613cc257805467ff0000000000000019166703000000000000001781555b919050565b600881901c5f90815260058301602052604090205460ff82161c600116156137c65760058201602052600881901c5f908152604090208054600160ff84161b191690555f818152600483016020526040902080546001600160a01b03191690555050565b5f818152600f8301602052604090205463ffffffff16156137c6575f818152600f83016020526040902080546001600160a01b031990811682556001909101805490911690555050565b80821461376557600381811c5f908152602086815260408083205486851c8452818420805463ffffffff60e060058a811b82169590951c8281168c871b831685811c82188516901b909418909455958b90526401fffffffe600193841b169092019687901c86529290942080549590911b90921684811c871890931690921b9092189091556133d1565b305f90815260038401602090815260408083206001600160a01b038616845291829052822054909190819015613ec257600d8601546001600160a01b0386165f908152600b88016020526040902060018101546001600160601b036a0100000000000000000000909304831694509091613e7a91168461565b565b91508115613ea5576001810180546bffffffffffffffffffffffff19166001600160601b0385161790555b8054613ebe90600160801b900463ffffffff16836155d0565b9150505b846001600160a01b0316846001600160a01b031614613fac576001600160a01b0384165f9081526020849052604090205415613fac57815f03613f1e57600d8601546a010000000000000000000090046001600160601b031691505b6001600160a01b0384165f908152600b8701602052604081206001810154909190613f52906001600160601b03168561565b565b90508015613f7d576001820180546bffffffffffffffffffffffff19166001600160601b0386161790555b8154613f9690600160801b900463ffffffff16826155d0565b90508015613fa957613fa930878361405e565b50505b80156128c0576128c030868361405e565b8154600160401b900463ffffffff165f81900361340c575068a20d6e21d0e5255308805463ffffffff198116600163ffffffff92831601918216908117835584546bffffffff00000000000000001916600160401b82021785555f81815268a20d6e21d0e525530a6020526040902080546001600160a01b0319166001600160a01b03861617905590919063fffffffe1901614057575f80fd5b5092915050565b6001600160a01b03821661408557604051633a954ecd60e21b815260040160405180910390fd5b68a20d6e21d0e52553085f61409985613c70565b90505f6140a585613c70565b90506140ff6040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f63ffffffff1681525090565b8254600160801b80820463ffffffff908116608085015284548290041660a08401528554046001600160601b0390811660c0840152600160a01b909104166040820181905285111561417d576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604081018051869003908190528354600160601b900463ffffffff1660e08301819052670de0b6b3a76400000211156141e2576040517f2e33c5e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604081015183546001600160601b03918216600160a01b9081026001600160a01b039283161786558454818104841689016060860181905290931602911617825560e0810151608082015161425d9101614241670de0b6b3a764000090565b83604001518161425357614253615568565b0480821191030290565b8152815467010000000000000090046002165f036142e557856001600160a01b0316876001600160a01b03160361429c57805160808201510360a08201525b6142df670de0b6b3a76400008260600151816142ba576142ba615568565b845460a085015163ffffffff600160601b909204919091160191900481810391100290565b60208201525b305f90815260038501602090815260408083206001600160a01b038b168452918290529091205415614345578151600d8601805463ffffffff6401000000008083048216949094031690920267ffffffff00000000199092169190911790555b6001600160a01b0387165f9081526020829052604090205415614398576020820151600d8601805463ffffffff64010000000080830482169094011690920267ffffffff00000000199092169190911790555b5080516020820151855463ffffffff600160601b808304821684018590039091160263ffffffff60601b19909116178655600a8601915f918082189082110218905080156145ca578251819003835260208301805182900390526001600160a01b03808916908a16036144145760a083018051820190526145ca565b604080516080810182525f808252602080830182815283850183815260608086019081528651888152600589901b810185019097528690526001600160a01b03808f169091528e1690529290920181526001600160a01b03808c165f90815260078a016020526040808220928d1682528120929350909190614496888d613fbd565b90505b6080870180515f190190819052600381901c5f90815260208590526040812054909160051b60e0161c63ffffffff169050614506838960a0015183826020528160031c5f5260405f206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b60a088018051600181019091526020888152600283901c5f90815260409020805460c0600686901b1681811c9490931b63ffffffff8716179390931867ffffffffffffffff1690911b909118905561455e8b82613cc7565b84518181526020018552505f198501945f036001016144995760018a01546145909085906001600160a01b0316614dad565b5050506080840151865463ffffffff918216600160801b90810263ffffffff60801b1992831617895560a087015188549316029116178555505b505f6145de8360200151845f015101614dfb565b86548451919250600160401b900463ffffffff1690156147115760608a901b60011760208301526001600160a01b038a165f908152600788016020526040902060808501518551885463ffffffff918303918216600160801b0263ffffffff60801b199091161789555b5f1991909101600381901c5f90815260208490526040812054919291600584901b60e0161c6020888152633fffffff600283901c165f90815260409020805460c0600685901b1681811c938a901b63ffffffff9081179490941867ffffffffffffffff16901b18905516905060098b01602052600385901c5f90815260409020805460e0600588901b1681811c841863ffffffff16901b1890556001909401936146f28b82613cc7565b8551602080880151600884901b17825201865250808203614648575050505b6020840151156148bd57606089901b6020830152670de0b6b3a76400008460c001518161474057614740615568565b0461012085015286546001600160a01b038a165f908152600789016020908152604090912060a08701519187015164010000000090930463ffffffff1692909190810161478d898e613fbd565b63ffffffff9081166101408a01528954908216600160801b0263ffffffff60801b199091161789555b5f8861012001518510156147cf575060018401936147ff565b5f1995909501600381901c5f90815260098d016020526040902054909590600587901b60e0161c63ffffffff1690505b6020849052600383901c5f90815260409020805460e0600586901b1681811c841863ffffffff16901b1890556101408901516020898152600283901c5f90815260409020805460c0600686901b1681811c9388901b63ffffffff909516949094179290921867ffffffffffffffff1690921b1890556001909201918651602080890151600884901b178252018752508082036147b6575050885463ffffffff9092166401000000000267ffffffff0000000019909216919091178855505b604082015151156149025786546bffffffff00000000000000001916600160401b63ffffffff83160217875560018701546149029083906001600160a01b0316614e40565b875f528860601b60601c8a60601b60601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60205fa350505050505050505050565b6001600160a01b03841661496c576001600160a01b0382163014613a9657613a968282614cc3565b306001600160a01b038516036149c8576149bd68a20d6e21d0e52553086001600160a01b038516301461499f57846149a1565b835b6001600160a01b03851630146149b75784613dff565b85613dff565b613a9683838361405e565b306001600160a01b038416036149e357613a96848383614cdc565b61376584848484614e7a565b5f806149fa83613412565b6001600160a01b0316141592915050565b638b78c6d819805415614a2557630dc149f05f526004601cfd5b6001600160a01b03909116801560ff1b8117909155805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b614a6e5f8083614ed2565b5f68a20d6e21d0e5255308805467ffffffff00000000191667ffffffff0000000017905550505050565b638b78c6d8600c52335f52806020600c2054166137b1576382b429005f526004601cfd5b5f614ac683613c70565b80549091506701000000000000009004600216151582151514614b0d57805460ff67010000000000000080830482166002189091160267ff00000000000000199091161781555b8115155f528260601b60601c7fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039360205fa2505050565b6001600160a01b038381165f90815268a20d6e21d0e525530e602090815260408083209386168352929052208115801590614b7e5750805415155b15614b87575f80fd5b8181555f8281526001600160a01b0380851691908616907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590602090a350505050565b6137c682825f6150f5565b638b78c6d819543314613ba0576382b429005f526004601cfd5b6137c6828260016150f5565b612710811115614c09575f80fd5b68a20d6e21d0e5255316805461ffff191661ffff83161790555f8181527fdf10c155355452a496e5ffa2e30708bc26ccb58e654d0b145ec6056bce9af82290602090a150565b612710811115614c5d575f80fd5b68a20d6e21d0e5255315805469ffff00000000000000001916600160401b61ffff8416021790555f8181527fe10129be59d54095da8caee0e01e0b82530bb6275510fbb843816dda3a5921d690602090a150565b6720000000000000006137c681614a98565b5f385f3884865af16137c65763b12d13eb5f526004601cfd5b81601452806034526fa9059cbb0000000000000000000000005f5260205f604460105f875af13d1560015f51141716614d1c576390b8ec185f526004601cfd5b5f603452505050565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3811560ff1b8217905550565b60606080604051019050602081016040525f8152805f19835b928101926030600a8206018453600a900480614d84575050819003601f19909101908152919050565b6060820151805160051b60840160808203915063144027d38252836020015160208301528360400151604083015260608083015260208282601c85015f875af1600183511416613765575f82fd5b614e1d60405180606001604052805f81526020015f8152602001606081525090565b604051828152806020018360051b81016040528183604001528083525050919050565b60408201516040810363263c69d68152602080820152815160051b604401915060208183601c84015f875af1600182511416613765575f81fd5b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af13d1560015f51141716614ec557637939f4245f526004601cfd5b5f60605260405250505050565b68a20d6e21d0e52553095468a20d6e21d0e5255308906001600160a01b031615614f28576040517fead4d2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216614f68576040517f39a84a7b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b630f4599e55f523360205260205f6024601c5f865af160015f511416614f955763d125259c5f526004601cfd5b6001810180546001600160a01b0319166001600160a01b0384161790556012614fbf90600a6159c4565b670de0b6b3a76400001080614fd157505f5b15615008576040517f997c4ef400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8315613765576001600160a01b03831661503557604051633a954ecd60e21b815260040160405180910390fd5b606084901c670de0b6b3a7640000850463fffffffe10171561506a5760405163e5cfe95760e01b815260040160405180910390fd5b80546bffffffffffffffffffffffff60801b1916600160801b6001600160601b038616021781555f61509b84613c70565b80546001600160601b038716600160a01b026001600160a01b039182161782555f8781529192508516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082a36133d1846001614abc565b638b78c6d8600c52825f526020600c20805483811783615116575080841681185b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3505050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561340c5761340c61514c565b5f5b8381101561518d578181015183820152602001615175565b50505f910152565b602081525f82518060208401526151b3816040850160208701615173565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126151ea575f80fd5b813567ffffffffffffffff811115615204576152046151c7565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715615233576152336151c7565b60405281815283820160200185101561524a575f80fd5b816020850160208301375f918101602001919091529392505050565b80356001600160a01b0381168114613cc2575f80fd5b5f805f6060848603121561528e575f80fd5b833567ffffffffffffffff8111156152a4575f80fd5b6152b0868287016151db565b935050602084013567ffffffffffffffff8111156152cc575f80fd5b6152d8868287016151db565b9250506152e760408501615266565b90509250925092565b80358015158114613cc2575f80fd5b5f8060408385031215615310575f80fd5b61531983615266565b9150615327602084016152f0565b90509250929050565b5f8060408385031215615341575f80fd5b61534a83615266565b946020939093013593505050565b5f60208284031215615368575f80fd5b5035919050565b5f805f60608486031215615381575f80fd5b61538a84615266565b925061539860208501615266565b929592945050506040919091013590565b5f602082840312156153b9575f80fd5b6153c282615266565b9392505050565b5f602082840312156153d9575f80fd5b6153c2826152f0565b5f8083601f8401126153f2575f80fd5b50813567ffffffffffffffff811115615409575f80fd5b602083019150836020828501011115615420575f80fd5b9250929050565b5f805f60408486031215615439575f80fd5b61544284615266565b9250602084013567ffffffffffffffff81111561545d575f80fd5b615469868287016153e2565b9497909650939450505050565b5f8060208385031215615487575f80fd5b823567ffffffffffffffff81111561549d575f80fd5b6154a9858286016153e2565b90969095509350505050565b5f805f80604085870312156154c8575f80fd5b843567ffffffffffffffff8111156154de575f80fd5b6154ea878288016153e2565b909550935050602085013567ffffffffffffffff811115615509575f80fd5b615515878288016153e2565b95989497509550505050565b5f8060408385031215615532575f80fd5b61553b83615266565b915061532760208401615266565b6001600160601b03828116828216039081111561340c5761340c61514c565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f63ffffffff821663ffffffff81036155ab576155ab61514c565b60010192915050565b63ffffffff818116838216019081111561340c5761340c61514c565b808202811582820484141761340c5761340c61514c565b6001600160601b03818116838216019081111561340c5761340c61514c565b5f63ffffffff82168061561b5761561b61514c565b5f190192915050565b5f600182016156355761563561514c565b5060010190565b5f8261565657634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561340c5761340c61514c565b600181811c9082168061568257607f821691505b6020821081036156a057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561378d57805f5260205f20601f840160051c810160208510156156cb5750805b601f840160051c820191505b818110156133d1575f81556001016156d7565b815167ffffffffffffffff811115615704576157046151c7565b61571881615712845461566e565b846156a6565b6020601f82116001811461574a575f83156157335750848201515b5f19600385901b1c1916600184901b1784556133d1565b5f84815260208120601f198516915b828110156157795787850151825560209485019460019092019101615759565b508482101561579657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b67ffffffffffffffff8311156157bd576157bd6151c7565b6157d1836157cb835461566e565b836156a6565b5f601f841160018114615802575f85156157eb5750838201355b5f19600387901b1c1916600186901b1783556133d1565b5f83815260208120601f198716915b828110156158315786850135825560209485019460019092019101615811565b508682101561584d575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f80845461586c8161566e565b6001821680156158835760018114615898576158c5565b60ff19831686528115158202860193506158c5565b875f5260205f205f5b838110156158bd578154888201526001909101906020016158a1565b505081860193505b50505083516158d8818360208801615173565b01949350505050565b6001815b600184111561591c578085048111156159005761590061514c565b600184161561590e57908102905b60019390931c9280026158e5565b935093915050565b5f826159325750600161340c565b8161593e57505f61340c565b8160018114615954576002811461595e5761597a565b600191505061340c565b60ff84111561596f5761596f61514c565b50506001821b61340c565b5060208310610133831016604e8410600b841016171561599d575081810a61340c565b6159a95f1984846158e1565b805f19048211156159bc576159bc61514c565b029392505050565b5f6153c260ff84168361592456fea264697066735822122079b3739bf841660767ffa8c2f1d91ce9a8361cc569678b3e99879e6854ad7a1564736f6c634300081a0033