

#include "BUILTIN.h"
extern OBJ _ABSTree_46(OBJ,OBJ);extern OBJ __ABSTree_46;
extern OBJ _ABSTree_49(OBJ,OBJ);extern OBJ __ABSTree_49;

#include "Nat.h"
extern OBJ _APair_5(OBJ);extern OBJ __APair_5;
extern OBJ _ATreeMap_3(OBJ,OBJ);extern OBJ __ATreeMap_3;
extern OBJ _ABSTreeConv_11(OBJ,OBJ);extern OBJ __ABSTreeConv_11;
extern OBJ _ATreeZip_4(OBJ,OBJ,OBJ);extern OBJ __ATreeZip_4;
extern TUP2 _ATreeZip_5(OBJ,OBJ);extern OBJ __ATreeZip_5;

#include "Char.h"
extern OBJ _ABSTreeZip_7(OBJ,OBJ,OBJ,OBJ,OBJ,OBJ);OBJ __ABSTreeZip_7; /* zip */
extern TUP2 _ABSTreeZip_8(OBJ,OBJ,OBJ,OBJ,OBJ);OBJ __ABSTreeZip_8; /* unzip */
extern OBJ _ABSTreeZip_9(OBJ,OBJ,OBJ,OBJ,OBJ,OBJ);OBJ __ABSTreeZip_9; /* ` */
extern TUP2 _ABSTreeZip_10(OBJ,OBJ,OBJ,OBJ,OBJ);OBJ __ABSTreeZip_10; /* `,1 */

extern OBJ _ABSTreeZip_7(OBJ x1,OBJ x2,OBJ x3,OBJ x4,OBJ x5,OBJ x6) /* zip */
{OBJ r;
 CPCLS(__ABSTreeZip_9,1);
 CPCLS(x3,2);
 {OBJ x7;OBJ x8;OBJ x9;OBJ x10;
  x7=(*(OBJ(*)(OBJ,OBJ,OBJ,OBJ,OBJ))METHOD(__ABSTreeZip_9,4))(__ABSTreeZip_9,x1,x2,x3,x4);
  x8=_ATreeZip_4(x7,x5,x6);
  COPY(x8,1);
  x9=_ABSTree_46(x3,x8);
  if(ISTGPRM(x9,1)){
   CPCLS(x3,1);
   COPY(x8,1);
   x10=_ABSTree_49(x3,x8);
  }else{
   x10=__ABUILTIN_3;}
  if(ISTGPRM(x10,1)){
   r=x8;
   FRCLS(x3,1);
  }else{
   CPCLS(__APair_5,1);
   {OBJ x11;
    x11=_ATreeMap_3(__APair_5,x8);
    r=_ABSTreeConv_11(x3,x11);}}}
 return r;}

extern TUP2 _ABSTreeZip_8(OBJ x1,OBJ x2,OBJ x3,OBJ x4,OBJ x5) /* unzip */
{TUP2 r;
 CPCLS(__ABSTreeZip_10,1);
 CPCLS(x1,2);
 CPCLS(x2,2);
 {OBJ x6;TUP2 x8;OBJ x10;OBJ x11;OBJ x13;OBJ x12;OBJ x17;OBJ x15;
  x6=(*(OBJ(*)(OBJ,OBJ,OBJ,OBJ,OBJ))METHOD(__ABSTreeZip_10,4))(__ABSTreeZip_10,x1,x2,x3,x4);
  x8=_ATreeZip_5(x6,x5);
  COPY(x8.c1,1);
  COPY(x8.c2,1);
  x10=_ABSTree_46(x2,x8.c2);
  x11=_ABSTree_46(x1,x8.c1);
  if(ISTGPRM(x11,1)){
   CPCLS(x1,1);
   COPY(x8.c1,1);
   x13=_ABSTree_49(x1,x8.c1);
  }else{
   x13=__ABUILTIN_3;}
  if(ISTGPRM(x10,1)){
   CPCLS(x2,1);
   COPY(x8.c2,1);
   x12=_ABSTree_49(x2,x8.c2);
  }else{
   x12=__ABUILTIN_3;}
  if(ISTGPRM(x13,1)){
   x17=x8.c1;
   FRCLS(x1,1);
  }else{
   CPCLS(__APair_5,1);
   {OBJ x16;
    x16=_ATreeMap_3(__APair_5,x8.c1);
    x17=_ABSTreeConv_11(x1,x16);}}
  if(ISTGPRM(x12,1)){
   r.c2=x8.c2;r.c1=x17;
   FRCLS(x2,1);
  }else{
   r.c1=x17;
   CPCLS(__APair_5,1);
   {OBJ x14;
    x14=_ATreeMap_3(__APair_5,x8.c2);
    r.c2=_ABSTreeConv_11(x2,x14);}}}
 return r;}
