Record store size?

are there any limitations to which a record store can expand?
or to maximum number of record store a application can create?
thanks

Thanks for replying.
I have found that older phones (mainly MIDP 1.0) have fixed size of space allocated to application. Say, on Nokia 6610 the application cannot take more than 20400 bytes.
But, newer phones (MIDP 2.0) like Nokia 6230,3220,6600 have shared storage space and an application can consume all that is available.
This implies we cannot make an application which requires more than ~19KB data on older phones.
It would be great if some one could further throw some light on this issue?

Similar Messages

  • Record Store help!!!!!

    When I delete a record store I find that I have to quit the midlet application completely and then re-enter it before the midlet recognises that the record store has been deleted. What im saying is that the record store is where the data for a list of names is retrieved from. When i delete the record store and take a look at the name listing I still find the list is populated with the deleted record store names??? Its only when i exit the midlet and the re-enter it that i find the name listing is properly updated i.e. not displaying any names.
    Can you please tell me, anybody, why this is and is there a way that i can reset the midlet so that it recognises the change in the record store when it is deleted without having to exit the midlet.
    Thanks.

    Sure here you go,
    import javax.microedition.midlet.MIDlet;
    import javax.microedition.lcdui.*;
    import java.util.*;
    import javax.microedition.rms.*;
    public class AddPlayerScreen extends Form implements CommandListener
         private RecordStore rs;
         private Display display;
         private GSAP midlet;
         private ScoreArray sa;
         private TextField firstName = new TextField("First name:", "", 50, TextField.ANY);
         private TextField lastName = new TextField("Last name:", "", 50, TextField.ANY);
         private TextField telNumber = new TextField("Tel. number:", "", 20, TextField.PHONENUMBER);
         private TextField emailAddress = new TextField("Email address:", "", 50, TextField.EMAILADDR);
         private TextField handicap = new TextField("Handicap:", "", 2, TextField.NUMERIC);
         private Command back = new Command("Back", Command.BACK, 0);
         private Command accept = new Command("Accept", Command.OK, 1);
         private Command viewNote = new Command("View player note", Command.SCREEN, 1);
         private Command clear = new Command("Clear", Command.OK, 1);
         private Command detailedNote = new Command("Add player note", Command.SCREEN, 1);
         private Ticker addPlayerTicker = new Ticker("Please enter player details.");
         public AddPlayerScreen(GSAP midlet)
              super("NEW PLAYER DETAILS");
              this.midlet = midlet;
              append(firstName);
              append(lastName);
              append(telNumber);
              append(emailAddress);
              append(handicap);
              addCommand(back);
              addCommand(accept);
              addCommand(viewNote);
              addCommand(clear);
              addCommand(detailedNote);
              setTicker(addPlayerTicker);
              setCommandListener(this);
         public void commandAction(Command c, Displayable d)
              String label = c.getLabel();
              if(label.equals("Back"))
                   midlet.playerMenuScreenShow();
              else if(label.equals("Accept"))
                   addRecord();
                   RecordStoreDetails();
              else if(label.equals("Add player note"))
                   note();
              else if(label.equals("View player note"))
                   //System.out.println("View player note");
                   sa.go();
              else if(label.equals("OK"))
                   System.out.println("Note saved");
                   midlet.addPlayerScreenShow();
              else if(label.equals("Clear"))
                   firstName.setString("");
                   lastName.setString("");
                   telNumber.setString("");
                   emailAddress.setString("");
                   handicap.setString("");
         public void note()
              TextBox note;
              Command ok;
              ok = new Command("OK", Command.BACK, 1);
              note = new TextBox("Player note: ", "", 243, TextField.ANY);
              note.addCommand(ok);
              note.setCommandListener(this);
              note.setString("");
              Display.getDisplay(midlet).setCurrent(note);
         //Method to create record store if not already created and add record
         public void addRecord()
              RecordStore rs = null;
              //add a record.
              try
                   //Open record store or create it if it does not exist.
                   rs = RecordStore.openRecordStore("PLAYERSTORE", true);
                   System.out.println("PLAYERSTORE open");
                   String stringRecord = firstName.getString() +","+ lastName.getString() +","+ telNumber.getString() +","+ emailAddress.getString() +","+ handicap.getString();
                   byte []recordBytes = stringRecord.getBytes();
                   int recordId = rs.addRecord(recordBytes,0,recordBytes.length);
                   System.out.println("A record has been added");
                   System.out.println("Close the record store");     
                   playerAddedAlert();
              catch(RecordStoreNotFoundException rsnfe)
                   System.out.println("The record store you are trying to open does not exist :"+rsnfe);
              catch(RecordStoreFullException fsfe)
                   System.out.println("The record store cannot store anymore data :"+fsfe);
              catch(RecordStoreException rse)
                   System.out.println("An error has occured when using the record store :"+rse);
              try
                   rs.closeRecordStore();
                   System.out.println("PLAYERSTORE closed");
              catch( RecordStoreNotOpenException e )
                   System.out.println("Record store already closed!");
              catch( RecordStoreException e )
                   System.out.println("Exception:"+e);
         public void playerAddedAlert()
              Alert message = new Alert("PLAYER SUCCESSFULLY ADDED", "The player " + firstName.getString() +" "+ lastName.getString() + " has been successfully added.", null, AlertType.INFO);
              Display.getDisplay(midlet).setCurrent(message);
              message.setTimeout(3000);
              firstName.setString("");
              lastName.setString("");
              emailAddress.setString("");
              handicap.setString("");
              telNumber.setString("");
    //-----------------------------------------------------------------------------Method to test the RecordStore, this is a method that was used during the testing of this MIDlet---------------------------------------------------------------------------------------------------------------
         public void RecordStoreDetails()
              try
                   //Open record store or create it if it does not exist.
                   rs = RecordStore.openRecordStore("PLAYERSTORE", true);
                   System.out.println("The name of the recordstore is: "+rs.getName());
                   System.out.println("The record store was last modified on: "+rs.getLastModified());
                   System.out.println("The record store version is: "+rs.getVersion());
                   System.out.println("The size of the record store is: "+rs.getSize());
                   System.out.println("The available space for the record store to use is: "+rs.getSizeAvailable());
              catch(RecordStoreNotFoundException rsnfe)
                   System.out.println("The record store you are trying to open does not exist :"+rsnfe);
              catch(RecordStoreFullException fsfe)
                   System.out.println("The record store cannot store anymore data :"+fsfe);
              catch(RecordStoreException rse)
                   System.out.println("An error has occured when using the record store :"+rse);
              try
                   rs.closeRecordStore();
                   System.out.println("PLAYERSTORE closed");
              catch( RecordStoreNotOpenException e )
                   System.out.println("Record store already closed!");
              catch( RecordStoreException e )
                   System.out.println("Exception:"+e);
    So you can see that a player is added to the record store, but when i try and take a look at a list of players that I have constructed the player just added is not present??? Its only when I exit the MIDlet completely and then re-enter it that the player list is fully updated with the new player.

  • How can I convert string to the record store with multiple records in it?

    Hi Everyone,
    How can I convert the string to the record store, with multiple records? I mean I have a string like as below:
    "SecA: [Y,Y,Y,N][good,good,bad,bad] SecB: [Y,Y,N][good,good,cant say] SecC: [Y,N][true,false]"
    now I want to create a record store with three records in it for each i.e. SecA, SecB, SecC. So that I can retrieve them easily using enumerateRecord.
    Please guide me and give me some links or suggestions to achieve the above thing.
    Best Regards

    Hi,
    I'd not use multiple records for this case. Managing more records needs more and redundant effort.
    Just use single record. Create ByteArrayOutputStream->DataOutputStream and put multiple strings via writeUTF() (plus any other data like number of records at the beginning...), then save the byte array to the record...
    It's easier, it's faster (runtime), it's better manageable...
    Rada

  • Help needed in deploying a record store

    i have to deploy a MIDlet suite over OTA my MIDlet is not able to access Record store which is in /home/Rizwan/WTK2.2/appdb/DefaultColorPhone/record.db how
    Jaring is achieved
    Thankx in advance

    You can't jar and deploy it. You'll need to fill the RMS from some file in your jar the first time you start your midlet.

  • Getting Problem after Deleting a record from Record Store

    I am trying to create a simple application for mobile device. This application storing some records. I used RMS for this. These records i show in a list. But i tried to show list of records after deleting any record then list shows only prior records of deleted records n then shows exception as
    Recordsjavax.microedition.rms.InvalidRecordIDException
    The code i written as follows
    For storing data
    public void storeExercise(String EName, String Etime)
    try
    //System.out.println("AAAA");
    recordstore = RecordStore.openRecordStore("Test3",true);
    catch (Exception error)
    //System.out.println("EEEE");
    System.out.println("Exception"+error);
    try
    byte[] outputRecord;
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    DataOutputStream outputdataStream = new DataOutputStream(outputStream);
    outputdataStream.writeUTF(EName);
    outputdataStream.writeUTF(Etime);
    outputdataStream.flush();
    outputRecord = outputStream.toByteArray();
    recordstore.addRecord(outputRecord, 0, outputRecord.length);
    outputStream.reset();
    outputStream.close();
    outputdataStream.close();
    zlist.append(EName+Etime, null);
    display.setCurrent(zlist);
    catch (Exception error)
    System.out.println("Exception in writing Records"+error);
    for getting records
    public void getExercise(ZimList zlist)
    this.zlist = zlist;
    try
    //System.out.println("AAAA");
    recordstore = RecordStore.openRecordStore("Test3",true);
    //recordstore.closeRecordStore();
    catch (Exception error)
    //System.out.println("EEEE");
    System.out.println("Exception"+error);
    try
    //System.out.println("Hello");
    String Ename = null;
    String Etime = null;
    byte[] byteInputData = new byte[100];
    ByteArrayInputStream inputStream = new ByteArrayInputStream(byteInputData);
    DataInputStream inputDataStream = new DataInputStream(inputStream);
    for (int x=1; x<= recordstore.getNumRecords() ; x++ )
    System.out.println("Record Id ="+x);
    //if (x != InvalidRecordID)
    recordstore.getRecord(x, byteInputData, 0);
    Ename = inputDataStream.readUTF();
    Etime = inputDataStream.readUTF();
    inputStream.reset();
    Final = Ename + Etime;
    System.out.println("Insert" + Final);
    zlist.insert(x-1,Final,null);
    inputStream.close();
    inputDataStream.close();
    //recordstore.closeRecordStore();
    catch (Exception error)
    System.out.println("Exception in Reading Records"+error);
    /*if (recordstore.listRecordStores() != null)
    try
    recordstore.deleteRecordStore("My Record Store");
    catch (Exception error)
    System.out.println("Exception"+error);
    And for deleting records I write
    public void deleteExercise(int index)
    try
    //System.out.println("AAAA");
    recordstore = RecordStore.openRecordStore("Test3",true);
    //recordstore.closeRecordStore();
    catch (Exception error)
    //System.out.println("EEEE");
    System.out.println("Exception"+error);
    if (recordstore.listRecordStores() != null)
    try
    byte[] byteInputData = new byte[100];
    ByteArrayInputStream inputStream = new ByteArrayInputStream(byteInputData);
    DataInputStream inputDataStream = new DataInputStream(inputStream);
    for (int x=1; x<= recordstore.getNumRecords() ; x++ )
    recordstore.getRecord(x, byteInputData, 0);
    if (x == index)
    recordstore.deleteRecord(index);
    //x--;
    inputStream.reset();
    break;
    inputStream.close();
    inputDataStream.close();
    catch (Exception error)
    System.out.println("Exception in Deleting Records"+error);
    Please Help me bcz i am new in j2me development n having no experience

    Ok ...
    When you add records in you store, the J2ME implementation create an ID.
    In the database, there is a list like that with ID <--> ]byte[ ]
    You can get back a record with a this ID.
    When you delete a record, it deletes the row. Lets say you have stored 3 records and that the ID are 1, 2, 3 ... if you delete the second one, then you have still in the database IDs 1 and 3.
    That's why you have this exception : you are iterating with an ID 1, 2, 3, 4, 5 ... if one is delete there is no reorganization. (If you add an other record, it could be stored with ID 2).
    To read all the records, you should get a list of existing IDs. Take a look at the API. Here is a piece of code, that you work but I have not tested :
    RecordStore rs;
    RecordEnumeration re = rs.enumerateRecords(null, null, false);
    while (re.hasNextElement()) {
      String str = new String(re.nextRecord());
      System.out.println("Record: " + str);         
    } Hope it will help you.
    Regards

  • Captivate 8 Tin Can - problem communicating with the learning record store

    When publishing a course to Tin Can format, what should I enter in the 'Identifier' field?
    If I publish with the default 'Course_ID1' text, I get an error when launching the course on our LMS. Errors says "There was a problem communicating with the learning record store."

    Hello,
    Welcome to Adobe Forums.
    Please share your contact information via [email protected]
    Thanks,
    Vikram Gaur
    Adobe Support

  • Record set size in Gantt Chart

    Hi all,
    I am developing an application that has a Gantt Chart.
    The tree drawn is a 2 level tree. I have two VOs.
    The second VO (Child) has more than 20 rows. I want to show only 10 child at once.
    Record set size attribute is the one that is used to restrict the size of the number of nodes displayed. Just like in HGRID.
    But when the graph is rendered the values that I give are being ignored and the entire graph is rendered.
    Any pointers or suggestions on this will be really helpful.
    Regards,
    Santhosh.

    Hi Santosh,
    As Anand suggested to add the "rownum <= 10" condition to limit the record set.
    But this condition should be set in View Link SQL(Query where clause).
    I hope this will work.
    Thanks
    Renu

  • Need advice: About record store

    Hi,
    I am developing an application which will first display a list of options to users (multiple choice i.e. with check boxes). The list of options could be anything, such as movie titles, etc.
    The application will need to allow users to select their options by
    checking the check box, and save the selected ones in record store.
    My problem is, the next time when users launch the application, how
    should it read in the records from record store, such that options
    previously selected by them are "checked"? For instance, a user selected "Stardust" and exit the application. Then when he re-launches the application, he will see "Stardust" as checked.
    I was thinking of using a loop, which will read in each record, and compare with the list; then check those which are identical. But I reckon this is rather inefficient? How shall I solve the problem?
    Thanks in advance :)

    Hmm... maybe I misunderstood your application. Where do you load the list, I thought it was from the RecordStore.
    If you save only the selected items in rms, you've already done all you need to do.
    Hey, by "control character" I didn't mean any special character. If I had to save all items and their selection status, I would probably prepend "Y" or "N" for the selection status and when loading, read the first character for status and the rest of the String for the name.
    There may be a more efficient way to so this but I don't know of any. Keep checking back, some professional developer may offer advice.
    Cheers, db

  • 6230i 'record store full' when it isn't

    When I download emails I get 'record store full' message. I have deleted all messages and all pitures. When I go to 'e-mail storage' it shows me that my inbox has zero messages, but it says that my inbox is 73% full! All other folders are empty. I have removed the card, sim, battery etc and restarted - no difference. Is this a hardware problem?
    PS This used to work fine till yesterday - I always use my phone to download emails.

    I have now solved the problem which suddenly apeared a few weeks ago. I backed up the entire phone using PC-suite having first saved all my contacts on the SIM card. (I don't trust the contacts management in PC-suite.)
    I then had the phone software upgraded by my local dealer. I now have: nokia 6230i V 03.88 vs before V 03.70, 28 jul 06 RM-72, GSM P1.1
    I then restored from the backup and got most of it back. Some minor problem with display etc settings. I also lost the email settings but I could download from my mail provider and it now works. The key seems to be that my inbox setting which before shoved 0 messages but 31% utilisation now is back to 0%.
    Cheers JATO

  • Implementing a record store in a J2SE environment.

    Hi,
    I am new to J2ME, I am basically learning it as I go. What i am trying to do is convert a J2ME application so that it can run in a J2SE environment. I am intending on running several instances of this application in a desktop environment so I can perform scalability testing.
    The trouble I am having is finding a way to implement the record store that is usually implement by the different classes that are included in the "import javax.microedition.rms.*" in the desktop environment.
    If anybody has any suggestions as to how this could be implemented. please get back to me.
    Thanks,
    Darryl Smith

    Hi,
    I did kind of find a solution to this issue. I came across some code online that basically convert the j2me record store class into a j2se record store.
    Take a look at the code here: http://www.mrl.nott.ac.uk/~cmg/EQUIP2/
    I did however have to do a fair bit of tweaking to get it to do what i wanted but by looking at this code i got an idea of what i needed to do.
    Hope this helps.

  • Failed to configure schema record store. Failed to initialize record stores

    hi guys,
    i am creating endeca app using depolyment template module.
    While runnig intilalise_services.bat , i am facing this issue....
    Can anybody tel me the solution?
    Creating fresh record stores:
    Successfully created component: Discover_en_schema
    Successfully created component: Discover_en_dimvals
    Successfully created component: Discover_en_prules
    Successfully created component: Discover_en_data
    ==================================================
    Deploying rs configs:
    Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Response was of unexpected text/html ContentType. Incoming portion of HTML stream: <HTML><HEAD><TITLE>Direc
    <H1>Directory: /Discover_en_schema/</H1>
    <TABLE BORDER=0>
    <TR><TD>WEB-INF/ </TD><TD ALIGN=right>0 bytes </TD><TD>Jan 17, 2013 11:50:08 AM</TD></TR></TABLE>
    </BODY></HTML>
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:156)
    at $Proxy53.setConfiguration(Unknown Source)
    at com.endeca.itl.recordstore.cmd.task.SetConfigurationTask.process(SetConfigurationTask.java:30)
    at com.endeca.itl.cmd.BaseCmd.run(BaseCmd.java:412)
    at com.endeca.itl.recordstore.cmd.RecordStoreCmd.main(RecordStoreCmd.java:111)
    Caused by: org.apache.cxf.interceptor.Fault: Response was of unexpected text/html ContentType. Incoming portion of HTML stream: <HTML><HEAD><TITLE>Directory: /Discover_en_s
    <H1>Directory: /Discover_en_schema/</H1>
    <TABLE BORDER=0>
    <TR><TD>WEB-INF/ </TD><TD ALIGN=right>0 bytes </TD><TD>Jan 17, 2013 11:50:08 AM</TD></TR></TABLE>
    </BODY></HTML>
    at org.apache.cxf.interceptor.StaxInInterceptor.handleMessage(StaxInInterceptor.java:79)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:797)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1618)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1491)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1399)
    at org.apache.cxf.io.AbstractWrappedOutputStream.close(AbstractWrappedOutputStream.java:72)
    at org.apache.cxf.io.AbstractThresholdOutputStream.close(AbstractThresholdOutputStream.java:102)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:646)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:533)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:88)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
    ... 4 more
    Failed to configure schema record store.
    Failed to initialize record stores.

    This is related to the Oracle Endeca Commerce product. You should try your post in that forum.
    Technical Questions

  • Software to build on-line record store

    Are there any off the shelf packages that
    will enable me to build an ON-LINE RECORD STORE,
    that includes listening to samples of music
    downloading music etc, searcing. I have to do it within 6 weeks I Basically want to use one package without
    use many software packages OR USING cgi, jsp's or asp.

    Crosspost.

  • How to optimize recorded video size?

    Hello, I made a Flash app to broadcast live cam to FMS server. After 2 hours of live stream the recorded video size is about 550 MGB (4 hours=1 GB). Is that normal or I still can optimize the video size?
    This my camera setting:
    camera.setMode(540, 380, 30);
    camera.setQuality(0, 85);
    camera.setKeyFrameInterval(30);
    Thanks

    You may have to see if third party software can see this video & extract it from your phone:
    http://www.wideanglesoftware.com/touchcopy/index.php

  • How to parse a record (from record store) to String?

    Hi,
    I have a record store which stores movie titles specified by users (from multiple-selection list). I tried to access the records using nextRecord() from RecordEnumeration. This would return a byte array.
    How shall I parse the byte array to a String? I tried ByteArrayInputStream toString() method; I tried creating a new String with the byte as parameter. But it simply does not produce the original String. Sometimes it gives me something like a hex. string. Can anyone point out what has gone wrong?
    Thanks.

    lily2007 wrote:
    toString() returns this: "java.io.ByteArrayInputStream@1cb37664"
    What does it mean?That means that toString() is not overridden and does not return the content of the stream as a bytearray (ByteArrayOutputStream however does do this).
    I tried the new String(byte) method and got back the original String but with some whitespace in front.Let me guess: you write the string using writeUTF()?

  • Record fetch size property hint

    Hi all,
    I'm using Oracle Forms Builder 10g and Oracle DB 11g. I have a LoV which selects about 150k rows. In fact in the DB the select * from <table> returns first 50 rows for about a second. My question is: What value to set for Record fetch size property to receive the first records faster because now it is loading about 20-30 seconds/which is unacceptable for me :) /. I checked docs for this property and if i increase it i suppose it will display rows faster?
    Thanks in advance,
    Bahchevanov.

    The records are composed of two columns, a code (5 characters) and a description (average size 25 characters). The average size of the record is then approx. 30 characters. From the documentation available in Forms:
        Also, the way in which the actual value is computed when a value of 0 is
        specified has changed. The actual value in this case is now
        0.5 M / total_record_size (i.e. sum_of_column_sizes, not max_column_size),
        but no more than 100 and no less than 20.  The coefficients (0.5 M, 100, and
        20) can be changed by setting these environment variables: 
        FORMS_COMPUTED_RGFS_DIVIDEND, FORMS_MAX_COMPUTED_RGFS,
        and FORMS_MIN_COMPUTED_RGFS.I believe that we are running with the default. Is this OK for this data set? Do we need to set the environmental variables listed above?
    Thanks,
    Thomas

Maybe you are looking for

  • Error while Scheduling Full DB back up?

    Hi gurus, I got error while schedule full DB back up. I am follow all the steps.but i got this error. 1. go to DB13 2. select Day 3.select full DB backup 4.select time 5.select sid, msdb,inttape,verify backup 5.add. our DB is MS-SQL server Data Base

  • Error in SUS PO creation

    Hi All, I am trying to send R/3 PO to SUS system through XI. Both in R/3 and XI I could not see any errors. But in SUS system when I check in SXMB_MONI, it displays as "APPLICATION_ERROR", (An error occured within an XI interface: Exception occurredA

  • Acrobat 9 Pro won't let me print to a printer

    Whenever I try to print, whether through the icon or the drop down menu, the printer dialog box will pop up, but after I click OK it just sends me to the print to file/save as dialog box. This happens whether I try to print a file through Chrome, Fir

  • Video wont sync with iphone

    i bought a music video on my iphone. synced it with itunes on my pc and now it won't sync back on to my iphone!

  • Trigger's execution hierarchy

    HI, EVERYONE; I AM NEW TO DEVELOPER, SO PLZ HELP ME. I HAVE CREATED A FORM WITH A DATABLOCK. I HAVE WRITTEN A "WHEN_MOUSE_CLICK" TRIGGER ON FORM,BLOCK,ITEM LEVEL ECAH HAVING EXECUTION-HIERARCHY PROPERTY TO "BEFORE" WITH DIFFERENT MESSAGES. WHEN FIRST