diff --git a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/Generated.xml b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/Generated.xml index 542b76604..6902b75ef 100644 --- a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/Generated.xml +++ b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/Generated.xml @@ -106,8 +106,12 @@ + + - + + + @@ -219,7 +223,8 @@ - + + @@ -232,15 +237,16 @@ - -pluginId -outline -confidence -cutoutImage -fullImage -result -thresholdedImage -topCandidates + +pluginId +outline +confidence +cutoutImage +fullImage +result +thresholdedImage +topCandidates +blobKey cropAndTransformID @@ -418,6 +424,8 @@ context config id + +listener formats @@ -678,14 +686,15 @@ - -pluginId -outline -confidence -cutoutImage -fullImage -result -scanMode + +pluginId +outline +confidence +cutoutImage +fullImage +result +scanMode +blobKey @@ -766,6 +775,8 @@ context id + +listener formats @@ -870,15 +881,16 @@ surname - -pluginId -outline -confidence -cutoutImage -fullImage -result -scanMode -counter + +pluginId +outline +confidence +cutoutImage +fullImage +result +scanMode +counter +blobKey @@ -975,7 +987,8 @@ - + + @@ -1292,8 +1305,8 @@ - - + + @@ -1507,13 +1520,14 @@ - -pluginId -outline -confidence -cutoutImage -fullImage -result + +pluginId +outline +confidence +cutoutImage +fullImage +result +blobKey @@ -1524,9 +1538,6 @@ config anylineOcrConfig - -fileName -fileHash @@ -1594,6 +1605,13 @@ + + + + + + + @@ -2046,21 +2064,23 @@ vizSurname - -pluginId -outline -confidence -cutoutImage -fullImage -faceImage -result - -pluginId -outline -confidence -cutoutImage -fullImage -result + +pluginId +outline +confidence +cutoutImage +fullImage +faceImage +result +blobKey + +pluginId +outline +confidence +cutoutImage +fullImage +result +blobKey cancelOnResult @@ -2255,14 +2275,11 @@ fieldName - -context -id -anylineAssetsJsonPath -cmdFileName -pathInAssets - -assetPath + +context +id +anylineAssetsJsonPath +cmdFileName id @@ -2285,6 +2302,8 @@ listener workerRunnableExceptionListener + +assetPath isCancelOnResult @@ -2425,14 +2444,15 @@ - -pluginId -outline -confidence -cutoutImage -fullImage -result -thresholdedImage + +pluginId +outline +confidence +cutoutImage +fullImage +result +thresholdedImage +blobKey fieldScanOption @@ -2644,6 +2664,9 @@ + + +scanResult @@ -2780,6 +2803,9 @@ + + + @@ -2933,15 +2959,16 @@ allCheckDigitsValid - -pluginId -outline -confidence -cutoutImage -fullImage -result -country -area + +pluginId +outline +confidence +cutoutImage +fullImage +result +country +area +blobKey context @@ -3003,6 +3030,9 @@ + + + diff --git a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/allclasses-frame.html b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/allclasses-frame.html index 3143577a0..cf20de69d 100644 --- a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/allclasses-frame.html +++ b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/allclasses-frame.html @@ -103,6 +103,7 @@