extern OBJ _ABSTreeZip_8_c(OBJ x1,OBJ x2,OBJ x3,OBJ x4,OBJ x5) /* unzip */
{OBJ r;
 {TUP2 t=_ABSTreeZip_8(x1,x2,x3,x4,x5);
  PRD1(2,r);
  FLD1(r,1)=t.c1;
  FLD1(r,2)=t.c2;}
 return r;}

extern OBJ _ABSTreeZip_9(OBJ x1,OBJ x2,OBJ x3,OBJ x4,OBJ x5,OBJ x6) /* ` */
{OBJ r;
 FRCLS(x1,1);
 FRCLS(x2,1);
 FRCLS(x3,1);
 {OBJ x20=FLD1(x5,1);OBJ x21=FLD1(x5,2);FLAG x_x5=EXPRD(x5,1);
  if(x_x5){
  }else{
   COPY(x20,1);}
  {OBJ x29=FLD1(x6,1);
   if(EXPRD(x6,1)){
    DSPRDF(x6);
   }else{
    COPY(x29,1);
    FRPRD(x6,1);}
   {OBJ x31;
    x31=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(x4,2))(x4,x20,x29);
    if(x_x5){
     RSOME(x5,r);FLD1(r,1)=x31;
    }else{
     FRPRD(x5,1);PRD1(2,r);FLD1(r,1)=x31;FLD1(r,2)=x21;}}}}
 return r;}

extern TUP2 _ABSTreeZip_10(OBJ x1,OBJ x2,OBJ x3,OBJ x4,OBJ x5) /* `,1 */
{TUP2 r;
 FRCLS(x1,1);
 FRCLS(x2,1);
 FRCLS(x3,1);
 {OBJ x17=FLD1(x5,1);OBJ x18=FLD1(x5,2);FLAG x_x5=EXPRD(x5,1);
  if(x_x5){
  }else{
   COPY(x17,1);}
  {OBJ x20;OBJ x21;
   {OBJ t=(*(OBJ(*)(OBJ,OBJ))METHOD(x4,1))(x4,x17);
    x20=FLD1(t,1);
    x21=FLD1(t,2);
    DSPRDF(t);}
   if(x_x5){
    RSOME(x5,r.c2);FLD1(r.c2,1)=x21;
   }else{
    FRPRD(x5,1);PRD1(2,r.c2);FLD1(r.c2,1)=x21;FLD1(r.c2,2)=x18;}
   PRD1(2,r.c1);FLD1(r.c1,1)=x20;FLD1(r.c1,2)=x18;}}
 return r;}
extern OBJ _ABSTreeZip_10_c(OBJ x1,OBJ x2,OBJ x3,OBJ x4,OBJ x5) /* `,1 */
{OBJ r;
 {TUP2 t=_ABSTreeZip_10(x1,x2,x3,x4,x5);
  PRD1(2,r);
  FLD1(r,1)=t.c1;
  FLD1(r,2)=t.c2;}
 return r;}

