From c988ee664e9956901df61e2219c92f50bcb60bc0 Mon Sep 17 00:00:00 2001 From: Scott Main Date: Thu, 31 Oct 2013 09:06:59 -0700 Subject: [PATCH] add HCE dev guide Change-Id: I48c196f7f4577304b660c52ba5cd847c0cabfaff --- docs/html/guide/guide_toc.cs | 1 + .../html/guide/topics/connectivity/nfc/hce.jd | 618 ++++++++++++++++++ .../guide/topics/connectivity/nfc/index.jd | 19 +- docs/html/images/nfc/dual-mode.png | Bin 0 -> 16097 bytes docs/html/images/nfc/host-based-card.png | Bin 0 -> 10073 bytes docs/html/images/nfc/protocol-stack.png | Bin 0 -> 15106 bytes docs/html/images/nfc/secure-element.png | Bin 0 -> 12656 bytes 7 files changed, 637 insertions(+), 1 deletion(-) create mode 100644 docs/html/guide/topics/connectivity/nfc/hce.jd create mode 100644 docs/html/images/nfc/dual-mode.png create mode 100644 docs/html/images/nfc/host-based-card.png create mode 100644 docs/html/images/nfc/protocol-stack.png create mode 100644 docs/html/images/nfc/secure-element.png diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs index c84e18ff16db9..84ffd055bc00f 100644 --- a/docs/html/guide/guide_toc.cs +++ b/docs/html/guide/guide_toc.cs @@ -408,6 +408,7 @@
  • diff --git a/docs/html/guide/topics/connectivity/nfc/hce.jd b/docs/html/guide/topics/connectivity/nfc/hce.jd new file mode 100644 index 0000000000000..d9063f39ead3d --- /dev/null +++ b/docs/html/guide/topics/connectivity/nfc/hce.jd @@ -0,0 +1,618 @@ +page.title=Host-based Card Emulation +page.tags="host card emulation", "hce","HostApduService","OffHostApduService","tap and pay" + +@jd:body + + + + + + +

    Many Android-powered devices that offer NFC functionality already support NFC card +emulation. In most cases, the card is emulated by a separate +chip in the device, called a secure element. Many SIM cards provided by +wireless carriers also contain a secure element.

    + +

    Android 4.4 introduces an additional method of card emulation that does not +involve a secure element, called host-based card emulation. This allows any +Android application to emulate a card and talk directly to the NFC reader. This +document describes how host-based card emulation (HCE) works on Android and how you +can develop an app that emulates an NFC card using this technique.

    + + +

    Card Emulation with a Secure Element

    + +

    When NFC card emulation is provided using a secure element, the card to be emulated +is provisioned into the secure element on +the device through an Android application. Then, when the user holds the +device over an NFC terminal, the NFC controller in the device routes all data +from the reader directly to the secure element. Figure 1 illustrates this concept.

    + + +

    Figure 1. NFC card emulation with a secure element.

    + +

    The secure element itself performs the communication with the NFC terminal, +and no Android application is involved in the transaction at all. After the +transaction is complete, an Android application can query the secure element +directly for the transaction status and notify the user.

    + + +

    Host-based Card Emulation

    + +

    When an NFC card is emulated using host-based card emulation, the data is routed to +the host CPU on which Android applications are running directly, instead of routing the NFC +protocol frames to a secure element. Figure 2 illustrates how host-based card emulation +works.

    + + +

    Figure 2. NFC card emulation with a secure element.

    + + +

    Supported NFC Cards and Protocols

    + +
    + +

    Figure 3. Android's HCE protocol stack.

    +
    + +

    The NFC standards offer support for many different protocols, and there are +different types of cards that can be emulated.

    + +

    Android 4.4 supports several protocols that are common in the +market today. Many existing contactless cards are already based on these +protocols, such as contactless payment cards. These protocols are also +supported by many NFC readers in the market today, including Android NFC +devices functioning as readers themselves (see the {@link android.nfc.tech.IsoDep} class). +This allows you to build and deploy an end-to-end NFC solution +around HCE using only Android-powered devices.

    + +

    Specifically, Android 4.4 supports emulating cards that are based on the +NFC-Forum ISO-DEP specification (based on ISO/IEC 14443-4) and process +Application Protocol Data Units (APDUs) as defined in the ISO/IEC 7816-4 +specification. Android mandates emulating ISO-DEP only on top of the +Nfc-A (ISO/IEC 14443-3 Type A) technology. Support for Nfc-B (ISO/IEC 14443-4 +Type B) technology is optional. The layering of all these specifications is +shown in the figure 3.

    + + + +

    HCE Services

    + +

    The HCE architecture in Android is based around Android {@link android.app.Service} components +(known as "HCE services"). +One of the key advantages of a service is that it can run in the background without +any user interface. This is a natural fit for many HCE applications like loyalty or transit cards, +with which the user shouldn't need to launch the app to use it. +Instead, tapping the device against the NFC reader starts the correct service (if not already +running) and executes the transaction in the background. Of course, you are free +to launch additional UI (such as user notifications) from your service if that makes +sense.

    + + + +

    Service selection

    + +

    When the user taps a device to an NFC reader, the Android system needs to + know which HCE service the NFC reader actually wants to talk to. +This is where the ISO/IEC 7816-4 specification comes in: it defines a way to +select applications, centered around an Application ID (AID). An AID +consists of up to 16 bytes. If you are emulating cards for an existing NFC reader +infrastructure, the AIDs that those readers are looking for are typically +well-known and publicly registered (for example, the AIDs of payment networks +such as Visa and MasterCard).

    + +

    If you want to deploy new reader infrastructure for your own application, you +will need to register your own AID(s). The registration procedure for AIDs is +defined in the ISO/IEC 7816-5 specification. Google recommends registering an +AID as per 7816-5 if you are deploying a HCE application for Android, as it will avoid +collisions with other applications.

    + + +

    AID groups

    + +

    In some cases, an HCE service may need to register multiple AIDs to implement a +certain application, and it needs to be sure that it is the default handler for +all of these AIDs (as opposed to some AIDs in the group going to another +service).

    + +

    An AID group is a list of AIDs that should be considered as belonging together +by the OS. For all AIDs in an AID group, Android guarantees one of the +following:

    + + + +

    In other words, there is no in-between state, where some AIDs in the group can +be routed to one HCE service, and some to another.

    + +

    AID groups and categories

    + +

    Each AID group can be associated with a category. This allows Android to group +HCE services together by category, and that in turn allows the user to set +defaults at the category level instead of the AID level. In general, avoid +mentioning AIDs in any user-facing parts of your application: they do not mean +anything to the average user.

    + +

    Android 4.4 supports two categories: {@link + android.nfc.cardemulation.CardEmulation#CATEGORY_PAYMENT} (covering payment +apps) and {@link android.nfc.cardemulation.CardEmulation#CATEGORY_OTHER} +(for all other HCE apps).

    + + + +

    Implementing an HCE Service

    + +

    To emulate an NFC card using host-based card emulation, you need to create + a {@link android.app.Service} component that handles the NFC transactions. + +

    Checking for HCE support

    + +

    Your application can check whether a device supports HCE by checking for the +{@link android.content.pm.PackageManager#FEATURE_NFC_HOST_CARD_EMULATION} feature. You should use the +{@code <uses-feature>} tag in the manifest of your application to declare that your app +uses the HCE feature, and whether it is required for the app to function or not.

    + +

    Service implementation

    + +

    Android 4.4 comes with a convenience {@link android.app.Service} class that can be used as a +basis for implementing a HCE service: the {@link android.nfc.cardemulation.HostApduService} class.

    + +

    The first step is therefore to extend {@link android.nfc.cardemulation.HostApduService}.

    + +
    +public class MyHostApduService extends HostApduService {
    +    @Override
    +    public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
    +       ...
    +    }
    +    @Override
    +    public void onDeactivated(int reason) {
    +       ...
    +    }	
    +}
    +
    + +

    {@link android.nfc.cardemulation.HostApduService} +declares two abstract methods that need to be overridden and implemented.

    + +

    {@link android.nfc.cardemulation.HostApduService#processCommandApdu processCommandApdu()} + is called whenever a NFC reader sends an Application +Protocol Data Unit (APDU) to your service. APDUs are defined in the ISO/IEC +7816-4 specification as well. APDUs are the application-level packets being +exchanged between the NFC reader and your HCE service. That application-level +protocol is half-duplex: the NFC reader will send you a command APDU, and it +will wait for you to send a response APDU in return.

    + +

    Note: + The ISO/IEC 7816-4 specification also defines the concept of multiple logical channels, + where you can have multiple parallel APDU exchanges on separate logical channels. Android’s + HCE implementation however only supports a single logical channel, so there’s only a + single-threaded exchange of APDUs.

    + + +

    As mentioned previously, Android uses the AID to determine which HCE service the +reader wants to talk to. Typically, the first APDU an NFC reader sends to your +device is a "SELECT AID" APDU; this APDU contains the AID that the reader wants +to talk to. Android extracts that AID from the APDU, resolves it to an HCE service, +then forwards that APDU to the resolved service.

    + +

    You can send a response APDU by returning the bytes of the response APDU from +{@link android.nfc.cardemulation.HostApduService#processCommandApdu processCommandApdu()}. + Note that this method will be called on the main thread of +your application, which shouldn't be blocked. So if you can't compute and return +a response APDU immediately, return null. You can then do the necessary work on +another thread, and use the {@link android.nfc.cardemulation.HostApduService#sendResponseApdu + sendResponseApdu()} method defined +in the {@link android.nfc.cardemulation.HostApduService} class to send the response when you are done.

    + +

    Android will keep forwarding new APDUs from the reader to your service, until +either:

    + +
      +
    1. The NFC reader sends another "SELECT AID" APDU, which the OS resolves to a +different service;
    2. +
    3. The NFC link between the NFC reader and your device is broken.
    4. +
    + +

    In both of these cases, your class's + {@link android.nfc.cardemulation.HostApduService#onDeactivated onDeactivated()} + implementation is +called with an argument indicating which of the two happened.

    + +

    If you are working with existing reader infrastructure, you need to +implement the existing application-level protocol that the readers expect in +your HCE service.

    + +

    If you are deploying new reader infrastructure which you control as well, you +can define your own protocol and APDU sequence. In general try to limit the +amount of APDUs and the size of the data that needs to be exchanged: this makes +sure that your users will only have to hold their device over the NFC reader for +a short amount of time. A sane upper bound is about 1KB of data, which can +usually be exchanged within 300ms.

    + + + +

    Service manifest declaration and AID registration

    + +

    Your service must be declared in the manifest as usual, but some additional +pieces must be added to the service declaration as well.

    + +

    First, to tell the platform that it is a HCE service implementing a +{@link android.nfc.cardemulation.HostApduService} interface, your service declaration must contain an +intent filter for the {@link android.nfc.cardemulation.HostApduService#SERVICE_INTERFACE} action.

    + +

    Additionally, to tell the platform which AIDs groups are requested by this +service, a {@link android.nfc.cardemulation.HostApduService#SERVICE_META_DATA} +<meta-data> tag must be included in +the declaration of the service, pointing to an XML resource with additional +information about the HCE service.

    + +

    Finally, you must set the {@code android:exported} attribute to true, and require the +{@code "android.permission.BIND_NFC_SERVICE"} permission in your service declaration. +The former ensures that the service can be bound to by external applications. +The latter then enforces that only external applications that hold the +{@code ""android.permission.BIND_NFC_SERVICE"} permission can bind to your service. Since +{@code ""android.permission.BIND_NFC_SERVICE"} is a system permission, this effectively +enforces that only the Android OS can bind to your service.

    + +

    Here's an example of a {@link android.nfc.cardemulation.HostApduService} manifest declaration:

    + +
    +<service android:name=".MyHostApduService" android:exported="true"
    +        android:permission="android.permission.BIND_NFC_SERVICE">
    +    <intent-filter>
    +        <action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
    +    </intent-filter>
    +    <meta-data android:name="android.nfc.cardemulation.host_apdu_service"
    +        android:resource="@xml/apduservice"/>
    +</service>
    +
    + +

    This meta-data tag points to an {@code apduservice.xml} file. An example of such a file +with a single AID group declaration containing two proprietary AIDs is shown +below:

    + +
    +<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
    +           android:description="@string/servicedesc" 
    +           android:requireDeviceUnlock="false">
    +    <aid-group android:description="@string/aiddescription" 
    +                android:category="other">
    +        <aid-filter android:name="F0010203040506"/>
    +        <aid-filter android:name="F0394148148100"/>
    +    </aid-group>
    +</host-apdu-service>
    +
    + +

    The <host-apdu-service> tag is required to contain a <android:description> +attribute that contains a user-friendly description of the service that may be +shown in UI. The <requireDeviceUnlock> attribute can be used to specify that the +device must be unlocked before this service can be invoked to handle APDUs.

    + +

    The <host-apdu-service> must contain one or more <aid-group> tags. Each +<aid-group> tag is required to contain a android:description attribute that +contains a user-friendly description of the AID group that may be shown in UI. +Each <aid-group> tag must also have the android:category attribute set to +indicate the category the AID group belongs to, e.g. the string constants +defined by CardEmulation.CATEGORY_PAYMENT or CardEmulation.CATEGORY_OTHER. Each +<aid-group> must contain one or more <aid-filter> tags, each of which contains a +single AID. The AID must be specified in hexadecimal format, and contain an even +number of characters.

    + +

    As a final note, your application also needs to hold the NFC permission, + {@link android.Manifest.permission#NFC} to be able to register as a HCE service.

    + + + + +

    AID Conflict Resolution

    + +

    Multiple {@link android.nfc.cardemulation.HostApduService} components + may be installed on a single device, and the same AID +can be registered by more than one service. The Android platform resolves AID +conflicts depending on which category an AID belongs to. Each category may have +a different conflict resolution policy.

    + +

    For example, for some categories (like payment) the user may be able to select a +default service in the Android settings UI. For other categories, the policy may +be to always ask the user which service is to be invoked in case of conflict. To +query the conflict resolution policy for a certain category, see +{@link android.nfc.cardemulation.CardEmulation#getSelectionModeForCategory + getSelectionModeForCategory()}.

    + +

    Checking if your service is the default

    + +

    Applications can check whether their HCE service is the default service for a +certain category by using the +{@link android.nfc.cardemulation.CardEmulation#isDefaultServiceForCategory} API.

    + +

    If your service is not the default, you can request it to be made the default. +See {@link android.nfc.cardemulation.CardEmulation#ACTION_CHANGE_DEFAULT}.

    + + + +

    Payment Applications

    + +

    Android considers HCE services that have declared an AID group with the +"payment" category as payment applications. The Android 4.4 release contains a +top-level Settings menu entry called "tap & pay", which enumerates all such +payment applications. In this settings menu, the user can select the default +payment application that will be invoked when a payment terminal is tapped.

    + +

    Required assets for payment applications

    + +

    To provide a more visually attractive user experience, HCE payment applications +are required to provide an additional asset for their service: a so-called +service banner.

    + +

    This asset should be sized 260x96 dp, and can be specified in your meta-data XML +file by adding the android:apduServiceBanner attribute to the +<host-apdu-service> tag, which points to the drawable resource. An example is +shown below:

    + +
    +<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
    +           android:description="@string/servicedesc" 
    +           android:requireDeviceUnlock="false"
    +           android:apduServiceBanner="@drawable/my_banner">
    +       <aid-group android:description="@string/aiddescription"
    +                  android:category="payment">
    +           <aid-filter android:name="F0010203040506"/>
    +           <aid-filter android:name="F0394148148100"/>
    +       </aid-group>
    +</host-apdu-service>
    +
    + + + +

    Screen Off and Lock-screen Behavior

    + +

    Current Android implementations turn the NFC controller and the application +processor off completely when the screen of the device is turned off. HCE +services will therefore not work when the screen is off.

    + +

    HCE services can function from the lock-screen however: this is controlled by +the android:requireDeviceUnlock attribute in the <host-apdu-service> tag of your +HCE service. By default, device unlock is not required, and your service will be +invoked even if the device is locked.

    + +

    If you set the <android:requireDeviceUnlock attribute to "true" for your HCE +service, Android will prompt the user to unlock the device when you tap an NFC +reader that selects an AID that is resolved to your service. After unlocking, +Android will show a dialog prompting the user to tap again to complete the +transaction. This is necessary because the user may have moved the device away +from the NFC reader in order to unlock it.

    + + +

    Coexistence with Secure Element Cards

    + +

    This section is of interest for developers that have deployed an application +that relies on a secure element for card emulation. Android's HCE implementation +is designed to work in parallel with other methods of implementing card +emulation, including the use of secure elements.

    + +

    Note: Android does not offer APIs for directly communicating with a secure element itself.

    + +

    This coexistence is based on a principle called "AID routing": the NFC +controller keeps a routing table that consists of a (finite) list of routing +rules. Each routing rule contains an AID and a destination. The destination can +either be the host CPU (where Android apps are running), or a connected secure +element.

    + +

    When the NFC reader sends an APDU with a "SELECT AID", the NFC controller parses +it and checks whether the AIDs matchesNo converter for: FOOTNOTE with any AID in +its routing table. If it matches, that APDU and all APDUs following it will be +sent to the destination associated with the AID, until another "SELECT AID" APDU +is received or the NFC link is broken.

    + +

    Note: + While ISO/IEC 7816-4 defines the concept of “partial matches” as well, this is currently not supported by Android HCE devices.

    + +

    This architecture is illustrated in figure 4.

    + + + +

    Figure 4. Android operating with both secure element +and host-card emulation.

    + + +

    The NFC controller typically also contains a default route for APDUs. When an +AID is not found in the routing table, the default route is used. Beginning with Android +4.4, the default route is required to be set to the host CPU. This +means that the routing table typically only contains entries for AIDs that need +to go to a secure element.

    + +

    Android applications that implement a HCE service or that use a secure element +don't have to worry about configuring the routing table - that is taking care of +by Android automatically. Android merely needs to know which AIDs can be handled +by HCE services and which ones can be handled by the secure element. Based on +which services are installed and which the user has configured as preferred, the +routing table is configured automatically.

    + +

    We've already described how to declare AIDs for HCE services. The following +section explains how to declare AIDs for applications that use a secure element +for card emulation.

    + + +

    Secure element AID registration

    + +

    Applications using a secure element for card emulation can declare a so-called +"off host service" in their manifest. The declaration of such a service is +almost identical to the declaration of a HCE service. The exceptions are:

    + + + +

    An example of the corresponding {@code apduservice.xml} file registering two AIDs:

    + +
    +<offhost-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
    +           android:description="@string/servicedesc">
    +    <aid-group android:description="@string/subscription" android:category="other">
    +        <aid-filter android:name="F0010203040506"/>
    +        <aid-filter android:name="F0394148148100"/>
    +    </aid-group>
    +</offhost-apdu-service>
    +
    + +

    The android:requireDeviceUnlock attribute does not apply to off host services, +because the host CPU is not involved in the transaction and therefore cannot +prevent the secure element from executing transactions when the device is +locked.

    + +

    The android:apduServiceBanner attribute must be used for off host services that +are payment applications as well in order to be selectable as a default payment +application.

    + +

    Off host service invocation

    + +

    Android itself will never start or bind to a service that is declared as "off +host". This is because the actual transactions are executed by the secure +element and not by the Android service itself. The service declaration merely +allows applications to register AIDs present on the secure element.

    + +

    HCE and Security

    + +

    The HCE architecture itself provides one core piece of security: because your +service is protected by the {@link android.Manifest.permission#BIND_NFC_SERVICE} + system permission, only the OS can +bind to and communicate with your service. This ensures that any APDU you +receive is actually an APDU that was received by the OS from the NFC controller, +and that any APDU you send back will only go to the OS, which in turn directly +forwards the APDUs to the NFC controller.

    + +

    The core remaining piece is where you get the data from that you're sending back +to the NFC reader. This is intentionally decoupled in the HCE design: it does +not care where the data comes from, it just makes sure that it is safely +transported to the NFC controller and out to the NFC reader.

    + +

    For securely storing and retrieving the data that you want to send from your HCE +service, you can for example rely on the Android Application Sandbox, which +isolates your app's data from other apps. For more details on Android security, +read +Security Tips +.

    + +

    Protocol parameters and details

    + +

    This section is of interest for developers that want to understand what protocol +parameters HCE devices use during the anti-collision and activations phases of +the NFC protocols. This allows them to build a reader infrastructure that is +compatible with Android HCE devices.

    + +

    Nfc-A (ISO/IEC 14443 type A) protocol anti-collision and activation

    + +

    As part of the Nfc-A protocol activation, multiple frames are exchanged.

    + +

    In the first part of the exchange the HCE device will present its UID; HCE +devices should be assumed to have a random UID. This means that on every tap, +the UID that is presented to the reader will be a randomly generated UID. +Because of this, NFC readers should not depend on the UID of HCE devices as a +form of authentication or identification.

    + +

    The NFC reader can subsequently select the HCE device by sending a SEL_REQ +command. The SEL_RES response of the HCE device will at least have the 6th bit +(0x20) set, indicating that the device supports ISO-DEP. Note that other bits in +the SEL_RES may be set as well, indicating for example support for the NFC-DEP +(p2p) protocol. Since other bits may be set, readers wanting to interact with +HCE devices should explicitly check for the 6th bit only, and not compare the +complete SEL_RES with a value of 0x20.

    + +

    ISO-DEP activation

    + +

    After the Nfc-A protocol is activated, the ISO-DEP protocol activation is +initiated by the NFC reader. It sends a "RATS" (Request for Answer To Select) +command. The RATS response, the ATS, is completely generated by the NFC +controller and not configurable by HCE services. However, HCE implementations +are required to meet NFC Forum requirements for the ATS response, so NFC readers +can count on these parameters being set in accordance with NFC Forum +requirements for any HCE device.

    + +

    The section below provides more details on the individual bytes of the ATS +response provided by the NFC controller on a HCE device:

    + + + +

    Note that many HCE devices are likely made compliant with protocol requirements +that the payment networks united in EMVCo have specified in their "Contactless +Communication Protocol" specification. In particular:

    + + + +

    APDU data exchange

    + +

    As noted earlier, HCE implementations only support a single logical channel. +Attempting to select applications on different logical channels will not work on +a HCE device.

    diff --git a/docs/html/guide/topics/connectivity/nfc/index.jd b/docs/html/guide/topics/connectivity/nfc/index.jd index 88c206f4958a2..f12facf75ecc2 100644 --- a/docs/html/guide/topics/connectivity/nfc/index.jd +++ b/docs/html/guide/topics/connectivity/nfc/index.jd @@ -14,6 +14,18 @@ page.title=Near Field Communication framework APIs are based around a NFC Forum standard called NDEF (NFC Data Exchange Format).

    +

    Android-powered devices with NFC simultaneously support three main modes of operation:

    + +
      +
    1. Reader/writer mode, allowing the NFC device to read and/or write +passive NFC tags and stickers.
    2. +
    3. P2P mode, allowing the NFC device to exchange data with other NFC +peers; this operation mode is used by Android Beam.
    4. +
    5. Card emulation mode, allowing the NFC device itself to act as an NFC +card. The emulated NFC card can then be accessed by an external NFC reader, +such as an NFC point-of-sale terminal.
    6. +
    +
    NFC Basics
    This document describes how Android handles discovered NFC tags and how it notifies @@ -29,5 +41,10 @@ NFC feature set of Android.
    bytes using your own protocol stack. In these cases, Android provides support to detect certain tag technologies and to open communication with the tag using your own protocol stack. + +
    Host-based Card Emulation
    +
    This document describes how Android devices can perform as NFC cards without using + a secure element, allowing any Android application to emulate a card and talk directly to + the NFC reader.
    -

    \ No newline at end of file +

    diff --git a/docs/html/images/nfc/dual-mode.png b/docs/html/images/nfc/dual-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..8e484a8615e85b1e7beb10bbed142eaf182e6bca GIT binary patch literal 16097 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 b5>NkmWfoKYc?S5GIgaZ(#@a=iw;ujKLkQK& literal 0 HcmV?d00001 diff --git a/docs/html/images/nfc/protocol-stack.png b/docs/html/images/nfc/protocol-stack.png new file mode 100644 index 0000000000000000000000000000000000000000..71bdfe9adad55d7c96147a9cda4ae702c89f8263 GIT binary patch literal 15106 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 literal 0 HcmV?d00001