Skip to content

Commit

Permalink
Fix packages imports
Browse files Browse the repository at this point in the history
  • Loading branch information
ak3n committed Nov 30, 2022
1 parent 761808e commit 1944e15
Show file tree
Hide file tree
Showing 77 changed files with 140 additions and 116 deletions.
Expand Up @@ -88,7 +88,6 @@ import GHC.Records (HasField (..))
import Ledger.Address qualified as P
import Ledger.Crypto qualified as Crypto
import Ledger.Index.Internal qualified as P
-- import Ledger.Params qualified as P
import Ledger.Slot (Slot)
import Ledger.Tx (CardanoTx (CardanoApiTx), SomeCardanoApiTx (CardanoApiEmulatorEraTx, SomeTx), addCardanoTxSignature,
onCardanoTx)
Expand Down
4 changes: 2 additions & 2 deletions doc/plutus/tutorials/Auction.hs
Expand Up @@ -42,9 +42,9 @@ import Streaming.Prelude qualified as S
import Wallet.Emulator.Folds qualified as Folds
import Wallet.Emulator.Stream qualified as Stream

import Cardano.Node.Emulator.TimeSlot (SlotConfig)
import Cardano.Node.Emulator.TimeSlot qualified as TimeSlot
import Ledger qualified
import Ledger.TimeSlot (SlotConfig)
import Ledger.TimeSlot qualified as TimeSlot
import Plutus.Contract.Test.ContractModel
import Plutus.Contract.Test.ContractModel.CrashTolerance
import Plutus.Contract.Test.ContractModel.Symbolics (toSymValue)
Expand Down
2 changes: 1 addition & 1 deletion doc/plutus/tutorials/Escrow4.hs
Expand Up @@ -35,8 +35,8 @@ import Plutus.V1.Ledger.Api (Datum)
import Plutus.Trace.Emulator qualified as Trace
import PlutusTx.Monoid (inv)