static OBJ _mt_5_0_3(OBJ t,OBJ t1,OBJ t2,OBJ t3) 
{OBJ r;
 DPCLS(t,r);
 INCCLS(r,0,3);
 FLDCLS(r,1)=t1;
 FLDCLS(r,2)=t2;
 FLDCLS(r,3)=t3;
 return r;}

static OBJ _mt_5_0_4(OBJ t,OBJ t1,OBJ t2,OBJ t3,OBJ t4) 
{OBJ r;
 DPCLS(t,r);
 INCCLS(r,0,4);
 FLDCLS(r,1)=t1;
 FLDCLS(r,2)=t2;
 FLDCLS(r,3)=t3;
 FLDCLS(r,4)=t4;
 return r;}

static OBJ _mt_5_3_1(OBJ t,OBJ t1) 
{OBJ r;
 if(EXCLS(t)){
  r=t;
 }else{
  DPCLS(t,r);
  FLDCLS(r,1)=FLDCLS(t,1);
  FLDCLS(r,2)=FLDCLS(t,2);
  FLDCLS(r,3)=FLDCLS(t,3);
  COPY(FLDCLS(r,1),1);
  COPY(FLDCLS(r,2),1);
  COPY(FLDCLS(r,3),1);}
 INCCLS(r,3,1);
 FLDCLS(r,4)=t1;
 return r;}

static OBJ _mt_5_3_2(OBJ t,OBJ t1,OBJ t2) 
{OBJ r;
 if(EXCLS(t)){
  DSCLSF(t);
 }else{
  COPY(FLDCLS(t,1),1);
  COPY(FLDCLS(t,2),1);
  COPY(FLDCLS(t,3),1);
  DCCLS(t,1);}
 r=(*(OBJ(*)(OBJ,OBJ,OBJ,OBJ,OBJ))ENTRY(t))(FLDCLS(t,1),FLDCLS(t,2),FLDCLS(t,3),t1,t2);
 return r;}

static OBJ _mt_5_4_1(OBJ t,OBJ t1) 
{OBJ r;
 if(EXCLS(t)){
  DSCLSF(t);
 }else{
  COPY(FLDCLS(t,1),1);
  COPY(FLDCLS(t,2),1);
  COPY(FLDCLS(t,3),1);
  COPY(FLDCLS(t,4),1);
  DCCLS(t,1);}
 r=(*(OBJ(*)(OBJ,OBJ,OBJ,OBJ,OBJ))ENTRY(t))(FLDCLS(t,1),FLDCLS(t,2),FLDCLS(t,3),FLDCLS(t,4),t1);
 return r;}
static OBJ _mt_5_4_1_l(OBJ t,OBJ t1) 
{OBJ r;
 r=(*(OBJ(*)(OBJ,OBJ,OBJ,OBJ,OBJ))ENTRY(t))(FLDCLS(t,1),FLDCLS(t,2),FLDCLS(t,3),FLDCLS(t,4),t1);
 if(EXCLS(t)){
  DSCLSF(t);
 }else{
  DCCLS(t,1);
  FLDCLS(t,1)=NIL;FLDCLS(t,2)=NIL;FLDCLS(t,3)=NIL;FLDCLS(t,4)=NIL;
  COPY(r,1);LZYCLS(t,r);}
 return r;}

static OBJ _mt_6_0_3(OBJ t,OBJ t1,OBJ t2,OBJ t3) 
{OBJ r;
 DPCLS(t,r);
 INCCLS(r,0,3);
 FLDCLS(r,1)=t1;
 FLDCLS(r,2)=t2;
 FLDCLS(r,3)=t3;
 return r;}

static OBJ _mt_6_0_4(OBJ t,OBJ t1,OBJ t2,OBJ t3,OBJ t4) 
{OBJ r;
 DPCLS(t,r);
 INCCLS(r,0,4);
 FLDCLS(r,1)=t1;
 FLDCLS(r,2)=t2;
 FLDCLS(r,3)=t3;
 FLDCLS(r,4)=t4;
 return r;}

