{{header}}
{{object 1 0}} <<
  /Type /Catalog
  /Pages 2 0 R
  /AcroForm 4 0 R
  /OpenAction 40 0 R
>>
endobj
{{object 2 0}} <<
  /Type /Pages
  /Count 2
  /Kids [
    32 0 R
    34 0 R
  ]
>>
endobj
% Forms
{{object 4 0}} <<
  /Fields [
    10 0 R
    11 0 R
  ]
>>
endobj
% Fields
{{object 10 0}} <<
  /Type /Annot
  /Subtype /Widget
  /FT /Tx
  /T (Field_TextEdit)
  /Rect [0 0 612 792]
>>
{{object 11 0}} <<
  /T (Field_ComboBox)
  /Parent 4 0 R
  /Kids [12 0 R]
  /Opt [(a) (b) (c) (d)]
  /V [(a)]
>>
endobj
{{object 12 0}} <<
  /Type /Annot
  /Subtype /Widget
  /FT /Ch
  /Ff 131072
  /Parent 11 0 R
  /Kids [13 0 R]
>>
endobj
{{object 13 0}} <<
  /Parent 12 0 R
  /Type /Annot
  /Subtype /Widget
  /Rect [0 0 612 792]
  /AA << /K 20 0 R >>
>>
endobj
% Pages
{{object 32 0}} <<
  /Type /Page
  /Parent 2 0 R
  /MediaBox [0 0 612 792]
  /Annots [13 0 R]

>>
endobj
{{object 34 0}} <<
  /Type /Page
  /Parent 2 0 R
  /MediaBox [0 0 612 792]
  /Annots [10 0 R]
>>
endobj
% Document JS Action
{{object 40 0}} <<
  /Type /Action
  /S /JavaScript
  /JS 41 0 R
>>
endobj
% JS program to exexute
{{object 41 0}} <<
  {{streamlen}}
>>
stream
var field_text = this.getField("Field_TextEdit");
var field_combobox = this.getField("Field_ComboBox");
field_combobox.setFocus();
this.__defineGetter__("filesize", function new_getter(){
                                    field_text.setFocus();
                                    field_combobox.borderStyle="dashed";
                                    field_combobox.setFocus();
                                  });
endstream
endobj
% OpenAction action
{{object 20 0}} <<
  /S /JavaScript
  /JS 21 0 R
>>
endobj
% JS program to exexute
{{object 21 0}} <<
  {{streamlen}}
>>
stream
var t = this.filesize;
endstream
endobj
{{xref}}
{{trailer}}
{{startxref}}
%%EOF
