[ { "inputs": [ { "internalType": "contract ILBFactory", "name": "factory_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "BinHelper__CompositionFactorFlawed", "type": "error" }, { "inputs": [], "name": "BinHelper__LiquidityOverflow", "type": "error" }, { "inputs": [], "name": "BinHelper__MaxLiquidityPerBinExceeded", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "FeeHelper__FeeTooLarge", "type": "error" }, { "inputs": [], "name": "Hooks__CallFailed", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "LBPair__AddressZero", "type": "error" }, { "inputs": [], "name": "LBPair__EmptyMarketConfigs", "type": "error" }, { "inputs": [], "name": "LBPair__FlashLoanCallbackFailed", "type": "error" }, { "inputs": [], "name": "LBPair__FlashLoanInsufficientAmount", "type": "error" }, { "inputs": [], "name": "LBPair__InsufficientAmountIn", "type": "error" }, { "inputs": [], "name": "LBPair__InsufficientAmountOut", "type": "error" }, { "inputs": [], "name": "LBPair__InvalidHooks", "type": "error" }, { "inputs": [], "name": "LBPair__InvalidInput", "type": "error" }, { "inputs": [], "name": "LBPair__InvalidStaticFeeParameters", "type": "error" }, { "inputs": [], "name": "LBPair__MaxTotalFeeExceeded", "type": "error" }, { "inputs": [], "name": "LBPair__OnlyFactory", "type": "error" }, { "inputs": [], "name": "LBPair__OnlyProtocolFeeRecipient", "type": "error" }, { "inputs": [], "name": "LBPair__OutOfLiquidity", "type": "error" }, { "inputs": [], "name": "LBPair__TokenNotSupported", "type": "error" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "LBPair__ZeroAmount", "type": "error" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "LBPair__ZeroAmountsOut", "type": "error" }, { "inputs": [], "name": "LBPair__ZeroBorrowAmount", "type": "error" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "LBPair__ZeroShares", "type": "error" }, { "inputs": [], "name": "LBToken__AddressThisOrZero", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "LBToken__BurnExceedsBalance", "type": "error" }, { "inputs": [], "name": "LBToken__InvalidLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "LBToken__SelfApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "LBToken__SpenderNotApproved", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "LBToken__TransferExceedsBalance", "type": "error" }, { "inputs": [], "name": "LiquidityConfigurations__InvalidConfig", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "OracleHelper__InvalidOracleId", "type": "error" }, { "inputs": [], "name": "OracleHelper__LookUpTimestampTooOld", "type": "error" }, { "inputs": [], "name": "OracleHelper__NewLengthTooSmall", "type": "error" }, { "inputs": [], "name": "PackedUint128Math__AddOverflow", "type": "error" }, { "inputs": [], "name": "PackedUint128Math__MultiplierTooLarge", "type": "error" }, { "inputs": [], "name": "PackedUint128Math__SubUnderflow", "type": "error" }, { "inputs": [], "name": "PairParametersHelper__InvalidParameter", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "SafeCast__Exceeds128Bits", "type": "error" }, { "inputs": [], "name": "SafeCast__Exceeds24Bits", "type": "error" }, { "inputs": [], "name": "SafeCast__Exceeds40Bits", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "Uint128x128Math__LogUnderflow", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "x", "type": "uint256" }, { "internalType": "int256", "name": "y", "type": "int256" } ], "name": "Uint128x128Math__PowUnderflow", "type": "error" }, { "inputs": [], "name": "Uint256x256Math__MulDivOverflow", "type": "error" }, { "inputs": [], "name": "Uint256x256Math__MulShiftOverflow", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "feeRecipient", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "protocolFees", "type": "bytes32" } ], "name": "CollectedProtocolFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint24", "name": "id", "type": "uint24" }, { "indexed": false, "internalType": "bytes32", "name": "totalFees", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "protocolFees", "type": "bytes32" } ], "name": "CompositionFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "bytes32[]", "name": "amounts", "type": "bytes32[]" } ], "name": "DepositedToBins", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "contract ILBFlashLoanCallback", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint24", "name": "activeId", "type": "uint24" }, { "indexed": false, "internalType": "bytes32", "name": "amounts", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "totalFees", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "protocolFees", "type": "bytes32" } ], "name": "FlashLoan", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint24", "name": "idReference", "type": "uint24" }, { "indexed": false, "internalType": "uint24", "name": "volatilityReference", "type": "uint24" } ], "name": "ForcedDecay", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "hooksParameters", "type": "bytes32" } ], "name": "HooksParametersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "oracleLength", "type": "uint16" } ], "name": "OracleLengthIncreased", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "baseFactor", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "filterPeriod", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "decayPeriod", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "reductionFactor", "type": "uint16" }, { "indexed": false, "internalType": "uint24", "name": "variableFeeControl", "type": "uint24" }, { "indexed": false, "internalType": "uint16", "name": "protocolShare", "type": "uint16" }, { "indexed": false, "internalType": "uint24", "name": "maxVolatilityAccumulator", "type": "uint24" } ], "name": "StaticFeeParametersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint24", "name": "id", "type": "uint24" }, { "indexed": false, "internalType": "bytes32", "name": "amountsIn", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "amountsOut", "type": "bytes32" }, { "indexed": false, "internalType": "uint24", "name": "volatilityAccumulator", "type": "uint24" }, { "indexed": false, "internalType": "bytes32", "name": "totalFees", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "protocolFees", "type": "bytes32" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "bytes32[]", "name": "amounts", "type": "bytes32[]" } ], "name": "WithdrawnFromBins", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "approveForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "batchBalances", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "batchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amountsToBurn", "type": "uint256[]" } ], "name": "burn", "outputs": [ { "internalType": "bytes32[]", "name": "amounts", "type": "bytes32[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "collectProtocolFees", "outputs": [ { "internalType": "bytes32", "name": "collectedProtocolFees", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ILBFlashLoanCallback", "name": "receiver", "type": "address" }, { "internalType": "bytes32", "name": "amounts", "type": "bytes32" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "flashLoan", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "forceDecay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getActiveId", "outputs": [ { "internalType": "uint24", "name": "activeId", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "getBin", "outputs": [ { "internalType": "uint128", "name": "binReserveX", "type": "uint128" }, { "internalType": "uint128", "name": "binReserveY", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getBinStep", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getFactory", "outputs": [ { "internalType": "contract ILBFactory", "name": "factory", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "getIdFromPrice", "outputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getLBHooksParameters", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "swapForY", "type": "bool" }, { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "getNextNonEmptyBin", "outputs": [ { "internalType": "uint24", "name": "nextId", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOracleParameters", "outputs": [ { "internalType": "uint8", "name": "sampleLifetime", "type": "uint8" }, { "internalType": "uint16", "name": "size", "type": "uint16" }, { "internalType": "uint16", "name": "activeSize", "type": "uint16" }, { "internalType": "uint40", "name": "lastUpdated", "type": "uint40" }, { "internalType": "uint40", "name": "firstTimestamp", "type": "uint40" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint40", "name": "lookupTimestamp", "type": "uint40" } ], "name": "getOracleSampleAt", "outputs": [ { "internalType": "uint64", "name": "cumulativeId", "type": "uint64" }, { "internalType": "uint64", "name": "cumulativeVolatility", "type": "uint64" }, { "internalType": "uint64", "name": "cumulativeBinCrossed", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "getPriceFromId", "outputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getProtocolFees", "outputs": [ { "internalType": "uint128", "name": "protocolFeeX", "type": "uint128" }, { "internalType": "uint128", "name": "protocolFeeY", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint128", "name": "reserveX", "type": "uint128" }, { "internalType": "uint128", "name": "reserveY", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getStaticFeeParameters", "outputs": [ { "internalType": "uint16", "name": "baseFactor", "type": "uint16" }, { "internalType": "uint16", "name": "filterPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "decayPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "reductionFactor", "type": "uint16" }, { "internalType": "uint24", "name": "variableFeeControl", "type": "uint24" }, { "internalType": "uint16", "name": "protocolShare", "type": "uint16" }, { "internalType": "uint24", "name": "maxVolatilityAccumulator", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "amountOut", "type": "uint128" }, { "internalType": "bool", "name": "swapForY", "type": "bool" } ], "name": "getSwapIn", "outputs": [ { "internalType": "uint128", "name": "amountIn", "type": "uint128" }, { "internalType": "uint128", "name": "amountOutLeft", "type": "uint128" }, { "internalType": "uint128", "name": "fee", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "amountIn", "type": "uint128" }, { "internalType": "bool", "name": "swapForY", "type": "bool" } ], "name": "getSwapOut", "outputs": [ { "internalType": "uint128", "name": "amountInLeft", "type": "uint128" }, { "internalType": "uint128", "name": "amountOut", "type": "uint128" }, { "internalType": "uint128", "name": "fee", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokenX", "outputs": [ { "internalType": "contract IERC20", "name": "tokenX", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getTokenY", "outputs": [ { "internalType": "contract IERC20", "name": "tokenY", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getVariableFeeParameters", "outputs": [ { "internalType": "uint24", "name": "volatilityAccumulator", "type": "uint24" }, { "internalType": "uint24", "name": "volatilityReference", "type": "uint24" }, { "internalType": "uint24", "name": "idReference", "type": "uint24" }, { "internalType": "uint40", "name": "timeOfLastUpdate", "type": "uint40" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "implementation", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "newLength", "type": "uint16" } ], "name": "increaseOracleLength", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "baseFactor", "type": "uint16" }, { "internalType": "uint16", "name": "filterPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "decayPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "reductionFactor", "type": "uint16" }, { "internalType": "uint24", "name": "variableFeeControl", "type": "uint24" }, { "internalType": "uint16", "name": "protocolShare", "type": "uint16" }, { "internalType": "uint24", "name": "maxVolatilityAccumulator", "type": "uint24" }, { "internalType": "uint24", "name": "activeId", "type": "uint24" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes32[]", "name": "liquidityConfigs", "type": "bytes32[]" }, { "internalType": "address", "name": "refundTo", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "bytes32", "name": "amountsReceived", "type": "bytes32" }, { "internalType": "bytes32", "name": "amountsLeft", "type": "bytes32" }, { "internalType": "uint256[]", "name": "liquidityMinted", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "hooksParameters", "type": "bytes32" }, { "internalType": "bytes", "name": "onHooksSetData", "type": "bytes" } ], "name": "setHooksParameters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "baseFactor", "type": "uint16" }, { "internalType": "uint16", "name": "filterPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "decayPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "reductionFactor", "type": "uint16" }, { "internalType": "uint24", "name": "variableFeeControl", "type": "uint24" }, { "internalType": "uint16", "name": "protocolShare", "type": "uint16" }, { "internalType": "uint24", "name": "maxVolatilityAccumulator", "type": "uint24" } ], "name": "setStaticFeeParameters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "swapForY", "type": "bool" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "swap", "outputs": [ { "internalType": "bytes32", "name": "amountsOut", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
60c06040523480156200001157600080fd5b506040516200608d3803806200608d83398101604081905262000034916200010a565b6001600160a01b03811660a052306080526200004f62000056565b506200013c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000a75760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620001075780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156200011d57600080fd5b81516001600160a01b03811681146200013557600080fd5b9392505050565b60805160a051615f016200018c600039600081816104b50152818161079101528181610b9f015281816111ea0152818161140401528181611b23015261356a015260006104220152615f016000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c806388cc58e411610130578063c9939f5e116100b8578063e584b6541161007c578063e584b65414610642578063e77366f814610655578063e985e9c514610668578063ea3446bf1461068b578063f5e293291461069e57600080fd5b8063c9939f5e1461060f578063d3b9fbe414610622578063d8dfcea01461062a578063da10610c14610632578063dbe65edc1461063a57600080fd5b8063a1af5b9a116100ff578063a1af5b9a14610570578063a41a01fb14610578578063abcd78301461059f578063bd85b039146105dc578063c7bd6586146105fc57600080fd5b806388cc58e4146104b35780638940a16a146104d95780638d7024e51461051657806395d89b411461055157600080fd5b806347973bff116101b3578063551828941161018257806355182894146103d85780635c60da1b1461041d5780636653851a14610444578063781a8915146104575780637ca0de301461046157600080fd5b806347973bff1461037f5780634c7cffbd146103925780634e1273f4146103a557806353c059a0146103c557600080fd5b80630abe9688116101fa5780630abe9688146102e457806317f11ecc1461031a57806317fad7fc146103355780631b057f6d1461034a578063383d15c51461035d57600080fd5b8062fdd58e1461022b57806305e8746d1461025157806306fdde031461027a5780630902f1ac146102bc575b600080fd5b61023e610239366004615489565b6106b1565b6040519081526020015b60405180910390f35b3660011981013560f01c90033560601c5b6040516001600160a01b039091168152602001610248565b60408051808201909152601481527f4c697175696469747920426f6f6b20546f6b656e00000000000000000000000060208201525b60405161024891906154d9565b6102c46106df565b604080516001600160801b03938416815292909116602083015201610248565b6102c46102f236600461551f565b62ffffff166000908152600660205260409020546001600160801b0381169160809190911c90565b610322610719565b60405161ffff9091168152602001610248565b61034861034336600461557e565b610723565b005b610348610358366004615653565b61077e565b61037061036b36600461569e565b6108de565b60405161024893929190615740565b61034861038d366004615771565b610b94565b61023e6103a036600461551f565b610d1d565b6103b86103b3366004615808565b610d36565b6040516102489190615873565b61023e6103d3366004615894565b610e21565b6103e061112d565b6040805160ff909616865261ffff9485166020870152939092169284019290925264ffffffffff918216606084015216608082015260a001610248565b6102627f000000000000000000000000000000000000000000000000000000000000000081565b6103486104523660046158cd565b6111d7565b620100095461023e565b610469611251565b6040805161ffff9889168152968816602088015294871694860194909452918516606085015262ffffff9081166080850152931660a08301529190911660c082015260e001610248565b7f0000000000000000000000000000000000000000000000000000000000000000610262565b6104ec6104e7366004615953565b6112b9565b604080516001600160401b0394851681529284166020840152921691810191909152606001610248565b61051e6113b8565b6040805162ffffff95861681529385166020850152919093169082015264ffffffffff9091166060820152608001610248565b60408051808201909152600381526213109560ea1b60208201526102af565b61023e6113f8565b61058b61058636600461597a565b6115b0565b60405162ffffff9091168152602001610248565b6105b26105ad3660046159a6565b6115c3565b604080516001600160801b0394851681529284166020840152921691810191909152606001610248565b61023e6105ea3660046159e0565b60009081526001602052604090205490565b61034861060a3660046159f9565b611751565b6103b861061d36600461557e565b6117e7565b610348611b10565b6102c4611be5565b610262611c00565b61058b611c0a565b610348610650366004615a14565b611c17565b6105b26106633660046159a6565b611c26565b61067b610676366004615a32565b611d55565b6040519015158152602001610248565b610348610699366004615a50565b611d61565b61058b6106ac3660046159e0565b61201d565b6001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b905090565b6000806107106106fc60055460045461203190919063ffffffff16565b6001600160801b0381169160809190911c90565b90939092509050565b60006106da61206b565b61072b612087565b620100095461074081338989898989896120bf565b61074e878787878787612135565b6107656001600080516020615eac83398151915255565b6107758133898989898989612193565b50505050505050565b610786612087565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107cf57604051632486085360e01b815260040160405180910390fd5b62010009839055604080518481529051849133917f4d24d81a1a6e09c37497747b4c9d67d858ce80438b54df0fa361a24dc742d9349181900360200190a26001600160a01b038116158015906108985750306001600160a01b0316816001600160a01b0316635f9c01b16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088c9190615a9f565b6001600160a01b031614155b156108b657604051631b5de6eb60e01b815260040160405180910390fd5b6108c18484846121c8565b506108d96001600080516020615eac83398151915255565b505050565b6000806060866001600160a01b038116158061090257506001600160a01b03811630145b15610920576040516345c210e760e11b815260040160405180910390fd5b610928612087565b600086900361094a5760405163296db0d960e01b815260040160405180910390fd5b6201000954604080516060810190915260009080896001600160401b0381111561097657610976615abc565b60405190808252806020026020018201604052801561099f578160200160208202803683370190505b508152602001896001600160401b038111156109bd576109bd615abc565b6040519080825280602002602001820160405280156109e6578160200160208202803683370190505b508152602001896001600160401b03811115610a0457610a04615abc565b604051908082528060200260200182016040528015610a2d578160200160208202803683370190505b509052600454909150610a593660011981013560f01c90033560601c610a516121ef565b839190612205565b9650610a6983338d8d8d8c612245565b610a768a8a898e8661227e565b9550610a8c610a858888612031565b829061239c565b600455604080830151835191519096506001600160a01b038d169160009133917f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb91610ada91908b90615ad2565b60405180910390a4815160208301516040516001600160a01b038e169233927f87f1f9dcf5e8089a3e00811b6a008d8f30293a3da878cb1fe8c90ca376402f8a92610b26929190615ad2565b60405180910390a38515610b5857610b583660011981013560f01c90033560601c610b4f6121ef565b8891908b6123d6565b610b6f6001600080516020615eac83398151915255565b610b8683338d8d8d610b818d8d612031565b612434565b505050509450945094915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bdd57604051632486085360e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c225750825b90506000826001600160401b03166001148015610c3e5750303b155b905081158015610c4c575080155b15610c6a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c9457845460ff60401b1916600160401b1785555b610c9c612465565b610cc8610cbc610cb78860035461247590919063ffffffff16565b612496565b8e8e8e8e8e8e8e6124c1565b8315610d0e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b60006106d4610d2a61206b565b62ffffff841690612631565b60608382808214610d5a576040516340311ffd60e11b815260040160405180910390fd5b856001600160401b03811115610d7257610d72615abc565b604051908082528060200260200182016040528015610d9b578160200160208202803683370190505b50925060005b86811015610e1657610df1888883818110610dbe57610dbe615af7565b9050602002016020810190610dd39190615b0d565b878784818110610de557610de5615af7565b905060200201356106b1565b848281518110610e0357610e03615af7565b6020908102919091010152600101610da1565b505050949350505050565b6000610e2b612087565b6201000954600454600554600086610e5457610e4f610e486121ef565b8490612668565b610e6e565b610e6e3660011981013560f01c90033560601c849061269d565b90506000819003610e9257604051637df801c760e01b815260040160405180910390fd5b86610ea085338984866126cc565b610eaa848361239c565b6003549094506000610eba61206b565b90506000610ec78361271f565b9050610ed3834261272b565b92505b62ffffff8116600090815260066020526040902054610ef68186156127a1565b61101a57610f0484836127d0565b935060008080610f188488888b898e612858565b91945092509050821561101657610f2f8984612031565b9850610f3b8d8361239c565b9c506000610f56610f4b89612a7e565b839061ffff16612a8e565b90508015610f7757610f688b8261239c565b9a50610f748482612031565b93505b610f8b83610f85878761239c565b90612031565b62ffffff87166000908152600660205260409020556001600160a01b038f16337fad7d6f97abf51ce18e17a38f4d70e975be9c0708474987bb3e26ad21bd93ca70888787610fd88e612b04565b6040805162ffffff9586168152602081019490945283019190915290911660608201526080810186905260a0810185905260c00160405180910390a3505b5050505b60008690036110295750611073565b60006110358684612b15565b905062ffffff8116158061104d575062ffffff818116145b1561106b57604051631a6d7fb160e31b815260040160405180910390fd5b915050610ed6565b60008990036110955760405163439df85d60e11b815260040160405180910390fd5b61109f878a612031565b60045560058690556110b3600a8483612b37565b92506110bf8382612475565b60035583156110e0576110db6110d36121ef565b8a908c612c52565b6110fb565b6110fb3660011981013560f01c90033560601c8a908c612c92565b6111126001600080516020615eac83398151915255565b61111f88338c878d612ca3565b505050505050505092915050565b6003546078906000908190819081908161114682612cef565b905061ffff8116156111ce57600061115f600a83612cff565b9650905061116c81612d5d565b965061117781612d69565b94508464ffffffffff1660000361118d57600095505b61ffff8616156111cc576111be8661ffff168361ffff16816111b1576111b1615b2a565b600a916001910601612d8a565b90506111c981612d69565b93505b505b50509091929394565b6111df612087565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461122857604051632486085360e01b815260040160405180910390fd5b61123a600354888888888888886124c1565b6107756001600080516020615eac83398151915255565b600080600080600080600080600354905061126b81612d5d565b975061127681612dd6565b965061128181612de6565b955061128c81612df6565b945061129781612e06565b93506112a281612a7e565b92506112ad81612e17565b91505090919293949596565b600080600080600354905060006112cf82612cef565b905061ffff811615806112e85750428664ffffffffff16115b156112ff57600080600094509450945050506113b1565b600061130d600a8389612e28565b91985096509450905064ffffffffff80881690821610156113ad576113436113348461271f565b849064ffffffffff8a16612f4b565b925060006113518289615b56565b90508064ffffffffff166113648561271f565b62ffffff166113739190615b74565b61137d9088615b9f565b96508064ffffffffff1661139085612b04565b62ffffff1661139f9190615b74565b6113a99087615b9f565b9550505b5050505b9193909250565b600080600080600060035490506113ce81612b04565b94506113d981612f63565b93506113e481612f74565b92506113ef81612f85565b91505090919293565b6000611402612087565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ccb20c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114849190615a9f565b6001600160a01b0316336001600160a01b0316146114b557604051630f8937c560e21b815260040160405180910390fd5b6005546001600160801b038116608082901c6000611510826114d85760006114db565b60015b60ff166000856001600160801b0316116114f65760006114f9565b60015b60ff169060801b6001600160801b03919091161790565b905061151c8482612031565b945084156115925760058190556004546115369086612031565b60045560405185815233907f3f41a5ddc53701cc7db577ade4f1fca9838a8ec0b5ea50b9f0f5d17bc4554e329060200160405180910390a26115923660011981013560f01c90033560601c6115896121ef565b879190336123d6565b505050506115ad6001600080516020615eac83398151915255565b90565b60006115bc8383612b15565b9392505050565b60035460009083908290816115d661206b565b905060006115e38361271f565b90506115ef834261272b565b92505b62ffffff8116600090815260066020526040812054611612908915612f98565b90506001600160801b038116156116f857600061163462ffffff841685612631565b90506000876001600160801b0316836001600160801b0316116116575782611659565b875b905061166586856127d0565b955060008a611688576116836001600160801b038316846080612fb8565b61169d565b61169d6001600160801b038316608085612fee565b905060006116ab8888613024565b905060006116c26001600160801b03841683613043565b90506116ce8184615bbf565b6116d8908d615bbf565b9b506116e4848c615bdf565b9a506116f0818b615bbf565b995050505050505b856001600160801b031660000361170f5750611747565b600061171b8984612b15565b905062ffffff81161580611733575062ffffff818116145b1561173f575050611747565b9150506115f2565b5050509250925092565b611759612087565b600354600061176782612cef565b90508061ffff166000036117865750600161178282826130b5565b6003555b611792600a82856130d2565b60405161ffff8416815233907fc975541e72d695746a43ba65745d79963a23082637c8f4609354d9bcf70194d69060200160405180910390a250506117e46001600080516020615eac83398151915255565b50565b606086336117f582826131bb565b61182a5760405163548f773d60e01b81526001600160a01b038084166004830152821660248201526044015b60405180910390fd5b611832612087565b85158061183f5750858414155b1561185d57604051633ab7870760e01b815260040160405180910390fd5b620100095461187281338c8c8c8c8c8c613207565b89876001600160401b0381111561188b5761188b615abc565b6040519080825280602002602001820160405280156118b4578160200160208202803683370190505b5094506000805b89811015611a085760006118e68c8c848181106118da576118da615af7565b9050602002013561323c565b905060008a8a848181106118fc576118fc615af7565b9050602002013590508060000361192d57604051636996a92560e01b815262ffffff83166004820152602401611821565b62ffffff8216600081815260066020908152604080832054600190925290912054909161195c90889085613267565b60006119698385846132e8565b905060008190036119945760405163fd44792960e01b815262ffffff86166004820152602401611821565b61199e8382612031565b92508382036119b4576119b2600786613360565b505b62ffffff851660009081526006602052604090208390558b5181908d90889081106119e1576119e1615af7565b60209081029190910101526119f6878261239c565b965085600101955050505050506118bb565b50600454611a169082612031565b6004556040516000906001600160a01b0384169033907f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb90611a5f908f908f908f908f90615c31565b60405180910390a48a6001600160a01b0316336001600160a01b03167fa32e146844d6144a22e94c586715a1317d58a8aa3581ec33d040113ddcb243508c8c8a604051611aae93929190615c58565b60405180910390a3611ada3660011981013560f01c90033560601c611ad16121ef565b8391908e6123d6565b611af16001600080516020615eac83398151915255565b611b018333848e8e8e8e8e613402565b50505050509695505050505050565b611b18612087565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b6157604051632486085360e01b815260040160405180910390fd5b600354611b75611b7082612496565b613437565b600355337f282afaeeae84c1d85ad1424a3aa2ddbedaeefca3b1e53d889d15265fe44db7fc611ba383612f74565b611bac84612f63565b6040805162ffffff93841681529290911660208301520160405180910390a250611be36001600080516020615eac83398151915255565b565b60055460009081906001600160801b0381169060801c610710565b60006106da6121ef565b60006106da60035461271f565b611c2233838361346c565b5050565b6000808080611c3e6001600160801b03871686613554565b6003549091506000611c4e61206b565b90506000611c5b8361271f565b9050611c67834261272b565b92505b62ffffff8116600090815260066020526040902054611c8a818a156127a1565b611cf757611c9884836127d0565b935060008080611cac8488888f898d612858565b919450925090508215611cf357611cc38884612031565b9750611cd0828d15612f98565b611cda908b615bbf565b9950611ce6818d612f98565b611cf0908a615bbf565b98505b5050505b6000859003611d065750611d3e565b6000611d128a84612b15565b905062ffffff81161580611d2a575062ffffff818116145b15611d36575050611d3e565b915050611c6a565b611d488489612f98565b9650505050509250925092565b60006115bc83836131bb565b611d69612087565b6000839003611d8b5760405163727ab02160e11b815260040160405180910390fd5b62010009546004546000611d9e86613565565b9050611dac8333898961366d565b611dd03660011981013560f01c90033560601c611dc76121ef565b8891908a6123d6565b6000806001600160a01b038916631faa6b8760e01b333660011981013560f01c90033560601c611dfe6121ef565b8c888d8d604051602401611e189796959493929190615ca7565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611e569190615ce8565b6000604051808303816000865af19150503d8060008114611e93576040519150601f19603f3d011682016040523d82523d6000602084013e611e98565b606091505b5091509150811580611eac57508051602014155b80611eea57507fab5c473bce5960a8292e9c8db82f9272504caab4e9ef09553fc112f82b62a3c281806020019051810190611ee79190615d04565b14155b15611f0857604051634a57011360e01b815260040160405180910390fd5b6000611f2e3660011981013560f01c90033560601c611f256121ef565b60009190612205565b9050611f44611f3d868661239c565b82906136b1565b15611f6257604051630e3c717160e11b815260040160405180910390fd5b6000611f6e8287612031565b6004839055600554909150611f83908261239c565b6005556003546001600160a01b038c169033907fd126bd9d94daca8e55ffd8283fac05394aec8326c6b1639e1e8a445fbe8bbc7d90611fc19061271f565b6040805162ffffff9092168252602082018f905281018590526060810185905260800160405180910390a36120036001600080516020615eac83398151915255565b61201087338d88856136f5565b5050505050505050505050565b60006106d461202a61206b565b8390613740565b8082038281118061204d57506001600160801b03808416908216115b156106d45760405163e599af5560e01b815260040160405180910390fd5b60003660011981013560f090811c90910360280135901c905090565b600080516020615eac8339815191528054600119016120b957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b600160a81b88161561212b5761212b886379c8ccf760e01b898989898989896040516024016120f49796959493929190615d1d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613785565b5050505050505050565b853361214182826131bb565b6121715760405163548f773d60e01b81526001600160a01b03808416600483015282166024820152604401611821565b61212b8888888888886137e9565b6001600080516020615eac83398151915255565b600160a91b88161561212b5761212b886367ddb27860e01b898989898989896040516024016120f49796959493929190615d1d565b82156108d9576108d983634e430b5a60e01b8585856040516024016120f493929190615d73565b3660011981013560f01c90036014013560601c90565b600061223d84610f8561221785613995565b61222087613995565b6001600160801b03169060801b6001600160801b03919091161790565b949350505050565b600160a41b8616156122765761227686630d4abdb360e01b87878787876040516024016120f4959493929190615d8d565b505050505050565b60008061228961206b565b600354909150600061229a8261271f565b905086935060005b8881101561238f576000806122d88a8d8d868181106122c3576122c3615af7565b90506020020135613a0490919063ffffffff16565b9150915060008060006122ee898886888c613a4d565b919450925090506122ff8a83612031565b99508362ffffff168b60000151878151811061231d5761231d615af7565b602002602001018181525050808b60200151878151811061234057612340615af7565b602002602001018181525050828b60400151878151811061236357612363615af7565b60200260200101818152505061237f8c8562ffffff1685613c4d565b85600101955050505050506122a2565b5050505095945050505050565b818101828110806123b857506001600160801b03808416908216105b156106d4576040516316692de960e01b815260040160405180910390fd5b6001600160801b038416608085901c8115612408576124086001600160a01b038616846001600160801b038516613c9a565b6001600160801b03811615612276576122766001600160a01b038516846001600160801b038416613c9a565b600160a51b8616156122765761227686637a51a4c660e01b87878787876040516024016120f4959493929190615d8d565b61246d613cec565b611be3613d35565b60006001600160e81b0383166001600160e81b031960e884901b16176115bc565b6000806124a28361271f565b905062ffffff60981b19831662ffffff60981b609883901b16176115bc565b61ffff87161580156124d5575061ffff8616155b80156124e3575061ffff8516155b80156124f1575061ffff8416155b8015612500575062ffffff8316155b801561250e575061ffff8216155b801561251d575062ffffff8116155b1561253b576040516331375e0360e11b815260040160405180910390fd5b61254b8888888888888888613d3d565b9750600061255761206b565b905060006125658a84613e56565b905060006125738284613e9e565b61257d8385613ede565b6125879190615dcc565b905067016345785d8a00008111156125b2576040516372db9c0b60e11b815260040160405180910390fd5b50505060038890556040805161ffff8981168252888116602083015287811682840152868116606083015262ffffff868116608084015290851660a0830152831660c0820152905133917fd09e5ddc721ff14c5c1e66a305cbba1fd70b82c5232bc391aad6f55e62e4b046919081900360e00190a25050505050505050565b600061271061ffff60801b608084901b1604600160801b0162ffffff8416627fffff190161265f8282613f02565b95945050505050565b6000806126758460801c90565b905061223d8161268485613995565b61268e9190615bdf565b6001600160801b031660801b90565b60006001600160801b03831661223d816126b685613995565b6126c09190615bdf565b6001600160801b031690565b600160a01b851615612718576040516001600160a01b0380861660248301528416604482015282151560648201526084810182905261271890869063feee373560e01b9060a4016120f4565b5050505050565b600060e882901c6106d4565b60008061273784612f85565b6127489064ffffffffff1684615ddf565b905061275384612dd6565b61ffff1681106127975761276684612496565b935061277184612de6565b61ffff16811061278b57612786846000614162565b612794565b61279484613437565b93505b61223d84846141aa565b6000816127c1576127b28360801c90565b6001600160801b0316156115bc565b50506001600160801b03161590565b6000806127dc84612f74565b62ffffff169050600080828562ffffff16116127ff578462ffffff168303612808565b828562ffffff16035b9150612710820261281887612f63565b62ffffff16019050600061282b87612e17565b62ffffff16905080821161283f5781612841565b805b915061284d8783613e56565b979650505050505050565b600080808061286c62ffffff871689612631565b9050600061287b8b8915612f98565b90506000886128a6576128a161289c6001600160801b038416856080612fb8565b6141d9565b6128be565b6128be61289c6001600160801b038416608086612fee565b905060006128cc8c8c613024565b905060006128e36001600160801b03841683613043565b90506128ef8184615bbf565b925060006128fd8a8d612f98565b9050600080856001600160801b0316836001600160801b03161061292857508491508290508561299e565b61293b6001600160801b03841686614203565b915060006129498385615bdf565b6001600160801b031690508e61296d5761296861289c8260808c614263565b61297c565b61297c61289c828b608061428d565b9150876001600160801b0316826001600160801b0316111561299c578791505b505b8d6129d8576129b6836001600160801b031660801b90565b6001600160801b0382166129d3846001600160801b031660801b90565b612a00565b6001600160801b0383166129f5826001600160801b031660801b90565b6001600160801b0384165b809b50819c50829d50505050505050505050507d09745258e83de0d0f4e400fce79aca44773dd596d31a6d336ca2a775b611612a52612a4c85610f85888f61239c90919063ffffffff16565b836142fb565b1115612a715760405163a2d7652760e01b815260040160405180910390fd5b5096509650969350505050565b60006106d482604e1c613fff1690565b6000816001600160801b0316600003612aa9575060006106d4565b6127106001600160801b038316811015612ad657604051631514a94960e21b815260040160405180910390fd5b6001600160801b03848116840282900490608086811c86028490049183169082901b175b9695505050505050565b60006106d48260701c620fffff1690565b600082612b2c57612b27600783614317565b6115bc565b6115bc600783614463565b600080612b4384612cef565b90508061ffff16600003612b5a57839150506115bc565b6000612b668683612d8a565b90506000612b7382614593565b90506000612b808361459f565b612b8d9060ff1683615df2565b90508064ffffffffff16612ba0426145ae565b64ffffffffff161115612c46576000806000612be58464ffffffffff164203612bc88c61271f565b612bd18d612b04565b612bdb8e8e6145d6565b8a93929190614606565b9250925092506000612bf687612d5d565b905064ffffffffff861642036078811115612c26575096879006600101964295506000612c238c8a6130b5565b9b505b612c3482868686858c61466b565b97505050505050612c468885856146d1565b50949695505050505050565b6000612c5e8460801c90565b90506001600160801b03811615612c8c57612c8c6001600160a01b038416836001600160801b038416613c9a565b50505050565b60006001600160801b038416612c5e565b600160a11b851615612718576040516001600160a01b038086166024830152841660448201528215156064820152608481018290526127189086906353e8079b60e01b9060a4016120f4565b60006106d48260d81c61ffff1690565b600080612d0c8484612d8a565b9150612d1782612d5d565b90508061ffff168361ffff1614612d5657612d3a612d358583612d8a565b612d5d565b90508061ffff168361ffff1611612d515780612d53565b825b90505b9250929050565b600061ffff82166106d4565b6000612d748261459f565b60ff16612d8083614593565b6106d49190615df2565b6000818061ffff16600003612db25760405163944e113960e01b815260040160405180910390fd5b8361ffff60001985018116908110612dcc57612dcc615af7565b0154949350505050565b60006106d48260101c610fff1690565b60006106d482601c1c610fff1690565b60006106d48260281c613fff1690565b60006106d48260361c62ffffff1690565b60006106d482605c1c620fffff1690565b600080600080600080612e3b8989612cff565b909250905064ffffffffff8716612e728a612e56848c615e10565b61ffff1661ffff8110612e6b57612e6b615af7565b0154612d69565b64ffffffffff161115612e9857604051631c4e7f9560e21b815260040160405180910390fd5b612ea182612d69565b95508664ffffffffff168664ffffffffff1611612ee35785612ec28361471a565b612ecb8461472f565b612ed485614744565b95509550955095505050612f42565b869550600080612ef58b8b8b86614759565b91509150600089612f0583612d69565b612f0f9190615b56565b90506000612f1c84612d69565b612f26908c615b56565b9050612f34848484846148ab565b919a50985096505050505050505b93509350935093565b6000612f57848361272b565b935061223d84846127d0565b60006106d48260841c620fffff1690565b60006106d48260981c62ffffff1690565b60006106d48260b01c64ffffffffff1690565b600081612fa957612b278360801c90565b6001600160801b0383166115bc565b6000612fc584848461428d565b9050600160ff83161b80612fdb57612fdb615b2a565b838509156115bc5761223d600182615dcc565b6000612ffb848484614263565b9050818061300b5761300b615b2a565b600160ff85161b8509156115bc5761223d600182615dcc565b60006115bc6130338484613e9e565b61303d8585613ede565b016141d9565b60008167016345785d8a0000816001600160801b0316111561307857604051638630bc6b60e01b815260040160405180910390fd5b6001600160801b03808416670de0b6b3a764000081900391829160001991881602820101816130a9576130a9615b2a565b049250505b5092915050565b600061ffff60d81b19831661ffff60d81b60d884901b16176115bc565b60006130de8484612d8a565b905060006130eb82612d5d565b90508261ffff168161ffff161061311557604051632c57574160e21b815260040160405180910390fd5b60008461ffff168261ffff16146131465761ffff82161561313f5761313a8683612d8a565b613148565b6000613148565b825b9050600061315582612d5d565b61ffff169050808661ffff161161316c5780613172565b8561ffff165b905061ffff83165b8561ffff168110156131a45781888261ffff811061319a5761319a615af7565b015560010161317a565b50610775878761ffff8681168818908916176146d1565b6000816001600160a01b0316836001600160a01b031614806115bc5750506001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b600160a61b88161561212b5761212b8863ea9db9d360e01b898989898989896040516024016120f49796959493929190615d1d565b8062ffffff8116811461326257604051639b63641560e01b815260040160405180910390fd5b919050565b6001600160a01b0383166000908152602081815260408083208584529182905290912054828110156132c457604051625b387760e31b81526001600160a01b03861660048201526024810185905260448101849052606401611821565b60009384526001602090815260408086208054869003905592905292209103905550565b60006001600160801b038416608085901c8280831561331b5761331861289c886001600160801b03871689614a09565b91505b6001600160801b038316156133445761334161289c886001600160801b03861689614a09565b90505b608081901b6001600160801b0383161798975050505050505050565b61ffff600882901c166000818152600284016020526040812054909190600160ff85161b1981168082146133f657600083815260028701602052604081208290558190036133ea5750600882901c6000818152600187810160205260408220805460ff87169290921b199091169081905591908290036133e8578654600160ff83161b191687555b505b600193505050506106d4565b50600095945050505050565b600160a71b88161561212b5761212b8863fdc2725760e01b898989898989896040516024016120f49796959493929190615d1d565b60008061344383612b04565b62ffffff169050600061345584612df6565b61ffff1690506127108282020461265f8582614162565b826001600160a01b038116158061348b57506001600160a01b03811630145b156134a9576040516345c210e760e11b815260040160405180910390fd5b826001600160a01b0316846001600160a01b0316036134e65760405163782ee70760e01b81526001600160a01b0385166004820152602401611821565b6001600160a01b03848116600081815260026020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b600081612fa957612b278360801b90565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fd90c2be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ea9190615d04565b90506001600160801b0383811690608085901c90670de0b6b3a763ffff9061362390670de0b6b3a7640000908616850283015b046141d9565b9250613655670de0b6b3a764000082866001600160801b0316856001600160801b031602018161361d5761361d615b2a565b915050608081901b6001600160801b0383161761265f565b600160a21b841615612c8c576040516001600160a01b0380851660248301528316604482015260648101829052612c8c90859063505d903360e01b906084016120f4565b60006001600160801b0383811690608085811c9185169085901c8184108061284d5750806001600160801b0316836001600160801b03161094505050505092915050565b600160a31b851615612718576040516001600160a01b0380861660248301528416604482015260648101839052608481018290526127189086906360bed5f360e01b9060a4016120f4565b600061271061ffff60801b608084901b1604600160801b018161376282614a29565b61376b86614a29565b6137759190615e31565b905061265f81628000000161323c565b600080839050602083015160e01c602060008551602087016000865af192503d1515831516156137b9573d6000803e3d6000fd5b8060005160e01c14601f3d1116831692505081612c8c57604051636c93cb9b60e01b815260040160405180910390fd5b828180821461380b576040516340311ffd60e11b815260040160405180910390fd5b866001600160a01b038116158061382a57506001600160a01b03811630145b15613848576040516345c210e760e11b815260040160405180910390fd5b6001600160a01b03808a16600090815260208190526040808220928b1682528120905b8881101561392c5760008a8a8381811061388757613887615af7565b90506020020135905060008989848181106138a4576138a4615af7565b600085815260208981526040909120549102929092013592505081811015613901578e83836040516358b4690f60e01b8152600401611821939291906001600160a01b039390931683526020830191909152604082015260600190565b600092835260208681526040808520928490039092558590529091208054909101905560010161386b565b50896001600160a01b03168b6001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8c8c8c8c6040516139809493929190615c31565b60405180910390a45050505050505050505050565b6040516370a0823160e01b81523060048201526000906106d4906001600160a01b038416906370a0823190602401602060405180830381865afa1580156139e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289c9190615d04565b6000806000806000613a1587614b05565b670de0b6b3a764000060808a811c90930281900490921b6001600160801b03998a169093029190910490971617979596505050505050565b62ffffff83166000818152600660205260408120549091829182918290613a74908b612631565b90506000613a938962ffffff1660009081526001602052604090205490565b9050613aa183898484614ba4565b909650945084935062ffffff808b16908a1603613bcb57613ac3878a42612f4b565b96506000613ad584898e89868c614d2a565b90508015613bc5576000613af384613aed8985612031565b906142fb565b90506000613b0186866142fb565b9050613b0e828583614a09565b98506000613b29613b1e8c612a7e565b859061ffff16612a8e565b90508015613b4f57613b3b8882612031565b600554909850613b4b908261239c565b6005555b613b5b600a8c8f612b37565b9a508a600381905550336001600160a01b03167f3f0b46725027bb418b2005f4683538eccdbcdf1de2b8649a29dbd9c507d16ff48e8684604051613bb99392919062ffffff9390931683526020830191909152604082015260600190565b60405180910390a25050505b50613bd6565b613bd6858b8b614e1f565b851580613be1575083155b15613c0657604051634c98d35760e11b815262ffffff8a166004820152602401611821565b80600003613c1b57613c1960078a614e85565b505b613c25838561239c565b62ffffff90991660009081526006602052604090209890985550929891975095509350505050565b60008281526001602052604081208054839290613c6b908490615dcc565b90915550506001600160a01b039092166000908152602081815260408083209383529290522080549091019055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526108d9908490614f12565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16611be357604051631afcd79f60e31b815260040160405180910390fd5b61217f613cec565b60008561ffff168761ffff161180613d5a5750610fff8661ffff16115b80613d6a57506127108561ffff16115b80613d7a57506109c48361ffff16115b80613d8c5750620fffff8262ffffff16115b15613daa57604051631c07203f60e01b815260040160405180910390fd5b605c82901b6dfffff00000000000000000000000166dffffffffffffffffffffffffffff1991821661ffff8a1690811760108a901b630fff000016908117601c8a901b64fff00000001690811760288a901b663fff00000000001690811760368a901b693fffffc000000000000016908117604e8a901b6b0fffc000000000000000000016908117871797949095179092171717909117909117908a16175b9998505050505050505050565b6000620fffff8262ffffff161115613e8157604051631c07203f60e01b815260040160405180910390fd5b620fffff60701b198316620fffff60701b607084901b16176115bc565b600080613eaa84612e06565b62ffffff16905080156130ae5760008361ffff16613ec786612b04565b62ffffff16029050606460638280028402016130a9565b60008161ffff16613eee84612d5d565b61ffff16026402540be40002905092915050565b600080600083600003613f1e5750600160801b91506106d49050565b50826000811215613f30579015906000035b6210000081101561412057600160801b9250846001600160801b03811115613f5a57911591600019045b6001821615613f6b5792830260801c925b800260801c6002821615613f815792830260801c925b800260801c6004821615613f975792830260801c925b800260801c6008821615613fad5792830260801c925b800260801c6010821615613fc35792830260801c925b800260801c6020821615613fd95792830260801c925b800260801c6040821615613fef5792830260801c925b8002608090811c908216156140065792830260801c925b800260801c61010082161561401d5792830260801c925b800260801c6102008216156140345792830260801c925b800260801c61040082161561404b5792830260801c925b800260801c6108008216156140625792830260801c925b800260801c6110008216156140795792830260801c925b800260801c6120008216156140905792830260801c925b800260801c6140008216156140a75792830260801c925b800260801c6180008216156140be5792830260801c925b800260801c620100008216156140d65792830260801c925b800260801c620200008216156140ee5792830260801c925b800260801c620400008216156141065792830260801c925b800260801c6208000082161561411e5792830260801c925b505b8260000361414b57604051631dba598d60e11b81526004810186905260248101859052604401611821565b81614156578261265f565b61265f83600019615e5f565b6000620fffff8262ffffff16111561418d57604051631c07203f60e01b815260040160405180910390fd5b620fffff60841b198316620fffff60841b608484901b16176115bc565b6000806141b6836145ae565b905064ffffffffff60b01b19841664ffffffffff60b01b60b083901b161761223d565b806001600160801b038116811461326257604051632f45db3d60e21b815260040160405180910390fd5b60008167016345785d8a0000816001600160801b0316111561423857604051638630bc6b60e01b815260040160405180910390fd5b670de0b6b3a7640000670de0b6b3a763ffff6001600160801b03868116908616020104949350505050565b600060ff831684811b9061ffff6101008290031686901c90612afa9087906001901b868585614f75565b600080600061429c8686615021565b91509150816000146142b2578360ff1682901c92505b80156142f257600160ff85161b81106142de57604051638e471a8960e01b815260040160405180910390fd5b8360ff166101000361ffff1681901b830192505b50509392505050565b60006001600160801b038316608084901c61265f828286615040565b60008061ffff600884901c1660ff80851690811461436c576000828152600287016020526040812054935061434c84836150ab565b9050600019811461436a5760089290921b90911792506106d4915050565b505b5060ff80821690600883901c9082146143e6576000818152600188016020526040812054945061439c85846150ab565b905060001981146143e457600882901b8117600081815260028a016020526040902054955093506143cc856150ba565b60ff1660088560001c901b17955050505050506106d4565b505b60ff818116925082146144565786549350600061440385846150ab565b90506000198114614454576000818152600189016020526040902054945090508061442d856150ba565b60ff16600883901b17600081815260028a016020526040902054955093506143cc856150ba565b505b5060009695505050505050565b60008061ffff600884901c1660ff841680156144b657600082815260028701602052604081205493506144968483615156565b905060001981146144b45760089290921b90911792506106d4915050565b505b5060ff8116600882901c811561451557600081815260018801602052604081205494506144e38584615156565b9050600019811461451357600882901b8117600081815260028a016020526040902054955093506143cc85615166565b505b60ff811691508115614584578654935060006145318584615156565b90506000198114614582576000818152600189016020526040902054945090508061455b85615166565b60ff16600883901b17600081815260028a016020526040902054955093506143cc85615166565b505b5062ffffff9695505050505050565b600060d882901c6106d4565b60006106d48260d01c60ff1690565b8064ffffffffff81168114613262576040516350dbfc8760e11b815260040160405180910390fd5b6000806145e28461271f565b90508062ffffff168362ffffff16116145fd5782810361223d565b90910392915050565b64ffffffffff841662ffffff84811682029184821681029184160261462a8861471a565b6146349084615b9f565b925061463f8861472f565b6146499083615b9f565b915061465488614744565b61465e9082615b9f565b9050955095509592505050565b60d082901b60ff60d01b16609084901b67ffffffffffffffff60901b16605086901b71ffffffffffffffff0000000000000000000016601088901b69ffffffffffffffff00001661ffff8a161717171760d882901b6001600160d81b031916811761284d565b818061ffff166000036146f75760405163944e113960e01b815260040160405180910390fd5b818461ffff6000198601811690811061471257614712615af7565b015550505050565b60006106d48260101c6001600160401b031690565b60006106d48260501c6001600160401b031690565b60006106d48260901c6001600160401b031690565b6000808080614769600186615e73565b61ffff16905060008060008961ffff1690505b83851161482757600060016147918688615dcc565b901c9050888183089a508b61ffff808d169081106147b1576147b1615af7565b015493506147be84612d69565b92508964ffffffffff168364ffffffffff1611156147e8576147e1600182615ddf565b9450614821565b8964ffffffffff168364ffffffffff16101561481057614809816001615dcc565b9550614821565b8384975097505050505050506148a2565b5061477c565b8164ffffffffff168964ffffffffff161015614878578961ffff1660000361484d578799505b8a61ffff6000198c01811690811061486757614867615af7565b0154839650965050505050506148a2565b8760018b089950828b61ffff808d1690811061489657614896615af7565b01549650965050505050505b94509492505050565b6000806000806148ba8861471a565b6001600160401b0316905060006148d08961472f565b6001600160401b0316905060006148e68a614744565b6001600160401b031690508664ffffffffff1660000361490c57919450925090506149ff565b60006149178a61471a565b6001600160401b03169050600061492d8b61472f565b6001600160401b0316905060006149438c614744565b6001600160401b031690508a64ffffffffff1660000361496d57919750955093506149ff92505050565b600061498364ffffffffff808d16908e16615dcc565b9050808b64ffffffffff1685028d64ffffffffff16890201816149a8576149a8615b2a565b049950808b64ffffffffff1684028d64ffffffffff16880201816149ce576149ce615b2a565b049850808b64ffffffffff1683028d64ffffffffff16870201816149f4576149f4615b2a565b049750505050505050505b9450945094915050565b6000806000614a188686615021565b91509150612afa8686868585614f75565b600081600103614a3c5750607f19919050565b81600003614a5d5760405163125946cf60e11b815260040160405180910390fd5b60019190911c9060006001607f1b8310614a7957506001614a94565b5060001982600160fe1b81614a9057614a90615b2a565b0492505b6000614aa3607f85901c615166565b60ff607f1b607f82901b16935060ff16905083811c6001607f1b8114614afa576001607e1b5b6000811315614af857908002607f1c90600160801b8210614af0579384019360019190911c905b60011d614ac9565b505b50500260011b919050565b60008080614b1c8460581c6001600160401b031690565b9250614b318460181c6001600160401b031690565b91505062ffffff831672ffffffffffffffffffffffffffffffffffffff841180614b6b5750670de0b6b3a7640000836001600160401b0316115b80614b865750670de0b6b3a7640000826001600160401b0316115b156113b157604051637752557f60e11b815260040160405180910390fd5b6000806001600160801b038516608086901c82614bc2838389615040565b905080600003614bdc5750600093508392506148a2915050565b6000614be88a896142fb565b9050801580614bf5575086155b15614c1157614c0382615200565b8995509550505050506148a2565b614c1c828883614a09565b95506000614c2b87838a615272565b905080831115614cca576000614c418285615ddf565b9050600160801b8110614c8257608081901c858111614c605780614c62565b855b9050614c6e8187615ddf565b9550614c7e608082901b83615ddf565b9150505b898110614cb6576000614c958b83615e5f565b9050868111614ca45780614ca6565b865b9050614cb28188615ddf565b9650505b608085901b6001600160801b038716179a50505b7d09745258e83de0d0f4e400fce79aca44773dd596d31a6d336ca2a775b611614cfc614cf68d8d61239c565b8b6142fb565b1115614d1b5760405163a2d7652760e01b815260040160405180910390fd5b50949997985050505050505050565b600081600003614d3c57506000612afa565b6001600160801b038416608085901c600080614d6e6106fc614d5e8d8b61239c565b88614d69818c615dcc565b6132e8565b91509150836001600160801b0316826001600160801b03161115614dd1576000614db4614d9b8c8c613024565b614da58487615bdf565b6001600160801b03169061528f565b9050614dc9816001600160801b031660801b90565b955050614e11565b826001600160801b0316816001600160801b03161115614e11576000614e04614dfa8c8c613024565b614da58588615bdf565b6001600160801b03169550505b505050509695505050505050565b8162ffffff168162ffffff16108015614e3b5750608083901b15155b80614e6057508162ffffff168162ffffff16118015614e6057506001600160801b0383115b156108d95760405163227bd87160e21b815262ffffff82166004820152602401611821565b61ffff600882901c166000818152600284016020526040812054909190600160ff85161b81178082146133f657600083815260028701602052604081208290558290036133ea57600883901c6000818152600180890160205260408220805460ff88169290921b8217905593508390036133e8578654600160ff83161b17875550600193505050506106d4565b6000614f276001600160a01b038416836152f9565b90508051600014158015614f4c575080806020019051810190614f4a9190615e8e565b155b156108d957604051635274afe760e01b81526001600160a01b0384166004820152602401611821565b600081600003614f9657838381614f8e57614f8e615b2a565b04905061265f565b838210614fb6576040516313eae71560e01b815260040160405180910390fd5b600084868809600186198101871660008190038190049091018683119095039490940294038390049390931760029290940460038102831880820284030280820284030280820284030280820284030280820284030290810290920390910292909202949350505050565b6000806000198385098385029250828110838203039150509250929050565b6000831561507b57508083028184828161505c5761505c615b2a565b041461507b576040516363f1e01f60e01b815260040160405180910390fd5b82156115bc5760809290921b918201828110156115bc576040516363f1e01f60e01b815260040160405180910390fd5b60006115bc8360018401615307565b60008160801b80156150ce57608091508092505b8260401b905080156150e1579150604001815b8260201b905080156150f4579150602001815b8260101b90508015615107579150601001815b8260081b9050801561511a579150600801815b8260041b9050801561512d579150600401815b8260021b90508015615140579150600201815b508160011b1561514e576001015b60ff03919050565b60006115bc836000198401615335565b60006001600160801b0382111561517f5750608090811c905b6001600160401b0382111561519657604091821c91015b63ffffffff8211156151aa57602091821c91015b61ffff8211156151bc57601091821c91015b60ff8211156151cd57600891821c91015b600f8211156151de57600491821c91015b60038211156151ef57600291821c91015b600182111561326257600101919050565b60008160000361521257506000919050565b600061521d83615166565b600181811c607f1681811b9086901c01811c80860401811c80860401811c80860401811c80860401811c80860401811c80860401901c9384900493925060ff16905082821061526c57826115bc565b50919050565b600061527f848484614a09565b90508180612fdb57612fdb615b2a565b60008167016345785d8a0000816001600160801b031611156152c457604051638630bc6b60e01b815260040160405180910390fd5b6ec097ce7bc90715b34b9f1000000000806001600160801b03868116908616908102670de0b6b3a764000091909101026130a9565b60606115bc83836000615366565b60ff81169190911c906000821561532b5781615322846150ba565b0160ff166115bc565b5060001992915050565b60ff8181031691821b91600090831561535b578061535285615166565b60ff160361223d565b506000199392505050565b60608147101561538b5760405163cd78605960e01b8152306004820152602401611821565b600080856001600160a01b031684866040516153a79190615ce8565b60006040518083038185875af1925050503d80600081146153e4576040519150601f19603f3d011682016040523d82523d6000602084013e6153e9565b606091505b5091509150612afa86838360608261540457612b278261544b565b815115801561541b57506001600160a01b0384163b155b1561544457604051639996b31560e01b81526001600160a01b0385166004820152602401611821565b50806115bc565b80511561545b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160a01b03811681146117e457600080fd5b6000806040838503121561549c57600080fd5b82356154a781615474565b946020939093013593505050565b60005b838110156154d05781810151838201526020016154b8565b50506000910152565b60208152600082518060208401526154f88160408501602087016154b5565b601f01601f19169190910160400192915050565b803562ffffff8116811461326257600080fd5b60006020828403121561553157600080fd5b6115bc8261550c565b60008083601f84011261554c57600080fd5b5081356001600160401b0381111561556357600080fd5b6020830191508360208260051b8501011115612d5657600080fd5b6000806000806000806080878903121561559757600080fd5b86356155a281615474565b955060208701356155b281615474565b945060408701356001600160401b03808211156155ce57600080fd5b6155da8a838b0161553a565b909650945060608901359150808211156155f357600080fd5b5061560089828a0161553a565b979a9699509497509295939492505050565b60008083601f84011261562457600080fd5b5081356001600160401b0381111561563b57600080fd5b602083019150836020828501011115612d5657600080fd5b60008060006040848603121561566857600080fd5b8335925060208401356001600160401b0381111561568557600080fd5b61569186828701615612565b9497909650939450505050565b600080600080606085870312156156b457600080fd5b84356156bf81615474565b935060208501356001600160401b038111156156da57600080fd5b6156e68782880161553a565b90945092505060408501356156fa81615474565b939692955090935050565b600081518084526020808501945080840160005b8381101561573557815187529582019590820190600101615719565b509495945050505050565b83815282602082015260606040820152600061265f6060830184615705565b803561ffff8116811461326257600080fd5b600080600080600080600080610100898b03121561578e57600080fd5b6157978961575f565b97506157a560208a0161575f565b96506157b360408a0161575f565b95506157c160608a0161575f565b94506157cf60808a0161550c565b93506157dd60a08a0161575f565b92506157eb60c08a0161550c565b91506157f960e08a0161550c565b90509295985092959890939650565b6000806000806040858703121561581e57600080fd5b84356001600160401b038082111561583557600080fd5b6158418883890161553a565b9096509450602087013591508082111561585a57600080fd5b506158678782880161553a565b95989497509550505050565b6020815260006115bc6020830184615705565b80151581146117e457600080fd5b600080604083850312156158a757600080fd5b82356158b281615886565b915060208301356158c281615474565b809150509250929050565b600080600080600080600060e0888a0312156158e857600080fd5b6158f18861575f565b96506158ff6020890161575f565b955061590d6040890161575f565b945061591b6060890161575f565b93506159296080890161550c565b925061593760a0890161575f565b915061594560c0890161550c565b905092959891949750929550565b60006020828403121561596557600080fd5b813564ffffffffff811681146115bc57600080fd5b6000806040838503121561598d57600080fd5b823561599881615886565b9150612d536020840161550c565b600080604083850312156159b957600080fd5b82356001600160801b03811681146159d057600080fd5b915060208301356158c281615886565b6000602082840312156159f257600080fd5b5035919050565b600060208284031215615a0b57600080fd5b6115bc8261575f565b60008060408385031215615a2757600080fd5b82356159d081615474565b60008060408385031215615a4557600080fd5b82356158b281615474565b60008060008060608587031215615a6657600080fd5b8435615a7181615474565b93506020850135925060408501356001600160401b03811115615a9357600080fd5b61586787828801615612565b600060208284031215615ab157600080fd5b81516115bc81615474565b634e487b7160e01b600052604160045260246000fd5b604081526000615ae56040830185615705565b828103602084015261265f8185615705565b634e487b7160e01b600052603260045260246000fd5b600060208284031215615b1f57600080fd5b81356115bc81615474565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b64ffffffffff8281168282160390808211156130ae576130ae615b40565b6001600160401b03818116838216028082169190828114615b9757615b97615b40565b505092915050565b6001600160401b038181168382160190808211156130ae576130ae615b40565b6001600160801b038181168382160190808211156130ae576130ae615b40565b6001600160801b038281168282160390808211156130ae576130ae615b40565b81835260006001600160fb1b03831115615c1857600080fd5b8260051b80836020870137939093016020019392505050565b604081526000615c45604083018688615bff565b828103602084015261284d818587615bff565b604081526000615c6c604083018587615bff565b8281036020840152612afa8185615705565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b03808a168352808916602084015280881660408401525085606083015284608083015260c060a0830152613e4960c083018486615c7e565b60008251615cfa8184602087016154b5565b9190910192915050565b600060208284031215615d1657600080fd5b5051919050565b60006001600160a01b03808a168352808916602084015280881660408401525060a06060830152615d5260a083018688615bff565b8281036080840152615d65818587615bff565b9a9950505050505050505050565b83815260406020820152600061265f604083018486615c7e565b60006001600160a01b03808816835280871660208401525060806040830152615dba608083018587615bff565b90508260608301529695505050505050565b808201808211156106d4576106d4615b40565b818103818111156106d4576106d4615b40565b64ffffffffff8181168382160190808211156130ae576130ae615b40565b600061ffff80841680615e2557615e25615b2a565b92169190910692915050565b600082615e4057615e40615b2a565b600160ff1b821460001984141615615e5a57615e5a615b40565b500590565b600082615e6e57615e6e615b2a565b500490565b61ffff8281168282160390808211156130ae576130ae615b40565b600060208284031215615ea057600080fd5b81516115bc8161588656fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220018f0f89f65b31631780144aaea0ada58ccbb49676d9c01ecf152c1a3c144f1d64736f6c63430008140033000000000000000000000000a6630671775c4ea2743840f9a5016dcf2a104054