All Classes

  • ParallelScanViewComposite
  • ScanInfo
  • ScanInfoListener
  • +
  • ScannedBarcodesListener
  • ScanPage
  • ScanPlugin
  • ScanResult
  • diff --git a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/allclasses-noframe.html b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/allclasses-noframe.html index d18921057..5c569685d 100644 --- a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/allclasses-noframe.html +++ b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/allclasses-noframe.html @@ -103,6 +103,7 @@

    All Classes

  • ParallelScanViewComposite
  • ScanInfo
  • ScanInfoListener
  • +
  • ScannedBarcodesListener
  • ScanPage
  • ScanPlugin
  • ScanResult
  • diff --git a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/index-all.html b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/index-all.html index abbccd039..6324bfffc 100644 --- a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/index-all.html +++ b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/index-all.html @@ -80,7 +80,7 @@

    A

    An abstract implementation of the ScanPlugin interface, that provides useful stuff for Plugins that use the AnylineController. -
    AbstractScanPlugin(Context, String, String, String, String) - Constructor for class io.anyline.plugin.AbstractScanPlugin
    +
    AbstractScanPlugin(Context, String, String, String) - Constructor for class io.anyline.plugin.AbstractScanPlugin
     
    AbstractScanViewPlugin - Class in io.anyline.view
     
    @@ -116,6 +116,10 @@

    A

     
    addScanInfoListener(ScanInfoListener) - Method in class io.anyline.view.AbstractScanViewPluginComposite
     
    +
    addScannedBarcodesListener(ScannedBarcodesListener) - Method in class io.anyline.plugin.barcode.BarcodeScanPlugin
    +
     
    +
    addScannedBarcodesListener(ScannedBarcodesListener) - Method in class io.anyline.plugin.barcode.BarcodeScanViewPlugin
    +
     
    addScanResultListener(ScanResultListener<ResultType>) - Method in class io.anyline.plugin.AbstractScanPlugin
     
    addScanResultListener(ScanResultListener<ResultType>) - Method in interface io.anyline.plugin.ScanPlugin
    @@ -249,7 +253,7 @@

    B

     
    BarcodeScanResult - Class in io.anyline.plugin.barcode
     
    -
    BarcodeScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, List<Barcode>) - Constructor for class io.anyline.plugin.barcode.BarcodeScanResult
    +
    BarcodeScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, List<Barcode>, String) - Constructor for class io.anyline.plugin.barcode.BarcodeScanResult
     
    BarcodeScanViewPlugin - Class in io.anyline.plugin.barcode
    @@ -291,10 +295,6 @@

    C

     
    COLOR_GREEN - Static variable in class io.anyline.plugin.document.DocumentScanViewPlugin
     
    -
    copyTrainedData(String, String) - Method in class io.anyline.plugin.ocr.OcrScanPlugin
    -
    -
    Copies given traineddata-file to a place where the core can access it.
    -
    copyTrainedData(String, String) - Method in class io.anyline.plugin.ocr.OcrScanViewPlugin
     
    country - Variable in class io.anyline.plugin.id.LayoutDefinition
    @@ -564,8 +564,6 @@

    G

    getAssetController() - Method in class io.anyline.plugin.AbstractScanPlugin
     
    -
    getAssetPath() - Method in class io.anyline.plugin.AbstractScanPlugin
    -
     
    getAuthority() - Method in class io.anyline.plugin.id.DrivingLicenseFieldConfidences
     
    getAuthority() - Method in class io.anyline.plugin.id.DrivingLicenseFieldScanOptions
    @@ -1232,19 +1230,19 @@

    G

     
    getPreviewAlignment() - Method in class io.anyline.view.BaseScanViewConfig
     
    -
    getProductName() - Method in class io.anyline.plugin.AbstractScanPlugin
    +
    getProduct() - Method in class io.anyline.plugin.AbstractScanPlugin
     
    -
    getProductName() - Method in class io.anyline.plugin.barcode.BarcodeScanPlugin
    +
    getProduct() - Method in class io.anyline.plugin.barcode.BarcodeScanPlugin
     
    -
    getProductName() - Method in class io.anyline.plugin.document.DocumentScanPlugin
    +
    getProduct() - Method in class io.anyline.plugin.document.DocumentScanPlugin
     
    -
    getProductName() - Method in class io.anyline.plugin.id.IdScanPlugin
    +
    getProduct() - Method in class io.anyline.plugin.id.IdScanPlugin
     
    -
    getProductName() - Method in class io.anyline.plugin.licenseplate.LicensePlateScanPlugin
    +
    getProduct() - Method in class io.anyline.plugin.licenseplate.LicensePlateScanPlugin
     
    -
    getProductName() - Method in class io.anyline.plugin.meter.MeterScanPlugin
    +
    getProduct() - Method in class io.anyline.plugin.meter.MeterScanPlugin
     
    -
    getProductName() - Method in class io.anyline.plugin.ocr.OcrScanPlugin
    +
    getProduct() - Method in class io.anyline.plugin.ocr.OcrScanPlugin
     
    getRatio() - Method in enum io.anyline.plugin.document.DocumentScanViewPlugin.DocumentRatio
     
    @@ -1532,7 +1530,7 @@

    I

    init(Context, JSONObject) - Method in class io.anyline.view.ScanViewPluginConfig
     
    -
    initAsync(TrainerContext, TrainerUtils.ViewConfigResultHandler) - Method in class io.anyline.view.ScanView
    +
    initAsync(ProjectContext, TrainerUtils.ViewConfigResultHandler) - Method in class io.anyline.view.ScanView
     
    initComposite(JSONObject) - Method in class io.anyline.view.ScanView
     
    @@ -1630,7 +1628,7 @@

    L

    Created by clemens on 28/09/17.
    -
    LicensePlateScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, String, String, String) - Constructor for class io.anyline.plugin.licenseplate.LicensePlateScanResult
    +
    LicensePlateScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, String, String, String, String) - Constructor for class io.anyline.plugin.licenseplate.LicensePlateScanResult
     
    LicensePlateScanViewPlugin - Class in io.anyline.plugin.licenseplate
    @@ -1674,7 +1672,7 @@

    M

    A result class for the MeterScanPlugin
    -
    MeterScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, String, MeterScanMode) - Constructor for class io.anyline.plugin.meter.MeterScanResult
    +
    MeterScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, String, MeterScanMode, String) - Constructor for class io.anyline.plugin.meter.MeterScanResult
     
    MeterScanViewPlugin - Class in io.anyline.plugin.meter
    @@ -1708,7 +1706,7 @@

    M

    A result class for the MeterScanPlugin
    -
    MultiMeterScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, String, MeterScanMode, String) - Constructor for class io.anyline.plugin.meter.MultiMeterScanResult
    +
    MultiMeterScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, String, MeterScanMode, String, String) - Constructor for class io.anyline.plugin.meter.MultiMeterScanResult
     
    @@ -1749,7 +1747,7 @@

    O

    A result class for the OcrScanPlugin
    -
    OcrScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, String, AnylineImage) - Constructor for class io.anyline.plugin.ocr.OcrScanResult
    +
    OcrScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, String, AnylineImage, String) - Constructor for class io.anyline.plugin.ocr.OcrScanResult
     
    OcrScanViewPlugin - Class in io.anyline.plugin.ocr
    @@ -1932,6 +1930,10 @@

    S

    A listener that can be added to ScanPlugins, to receive intermediate information.
    +
    scannedBarcodes(BarcodeScanResult) - Method in interface io.anyline.plugin.barcode.ScannedBarcodesListener
    +
     
    +
    ScannedBarcodesListener - Interface in io.anyline.plugin.barcode
    +
     
    ScanPage - Class in io.anyline.view
     
    ScanPage(String, String, ArrayList<PointF>) - Constructor for class io.anyline.view.ScanPage
    @@ -1952,9 +1954,9 @@

    S

    This is the base class for all plugin result classes.
    -
    ScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, T) - Constructor for class io.anyline.plugin.ScanResult
    +
    ScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, T, String) - Constructor for class io.anyline.plugin.ScanResult
     
    -
    ScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, AnylineImage, T) - Constructor for class io.anyline.plugin.ScanResult
    +
    ScanResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, AnylineImage, T, String) - Constructor for class io.anyline.plugin.ScanResult
     
    ScanResultListener<T extends ScanResult> - Interface in io.anyline.plugin
    @@ -3061,7 +3063,7 @@

    T

     
    TINResult - Class in io.anyline.plugin.ocr
     
    -
    TINResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, String, AnylineImage, Map<String, String>) - Constructor for class io.anyline.plugin.ocr.TINResult
    +
    TINResult(String, List<PointF>, Integer, AnylineImage, AnylineImage, String, AnylineImage, Map<String, String>, String) - Constructor for class io.anyline.plugin.ocr.TINResult
     
    toBarcodeFormatInt(BarcodeFormat) - Static method in enum io.anyline.plugin.barcode.BarcodeFormat
    diff --git a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/AbstractScanPlugin.html b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/AbstractScanPlugin.html index 1f8a080b1..9b248e400 100644 --- a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/AbstractScanPlugin.html +++ b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/AbstractScanPlugin.html @@ -17,7 +17,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":6,"i10":6,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":6,"i9":6,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -146,11 +146,10 @@

    Constructor Summary

    Constructor and Description -AbstractScanPlugin(android.content.Context context, +AbstractScanPlugin(android.content.Context context, java.lang.String id, java.lang.String anylineAssetsJsonPath, - java.lang.String cmdFileName, - java.lang.String pathInAssets)  + java.lang.String cmdFileName)  @@ -201,106 +200,102 @@

    Method Summary

    java.lang.String -getAssetPath()  - - -java.lang.String getId()  - + ImageProvider getImageProvider()  - + abstract java.lang.String getModuleIdentifier()  - -abstract java.lang.String -getProductName()  + +abstract Product +getProduct()  - + boolean isRunning()  - + void removeArgumentExceptionListener()  - + void removeScanInfoListener(ScanInfoListener listener)
    Remove the given info listener.
    - + void removeScanResultListener(ScanResultListener<ResultType> listener)
    Remove the given info listener.
    - + void removeScanRunSkippedListener(ScanRunSkippedListener listener)
    Remove an info listener.
    - + void setArgumentExceptionListener(WorkerRunnableExceptionListener workerRunnableExceptionListener)  - + void setAssetPath(java.lang.String assetPath)  - + void setCancelOnResult(boolean isCancelOnResult)
    If set to true (default) the scanning is stopped automatically when a result is found.
    - + void setCmdFileName(java.lang.String cmdFileName)  - + void setCropRect(android.graphics.RectF cutoutRect)  - + void setDebug(boolean isDebug)
    Enable/Disables debug output.
    - + void setDelayScanTime(double delayScanTime)  - + void setId(java.lang.String id)  - + void setImageProvider(ImageProvider imageProvider)
    Set the provider, where the plugin can get the images from.
    - + void setReportingEnabled(boolean isReportingEnabled)
    Enable the reporting of results, including the photo of a scanned item.
    - + void start()
    Start the processing of the plugin
    - + void stop()
    Stop the processing of the plugin
    @@ -328,7 +323,7 @@

    Methods inherited from class java.lang.Object

    Constructor Detail

    - + @@ -357,15 +350,6 @@

    AbstractScanPlugin

    Method Detail

    - - - - @@ -660,15 +644,6 @@

    setCropRect

    public void setCropRect(android.graphics.RectF cutoutRect)
    - - - - @@ -687,6 +662,15 @@

    getAssetController

    public AssetController getAssetController()
    + + + + diff --git a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/ScanResult.html b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/ScanResult.html index bde9e7a6d..d40daef04 100644 --- a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/ScanResult.html +++ b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/ScanResult.html @@ -144,21 +144,23 @@

    Constructor Summary

    Constructor and Description -ScanResult(java.lang.String pluginId, +ScanResult(java.lang.String pluginId, java.util.List<android.graphics.PointF> outline, java.lang.Integer confidence, AnylineImage cutoutImage, AnylineImage fullImage, AnylineImage faceImage, - T result)  + T result, + java.lang.String blobKey)  -ScanResult(java.lang.String pluginId, +ScanResult(java.lang.String pluginId, java.util.List<android.graphics.PointF> outline, java.lang.Integer confidence, AnylineImage cutoutImage, AnylineImage fullImage, - T result)  + T result, + java.lang.String blobKey)  @@ -201,9 +203,9 @@

    Methods inherited from class java.lang.Object

    Constructor Detail

    - + - + - + - + diff --git a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanPlugin.html b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanPlugin.html index af79afbe4..226568980 100644 --- a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanPlugin.html +++ b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanPlugin.html @@ -17,7 +17,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -161,36 +161,40 @@

    Method Summary

    Method and Description +void +addScannedBarcodesListener(ScannedBarcodesListener listener)  + + java.util.List<BarcodeFormat> getBarcodeFormat()  - + ImageProvider getImageProvider()  - -java.lang.String -getModuleIdentifier()  - java.lang.String -getProductName()  +getModuleIdentifier()  +Product +getProduct()  + + void setBarcodeFormats(BarcodeFormat... formats)
    Set all the barcode formats that should be supported (or null to set back to all supported types).
    - + void setMultiBarcode(boolean multiBarcode)  - + void setScanMode(io.anyline.plugin.barcode.BarcodeScanPlugin.ScanMode scanMode)  - + void start()
    Start the processing of the plugin
    @@ -202,7 +206,7 @@

    Method Summary

    Methods inherited from class io.anyline.plugin.AbstractScanPlugin

    -addScanInfoListener, addScanResultListener, addScanRunSkippedListener, cancelController, getAnylineController, getAssetController, getAssetPath, getId, isRunning, removeArgumentExceptionListener, removeScanInfoListener, removeScanResultListener, removeScanRunSkippedListener, setArgumentExceptionListener, setAssetPath, setCancelOnResult, setCmdFileName, setCropRect, setDebug, setDelayScanTime, setId, setImageProvider, setReportingEnabled, stop +addScanInfoListener, addScanResultListener, addScanRunSkippedListener, cancelController, getAnylineController, getAssetController, getId, isRunning, removeArgumentExceptionListener, removeScanInfoListener, removeScanResultListener, removeScanRunSkippedListener, setArgumentExceptionListener, setAssetPath, setCancelOnResult, setCmdFileName, setCropRect, setDebug, setDelayScanTime, setId, setImageProvider, setReportingEnabled, stop - - - - @@ -332,7 +336,7 @@

    setMultiBarcode

    - diff --git a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanResult.html b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanResult.html index 28369ce2f..6bce1cc3c 100644 --- a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanResult.html +++ b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanResult.html @@ -131,12 +131,13 @@

    Constructor Summary

    Constructor and Description -BarcodeScanResult(java.lang.String pluginId, +BarcodeScanResult(java.lang.String pluginId, java.util.List<android.graphics.PointF> outline, java.lang.Integer confidence, AnylineImage cutoutImage, AnylineImage fullImage, - java.util.List<Barcode> result)  + java.util.List<Barcode> result, + java.lang.String blobKey)  @@ -175,7 +176,7 @@

    Methods inherited from class java.lang.Object

    Constructor Detail

    - + diff --git a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanViewPlugin.html b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanViewPlugin.html index c37aba15b..a1a863545 100644 --- a/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanViewPlugin.html +++ b/BindingSource/AnylineXamarinSDK.Droid/Assets/tools/javadoc/io/anyline/plugin/barcode/BarcodeScanViewPlugin.html @@ -17,7 +17,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -48,7 +48,7 @@