boot_z_ =: 3 : '0!:0 < y.'
boot_z_ 'myutil.js'
4!:55 <'boot_z_'

   det=.-/ .*
   mp=.+/ .*
   pint=.[,]%>:@i.@#@]

   pdif=.}.@(]*i.@#@])
   pol=.+/@([*]^i.@(#@[))
   poly=.pol"1 0
   pit=. ]-([ poly ])%pdif@[poly ]
   pit1=. 3 : 'x;(x=.>{.y.)pit>{:y.'
   pnm=.>@{:@(pit1 ^:_@;)
   pnms=.pnm f."1 0

   N=:100000
   lta=: 3 :'(y. mult y.)sub 2'
   dig=:10&#.(^:_1)

   lpower=: 3 : 0
   n=.y.
   m=.p=.2
   i=.1
   while.n>i do.
    rp=.p mult m
    p=.rp
    i=.>:i
   end.
   ''
   p sub 1
   )
   
   add=: 3 : 0
   :
   x=.x.
   y=.y.
   i=.#x
   if.(#x)<#y do.
    i=.#y
    x=.(-i){.x
   else.y=.(-i){.y
   end.
   z=.x+y
   i=.<:i
   while.i>:0 do.
    zi=.(i{x)+i{y
    if.c=.N<:zi do.
     z=.(zi-N) i}z
     x=.(>:(<:i){x) (<:i)}x
    else. z=.zi i}z
    end.
    i=.<:i
   end.
   z
   if. c=1 do.1,z end.
   )

   sqr=: 3 : 0
   y=.y.
   i=.0
   while. y>:i do.
    y=.y add y
    i=.i+1
   end.
   y
   )
   
   sub=: 3 : 0
   :
   x=.x.
   y=.y.
   i=.#x
   y=.(-i){.y
   if.(0{x)<0{y do.
    'error-negativ difference'
    return
   end.
   z=.x-y
   i=.<:i
   while.i>:0 do.
    zi=.(i{x)-i{y
    if.zi<0 do.
     z=.(N+zi) i}z
     x=.(<:(<:i){x) (<:i)}x
    else. z=.zi i}z
   end.
   i=.<:i
   end.
   z
   )
   
   div=: 3 : 0
   :
   x=.x.
   y=.y.
   z=.(#x)#0
   n=.<:#x
   i=.0
   while.i<:n do.
    p=.<.(i{x)%y
    q=.y|(i{x)
     if.i<n do.
      x=.((q*N)+(>:i){x)(>:i)}x
     end.
    z=.p i}z
    i=.>:i
    end.
   z
   )

   
   mul=: 3 : 0
   :
   i=.<:#x.
   x=.x.
   q=.y.
   p=.x*q
   while.i>:0 do.
    if.(pi=.i{p)>:N do.
     p=.(N|pi) i}p
      if.i>0 do.
       p=.(((<:i){p)+<.pi%N)(<:i)}p
      else.p=.(<.pi%N),p
      end.
     end.
    i=.<:i
    end.
   p
   )
   
   mult=: 3 : 0
   :
   p=.x.
   q=.y.
   i=.<:#q
   j=.i
   r=.i#0
   while.i>:0 do.
    rp=.(p mul (i{q)),(j-i)#0
    r=.r add rp
    i=.<:i
    end.
   r
   )

   rp127=: 3 : 0
   :
   x=.x.
   n=.y.
   m=.1
   while. n>:m do.
    xa=.x xmody3 127
    wr xa
    x=.xa
    m=.>:m
   end.
   ''
   xa
   )

   rp521c=: 3 : 0
   :
   x=.x.
   n=.y.
   m=.1
   while. n>:m do.
    xa=.x xmody6 521
    if.(0{xa)=0 do.xa=.}.xa end.
    wr xa
    x=.xa
    m=.>:m
   end.
   ''
   xa
   )
   xmody3=: 3 : 0
   :
   x=.(lta x.)mul 32[Mp=.(lpower y.)mul 32
   y=.{.Mp[i=.0
   if.((0{x)-y)>0 do.n=.(#x)-#Mp
   else.n=.<:(#x)-#Mp end.
   while.n>:i do.
   if.((0{x)-y)>0 do.k=.<.(0{x)%y
   else.k=.<.(((0{x)*N)+1{x)%y end.
   label_0.mpk=.Mp mul k
   if.(((0{x)*N)+1{x)<((0{mpk)*N)+1{mpk
   do. k=.<:k
   goto_0. end.
   t=.x sub (Mp mul k),(n-i)#0
   if.(0{t)=0 do.xa=.}.t else.xa=.t end.
   x=.xa
   i=.>:i
   end.
   ''
   if.(0{xa)=0 do.wr xa end.
   xa div 32
   )

   xmody6=: 3 : 0
   :
   x=.(lta x.)mul 512[Mp=.(lpower y.)mul 512
   y=.{.Mp[i=.0
   if.((0{x)-y)>0 do.n=.(#x)-#Mp
   else.n=.<:(#x)-#Mp end.
   while.n>:i do.
   if.((0{x)-y)>0 do.k=.<.(0{x)%y
   else.k=.<.(((0{x)*N)+1{x)%y end.
   label_0.mpk=.Mp mul k
   if.(((0{x)*N)+1{x)<((0{mpk)*N)+1{mpk
   do. k=.<:k
   goto_0. end.
   t=.x sub (Mp mul k),(n-i)#0
   if.(0{t)=0 do.xa=.}.t else.xa=.t end.
   x=.xa
   i=.>:i
   end.
   ''
   if.(0{dig 0{xa)=9 do.xa=.}.}.xa add Mp end.
   xa div 512
   )