static OBJ _mt_6_3_1(OBJ t,OBJ t1) 
{OBJ r;
 if(EXCLS(t)){
  r=t;
 }else{
  DPCLS(t,r);
  FLDCLS(r,1)=FLDCLS(t,1);
  FLDCLS(r,2)=FLDCLS(t,2);
  FLDCLS(r,3)=FLDCLS(t,3);
  COPY(FLDCLS(r,1),1);
  COPY(FLDCLS(r,2),1);
  COPY(FLDCLS(r,3),1);}
 INCCLS(r,3,1);
 FLDCLS(r,4)=t1;
 return r;}

static OBJ _mt_6_3_3(OBJ t,OBJ t1,OBJ t2,OBJ t3) 
{OBJ r;
 if(EXCLS(t)){
  DSCLSF(t);
 }else{
  COPY(FLDCLS(t,1),1);
  COPY(FLDCLS(t,2),1);
  COPY(FLDCLS(t,3),1);
  DCCLS(t,1);}
 r=(*(OBJ(*)(OBJ,OBJ,OBJ,OBJ,OBJ,OBJ))ENTRY(t))(FLDCLS(t,1),FLDCLS(t,2),FLDCLS(t,3),t1,t2,t3);
 return r;}

static OBJ _mt_6_4_2(OBJ t,OBJ t1,OBJ t2) 
{OBJ r;
 if(EXCLS(t)){
  DSCLSF(t);
 }else{
  COPY(FLDCLS(t,1),1);
  COPY(FLDCLS(t,2),1);
  COPY(FLDCLS(t,3),1);
  COPY(FLDCLS(t,4),1);
  DCCLS(t,1);}
 r=(*(OBJ(*)(OBJ,OBJ,OBJ,OBJ,OBJ,OBJ))ENTRY(t))(FLDCLS(t,1),FLDCLS(t,2),FLDCLS(t,3),FLDCLS(t,4),t1,t2);
 return r;}

init_ABSTreeZip()
{
 static int visited=0; if(visited) return; visited=1;
 init_ABSTree();
 init_ANat();
 init_AOption();
 init_ASeq();
 init_ATree();
 init_APair();
 init_ATreeMap();
 init_ABSTreeConv();
 init_ATreeZip();
 init_AString();
 init_AChar();
 init_ARelCmp();
 CLS(5,_ABSTreeZip_10_c,__ABSTreeZip_10);
 CLS(6,_ABSTreeZip_9,__ABSTreeZip_9);
 CLS(5,_ABSTreeZip_8_c,__ABSTreeZip_8);
 CLS(6,_ABSTreeZip_7,__ABSTreeZip_7);
 MTH(5,0,3,_mt_5_0_3);LZYMTH(5,0,3,_mt_5_0_3);
 MTH(5,0,4,_mt_5_0_4);LZYMTH(5,0,4,_mt_5_0_4);
 MTH(5,3,1,_mt_5_3_1);LZYMTH(5,3,1,_mt_5_3_1);
 MTH(5,3,2,_mt_5_3_2);LZYMTH(5,3,2,_mt_5_3_2);
 MTH(5,4,1,_mt_5_4_1);LZYMTH(5,4,1,_mt_5_4_1_l);
 MTH(6,0,3,_mt_6_0_3);LZYMTH(6,0,3,_mt_6_0_3);
 MTH(6,0,4,_mt_6_0_4);LZYMTH(6,0,4,_mt_6_0_4);
 MTH(6,3,1,_mt_6_3_1);LZYMTH(6,3,1,_mt_6_3_1);
 MTH(6,3,3,_mt_6_3_3);LZYMTH(6,3,3,_mt_6_3_3);
 MTH(6,4,2,_mt_6_4_2);LZYMTH(6,4,2,_mt_6_4_2);}