import Cardano.Node.Emulator.TimeSlot (SlotConfig (scSlotLength), scSlotZeroTime)
import Data.Default (Default (def))
import Ledger.TimeSlot (SlotConfig (scSlotLength), scSlotZeroTime)
import Plutus.Contracts.Escrow (EscrowError, EscrowParams (EscrowParams, escrowDeadline, escrowTargets), EscrowSchema,
payEp, payToPaymentPubKeyTarget, redeemEp, refundEp)
import Test.QuickCheck (Arbitrary (arbitrary, shrink), Gen, Positive (getPositive), Property, choose, elements,
Expand Down
2 changes: 1 addition & 1 deletion doc/plutus/tutorials/Escrow5.hs
Expand Up @@ -35,8 +35,8 @@ import Plutus.V1.Ledger.Api (Datum)
import Plutus.Trace.Emulator qualified as Trace
import PlutusTx.Monoid (inv)

import Cardano.Node.Emulator.TimeSlot (SlotConfig (scSlotLength), scSlotZeroTime)
import Data.Default (Default (def))
import Ledger.TimeSlot (SlotConfig (scSlotLength), scSlotZeroTime)
import Plutus.Contract.Test.ContractModel (coverageIndex, currentSlot, defaultCoverageOptions)
import Plutus.Contract.Test.Coverage (writeCoverageReport)
import Plutus.Contracts.Escrow (EscrowError, EscrowParams (EscrowParams, escrowDeadline, escrowTargets), EscrowSchema,
Expand Down
2 changes: 1 addition & 1 deletion doc/plutus/tutorials/Escrow6.hs
Expand Up @@ -43,8 +43,8 @@ import Plutus.V1.Ledger.Api (Datum)
import Plutus.Trace.Emulator qualified as Trace
import PlutusTx.Monoid (inv)

import Cardano.Node.Emulator.TimeSlot (SlotConfig (scSlotLength), scSlotZeroTime)
import Data.Default (Default (def))
import Ledger.TimeSlot (SlotConfig (scSlotLength), scSlotZeroTime)
import Plutus.Contract.Test.ContractModel (SomeContractInstanceKey (Key), coverageIndex, currentSlot,
defaultCheckOptionsContractModel, defaultCoverageOptions,
propRunActionsWithOptions, quickCheckWithCoverage)
Expand Down
2 changes: 1 addition & 1 deletion doc/plutus/tutorials/GameModel.hs
Expand Up @@ -62,7 +62,7 @@ import Plutus.Contract.Secrets (secretArg)
-- END import Contract.Security

-- START import TimeSlot
import Ledger.TimeSlot qualified as TimeSlot
import Cardano.Node.Emulator.TimeSlot qualified as TimeSlot
-- END import TimeSlot

-- START import Data.Default
Expand Down
3 changes: 2 additions & 1 deletion playground-common/playground-common.cabal
Expand Up @@ -41,7 +41,8 @@ library
-- Local components
--------------------
build-depends:
freer-extras >=1.0.0
cardano-node-emulator >=1.0.0
, freer-extras >=1.0.0
, plutus-chain-index-core >=1.0.0
, plutus-contract >=1.0.0
, plutus-ledger >=1.0.0
Expand Down
4 changes: 2 additions & 2 deletions playground-common/src/PSGenerator/Common.hs
Expand Up @@ -8,6 +8,8 @@ module PSGenerator.Common where

import Auth (AuthRole, AuthStatus)
import Cardano.Api.Shelley (Lovelace, NetworkId)
import Cardano.Node.Emulator.Params (Params)
import Cardano.Node.Emulator.TimeSlot (SlotConfig, SlotConversionError)
import Cardano.Slotting.Slot (EpochNo)
import Control.Applicative (empty, (<|>))
import Control.Lens (ix, (&), (.~), (^.))
Expand Down Expand Up @@ -36,10 +38,8 @@ import Ledger.Credential (Credential, StakingCredential)
import Ledger.DCert (DCert)
import Ledger.Index (ExCPU, ExMemory, ValidationError)
import Ledger.Interval (Extended, Interval, LowerBound, UpperBound)
import Ledger.Params (Params)
import Ledger.Scripts (ScriptError)
import Ledger.Slot (Slot)
import Ledger.TimeSlot (SlotConfig, SlotConversionError)
import Ledger.Tx qualified as Tx (Language, Versioned)
import Ledger.Tx.CardanoAPI (FromCardanoError, ToCardanoError)
import Ledger.Value (AssetClass, CurrencySymbol, TokenName, Value)
Expand Down
7 changes: 4 additions & 3 deletions plutus-chain-index-core/plutus-chain-index-core.cabal
Expand Up @@ -72,9 +72,10 @@ library
-- Local components
--------------------
build-depends:
, freer-extras >=1.0.0
, plutus-ledger >=1.0.0
, plutus-script-utils >=1.0.0
, cardano-node-emulator >=1.0.0
, freer-extras >=1.0.0
, plutus-ledger >=1.0.0
, plutus-script-utils >=1.0.0

--------------------------
-- Other IOG dependencies
Expand Down
Expand Up @@ -22,9 +22,9 @@ import Cardano.Api (BlockInMode (..), CardanoMode, ChainPoint (..), ChainTip (..
import Cardano.BM.Data.Trace (Trace)
import Cardano.BM.Data.Tracer (ToObject (..))
import Cardano.BM.Trace (logDebug, logWarning)
import Cardano.Node.Emulator.TimeSlot (SlotConfig, currentSlot)
import Control.Retry (fibonacciBackoff, recovering, skipAsyncExceptions)
import Control.Tracer (nullTracer)
import Ledger.TimeSlot (SlotConfig, currentSlot)
import Ouroboros.Network.IOManager
import Ouroboros.Network.Protocol.ChainSync.Client qualified as ChainSync

Expand Down
1 change: 1 addition & 0 deletions plutus-chain-index/plutus-chain-index.cabal
Expand Up @@ -56,6 +56,7 @@ library
-- Local components
--------------------
build-depends:
, cardano-node-emulator >=1.0.0
, freer-extras >=1.0.0
, plutus-chain-index-core >=1.0.0
, plutus-ledger >=1.0.0
Expand Down
2 changes: 1 addition & 1 deletion plutus-chain-index/src/Plutus/ChainIndex/Config.hs
Expand Up @@ -24,11 +24,11 @@ module Plutus.ChainIndex.Config(
) where

import Cardano.Api (BlockNo (BlockNo), NetworkId (Mainnet, Testnet))
import Cardano.Node.Emulator.TimeSlot (SlotConfig (SlotConfig, scSlotLength, scSlotZeroTime))
import Control.Exception (Exception)
import Control.Lens (makeLensesFor)
import Data.Aeson (FromJSON, ToJSON)
import GHC.Generics (Generic)
import Ledger.TimeSlot (SlotConfig (SlotConfig, scSlotLength, scSlotZeroTime))
import Numeric.Natural (Natural)
import Ouroboros.Network.Magic (NetworkMagic (NetworkMagic))
import Prettyprinter (Pretty (pretty), viaShow, vsep, (<+>))
Expand Down
4 changes: 2 additions & 2 deletions plutus-contract/src/Plutus/Contract/Effects.hs
Expand Up @@ -90,6 +90,8 @@ module Plutus.Contract.Effects( -- TODO: Move to Requests.Internal
ActiveEndpoint(..),
) where

import Cardano.Node.Emulator.Params (Params)
import Cardano.Node.Emulator.TimeSlot (SlotConversionError)
import Control.Lens (Iso', Prism', iso, makePrisms, prism')
import Data.Aeson (FromJSON, ToJSON)
import Data.Aeson qualified as JSON
Expand All @@ -99,11 +101,9 @@ import Data.String (fromString)
import GHC.Generics (Generic)
import Ledger.Constraints.OffChain (UnbalancedTx)
import Ledger.Credential (Credential)
import Ledger.Params (Params)
import Ledger.Scripts (Validator)
import Ledger.Slot (Slot, SlotRange)
import Ledger.Time (POSIXTime, POSIXTimeRange)
import Ledger.TimeSlot (SlotConversionError)
import Ledger.Tx (CardanoTx, DecoratedTxOut, Versioned, getCardanoTxId, onCardanoTx)
import Plutus.ChainIndex (Page (pageItems), PageQuery)
import Plutus.ChainIndex.Api (IsUtxoResponse (IsUtxoResponse), QueryResponse (QueryResponse),
Expand Down
5 changes: 3 additions & 2 deletions plutus-contract/src/Plutus/Contract/Request.hs
Expand Up @@ -108,6 +108,7 @@ module Plutus.Contract.Request(
, MkTxLog(..)
) where

import Cardano.Node.Emulator.Params (Params)
import Control.Lens (Prism', preview, review, view)
import Control.Monad.Freer.Error qualified as E
import Control.Monad.Trans.State.Strict (StateT (..), evalStateT)
Expand All @@ -128,8 +129,8 @@ import Data.Void (Void)
import GHC.Generics (Generic)
import GHC.Natural (Natural)
import GHC.TypeLits (Symbol, symbolVal)
import Ledger (AssetClass, DiffMilliSeconds, POSIXTime, Params, PaymentPubKeyHash (PaymentPubKeyHash), Slot, TxId,
TxOutRef, Value, addressCredential, fromMilliSeconds, txOutRefId)
import Ledger (AssetClass, DiffMilliSeconds, POSIXTime, PaymentPubKeyHash (PaymentPubKeyHash), Slot, TxId, TxOutRef,
Value, addressCredential, fromMilliSeconds, txOutRefId)
import Ledger.Constraints (TxConstraints)
import Ledger.Constraints.OffChain (ScriptLookups, UnbalancedTx)
import Ledger.Constraints.OffChain qualified as Constraints
Expand Down
3 changes: 2 additions & 1 deletion plutus-contract/src/Plutus/Contract/Test.hs
Expand Up @@ -124,6 +124,7 @@ import PlutusTx.Prelude qualified as P

import Cardano.Node.Emulator.Generators (GeneratorModel, Mockchain (..))
import Cardano.Node.Emulator.Generators qualified as Gen
import Cardano.Node.Emulator.Params qualified as Params
import Ledger qualified
import Ledger.Address (Address)
import Ledger.Index (ValidationError)
Expand Down Expand Up @@ -192,7 +193,7 @@ changeInitialWalletValue wallet = over (emulatorConfig . initialChainState . _Le
-- This can be used to work around @MaxTxSizeUTxO@ and @ExUnitsTooBigUTxO@ errors.
-- Note that if you need this your Plutus script will probably not validate on Mainnet.
increaseTransactionLimits :: CheckOptions -> CheckOptions
increaseTransactionLimits = over (emulatorConfig . params) Ledger.increaseTransactionLimits
increaseTransactionLimits = over (emulatorConfig . params) Params.increaseTransactionLimits

-- | Check if the emulator trace meets the condition
checkPredicate ::
Expand Down
Expand Up @@ -46,6 +46,7 @@ import Data.Maybe
import Data.Either.Combinators (leftToMaybe)

import Cardano.Node.Emulator.Generators
import Cardano.Node.Emulator.Params (EmulatorEra, Params, testnet)
import Cardano.Node.Emulator.Validation qualified as Validation
import Ledger qualified as P
import Ledger.Ada qualified as Ada
Expand All @@ -70,7 +71,7 @@ import Test.QuickCheck.StateModel hiding (Action, Actions (..), actionName, arbi
nextState, pattern Actions, perform, precondition, shrinkAction, stateAfter)
import Test.QuickCheck.StateModel qualified as StateModel

import Cardano.Node.Emulator.Chain hiding (_currentSlot, currentSlot)
import Cardano.Node.Emulator.Chain hiding (_chainCurrentSlot, chainCurrentSlot)
import Wallet.Emulator.MultiAgent (EmulatorEvent, EmulatorEvent' (ChainEvent), eteEvent)
import Wallet.Emulator.Stream (EmulatorConfig (_params), EmulatorErr)

Expand All @@ -87,7 +88,7 @@ data WrappedTx = WrappedTx
, _dsTx :: Tx
, _dsUtxoIndex :: UtxoIndex
, _dsSlot :: Slot
, _dsParams :: P.Params
, _dsParams :: Params
} deriving Show
makeLenses ''WrappedTx

Expand Down Expand Up @@ -185,7 +186,7 @@ checkDoubleSatisfactionWithOptions opts covopts acts =
-- potentially be stolen
-- * the list of actual counterexamples, i.e. if this is non-empty a vulnerability has been
-- discovered.
getDSCounterexamples :: P.Params -> [ChainEvent] -> ( [WrappedTx]
getDSCounterexamples :: Params -> [ChainEvent] -> ( [WrappedTx]
, [DoubleSatisfactionCounterexample]
, [DoubleSatisfactionCounterexample]
)
Expand Down Expand Up @@ -217,7 +218,7 @@ getDSCounterexamples params = go 0 mempty

-- | Take a chain event and wrap it up as a `WrappedTx` if it was a transaction
-- validation event.
doubleSatisfactionCandidates :: P.Params -> Slot -> UtxoIndex -> ChainEvent -> [WrappedTx]
doubleSatisfactionCandidates :: Params -> Slot -> UtxoIndex -> ChainEvent -> [WrappedTx]
doubleSatisfactionCandidates params slot idx event = case event of
TxnValidate txid (EmulatorTx tx) _ -> [WrappedTx txid tx idx slot params]
_ -> []
Expand All @@ -238,7 +239,7 @@ validateWrappedTx = isNothing . validateWrappedTx'

-- | Actual counterexamples showing a double satisfaction vulnerability for the given chain event.
checkForDoubleSatisfactionVulnerability ::
P.Params ->
Params ->
Slot ->
UtxoIndex ->
ChainEvent ->
Expand Down Expand Up @@ -341,9 +342,9 @@ doubleSatisfactionCounterexamples dsc = do
filter (\(w, _) -> P.unPaymentPubKeyHash (mockWalletPaymentPubKeyHash w) == pubKeyHash stealerKey)
(zip knownWallets (P.unPaymentPrivateKey <$> knownPaymentPrivateKeys))
let stealerAddr = pubKeyHashAddress . pubKeyHash $ stealerKey
stealerCardanoAddress = fromRight (error "invalid address") (toCardanoAddressInEra P.testnet stealerAddr)
stealerCardanoAddress = fromRight (error "invalid address") (toCardanoAddressInEra testnet stealerAddr)
scriptCardanoAddress = fromRight (error "invalid address")
(toCardanoAddressInEra P.testnet $ P.scriptValidatorHashAddress (validatorHash alwaysOkValidator) Nothing)
(toCardanoAddressInEra testnet $ P.scriptValidatorHashAddress (validatorHash alwaysOkValidator) Nothing)
-- The output going to the original recipient but with a datum
datum = Datum . mkB $ "<this is a unique string>"
datumEmpty = Datum . mkB $ ""
Expand Down Expand Up @@ -384,5 +385,5 @@ doubleSatisfactionCounterexamples dsc = do
, dsceStealerWallet = stealerWallet
}

toCardanoUtxoIndex :: UtxoIndex -> Validation.UTxO P.EmulatorEra
toCardanoUtxoIndex :: UtxoIndex -> Validation.UTxO EmulatorEra
toCardanoUtxoIndex idx = either (error . show) id $ Validation.fromPlutusIndex idx
Expand Up @@ -211,9 +211,9 @@ import Data.Set (Set)
import Data.Set qualified as Set
import Data.Text qualified as Text

import Cardano.Node.Emulator.Params ()
import Ledger.Ada qualified as Ada
import Ledger.Index as Index
import Ledger.Params ()
import Ledger.Scripts
import Ledger.Slot
import Ledger.Value (AssetClass)
Expand Down Expand Up @@ -241,7 +241,7 @@ import Test.QuickCheck qualified as QC
import Test.QuickCheck.Monadic (PropertyM, monadic)
import Test.QuickCheck.Monadic qualified as QC

import Cardano.Node.Emulator.Chain hiding (_currentSlot, currentSlot)
import Cardano.Node.Emulator.Chain hiding (_chainCurrentSlot, chainCurrentSlot)
import Wallet.Emulator.MultiAgent (EmulatorEvent, eteEvent)
import Wallet.Emulator.Stream (EmulatorErr)

Expand Down
5 changes: 3 additions & 2 deletions plutus-contract/src/Plutus/Contract/Trace/RequestHandler.hs
Expand Up @@ -51,11 +51,12 @@ import Plutus.Contract.Resumable (Request (Request, itID, rqID, rqRequest),
Response (Response, rspItID, rspResponse, rspRqID))

import Cardano.Node.Emulator.Effects (NodeClientEffect, getClientParams, getClientSlot)
import Cardano.Node.Emulator.Params (Params (..))
import Cardano.Node.Emulator.TimeSlot qualified as TimeSlot
import Control.Monad.Freer.Extras.Log (LogMessage, LogMsg, LogObserve, logDebug, logWarn, surroundDebug)
import Data.List.NonEmpty (NonEmpty)
import Ledger (POSIXTime, POSIXTimeRange, Params (..), Slot (..), SlotRange)
import Ledger (POSIXTime, POSIXTimeRange, Slot (..), SlotRange)
import Ledger.Constraints.OffChain (UnbalancedTx, adjustUnbalancedTx)
import Ledger.TimeSlot qualified as TimeSlot
import Ledger.Tx (CardanoTx)
import Ledger.Tx.CardanoAPI (ToCardanoError)
import Plutus.ChainIndex (ChainIndexQueryEffect)
Expand Down
9 changes: 5 additions & 4 deletions plutus-contract/src/Plutus/Contract/Wallet.hs
Expand Up @@ -26,6 +26,7 @@ module Plutus.Contract.Wallet(
) where

import Cardano.Api qualified as C
import Cardano.Node.Emulator.Params (Params (emulatorPParams, pNetworkId))
import Cardano.Node.Emulator.Validation (CardanoLedgerError, fromPlutusIndex, makeTransactionBody)
import Control.Applicative ((<|>))
import Control.Monad ((>=>))
Expand Down Expand Up @@ -248,22 +249,22 @@ instance ToJSON ExportTxInput where
]

export
:: P.Params
:: Params
-> UnbalancedTx
-> Either CardanoLedgerError ExportTx
export params (UnbalancedEmulatorTx tx sigs utxos) =
let requiredSigners = Set.toList sigs
in ExportTx
<$> bimap Right (C.makeSignedTransaction []) (CardanoAPI.toCardanoTxBody params requiredSigners tx)
<*> first Right (mkInputs (P.pNetworkId params) utxos)
<$> bimap Right (C.makeSignedTransaction []) (CardanoAPI.toCardanoTxBody (pNetworkId params) (emulatorPParams params) requiredSigners tx)
<*> first Right (mkInputs (pNetworkId params) utxos)
<*> pure (mkRedeemers tx)
export params (UnbalancedCardanoTx tx utxos) =
let fromCardanoTx ctx = do
utxo <- fromPlutusIndex $ P.UtxoIndex utxos
makeTransactionBody params utxo ctx
in ExportTx
<$> fmap (C.makeSignedTransaction []) (fromCardanoTx tx)
<*> first Right (mkInputs (P.pNetworkId params) utxos)
<*> first Right (mkInputs (pNetworkId params) utxos)
<*> pure []

mkInputs :: C.NetworkId -> Map Plutus.TxOutRef P.TxOut -> Either CardanoAPI.ToCardanoError [ExportTxInput]
Expand Down
Expand Up @@ -26,6 +26,7 @@ module Plutus.Trace.Effects.EmulatorControl(
) where

import Cardano.Node.Emulator.Chain (ChainState)
import Cardano.Node.Emulator.TimeSlot (SlotConfig)
import Control.Lens (over, view)
import Control.Monad (void)
import Control.Monad.Freer (Eff, Member, type (~>))
Expand All @@ -34,7 +35,6 @@ import Control.Monad.Freer.Error (Error)
import Control.Monad.Freer.State (State, gets, modify)
import Control.Monad.Freer.TH (makeEffect)
import Data.Map qualified as Map
import Ledger.TimeSlot (SlotConfig)
import Plutus.Trace.Emulator.ContractInstance (EmulatorRuntimeError, getThread)
import Plutus.Trace.Emulator.Types (EmulatorMessage (Freeze), EmulatorThreads)
import Plutus.Trace.Scheduler (EmSystemCall, MessageCall (Message), Priority (Normal), ThreadCall (Thaw), mkSysCall)
Expand Down
2 changes: 1 addition & 1 deletion plutus-contract/src/Plutus/Trace/Effects/Waiting.hs
Expand Up @@ -19,12 +19,12 @@ module Plutus.Trace.Effects.Waiting(
, handleWaiting
) where

import Cardano.Node.Emulator.TimeSlot qualified as TimeSlot
import Control.Monad.Freer (Eff, Member, type (~>))
import Control.Monad.Freer.Coroutine (Yield)
import Control.Monad.Freer.TH (makeEffect)
import Ledger.Slot (Slot)
import Ledger.Time (DiffMilliSeconds, POSIXTime, fromMilliSeconds)
import Ledger.TimeSlot qualified as TimeSlot
import Numeric.Natural (Natural)
import Plutus.Trace.Emulator.Types (EmulatorMessage (NewSlot))
import Plutus.Trace.Scheduler (EmSystemCall, Priority (Sleeping), sleep)
Expand Down
4 changes: 2 additions & 2 deletions plutus-contract/src/Plutus/Trace/Emulator.hs
Expand Up @@ -46,7 +46,7 @@ module Plutus.Trace.Emulator(
, ChainState.chainNewestFirst
, ChainState.txPool
, ChainState.index
, ChainState.currentSlot
, ChainState.chainCurrentSlot
-- ** Inspecting the agent states
, EmulatorControl.agentState
, Wallet.ownPaymentPrivateKey
Expand Down Expand Up @@ -124,7 +124,7 @@ import Plutus.Trace.Emulator.Types qualified
import Streaming (Stream)
import Streaming.Prelude (Of ((:>)))

import Ledger.Params (Params (..))
import Cardano.Node.Emulator.Params (Params (..))
import Ledger.Slot (getSlot)
import Plutus.V1.Ledger.Value (Value, flattenValue)

Expand Down
2 changes: 1 addition & 1 deletion plutus-contract/src/Plutus/Trace/Emulator/Extract.hs
Expand Up @@ -12,6 +12,7 @@ module Plutus.Trace.Emulator.Extract(
) where

import Cardano.Api qualified as C
import Cardano.Node.Emulator.Params (Params (..), networkIdL, protocolParamsL)
import Control.Foldl qualified as L
import Control.Lens ((&), (.~))
import Control.Monad.Freer (run)
Expand All @@ -22,7 +23,6 @@ import Data.Foldable (traverse_)
import Data.Int (Int64)
import Data.Monoid (Sum (..))
import Ledger.Constraints.OffChain (UnbalancedTx (..))
import Ledger.Params (Params (..), networkIdL, protocolParamsL)
import Plutus.Contract.Request (MkTxLog)
import Plutus.Contract.Wallet (export)
import Plutus.Trace.Emulator (EmulatorConfig (_params), EmulatorTrace)
Expand Down

0 comments on commit 1944e15

Please sign in to comment.